基本组成:第一期还没有加入mock等服务(主要因为公司自己mock没用)主要由5大模块组成,项目管理、模块管理、接口管理、用例管理以及系统设置等,采用bootstrap+django+ajax技术栈,前后端交互都是通过ajax进行交互,沿用HttpRunner思想,用例管理有添加配置(对应config),添加用例(test),注意:和HttpRunner本身区别(一条用例只支持1个Test)但是可以通过include以 config>casename1>casename2 形式组装业务用例。
效果图:
1、首页:
2、添加模块页面:
3、添加配置:
4、添加用例(和添加config类似,只是增加几个编辑栏
):
HttpRunner调用:当然我们还是得熟悉HttpRunner的实现思路,不然我们也找不到合适的切入点修改代码,其中最核心的是把前端提交数据组装成yaml格式:
def load_case(path):
parsed_request = {}
request = {}
testcase_lists = []
for value in path:
if value is not {}:
key_name = str(value.keys())
if 'keyvariables' in key_name:
parsed_request.setdefault('variables', key_value_list(**value))
elif 'keyheader' in key_name:
parsed_request.setdefault('headers', key_value_dict(**value))
elif 'keydata' in key_name:
parsed_request.setdefault('data', key_value_dict(**value))
elif 'keyextract' in key_name:
parsed_request.setdefault('extract', key_value_list(**value))
elif 'keyvalidate' in key_name:
parsed_request.setdefault('validate', key_value_list(name='true', **value))
elif 'case_name' in key_name:
parsed_request['name'] = value.pop('case_name')
elif 'DataType' in key_name:
parsed_request['data_type'] = value.pop('DataType')
elif 'method' in key_name:
request['method'] = value.pop('method')
elif 'url' in key_name:
request['url'] = value.pop('url')
if 'data' in parsed_request.keys():
data_type = parsed_request.pop('data_type')
request.setdefault(data_type, parsed_request.pop('data'))
parsed_request.setdefault('request', request)
testcase_lists.append({'test': parsed_request})
return testcase_lists
有了此转换方法,我们只需要调用即可:
def load_test_file(file_path):
""" load testset file, get testset data structure.
@param file_path: absolute valid testset file path
@return testset dict
{
"name": "desc1",
"config": {},
"api": {},
"testcases": [testcase11, testcase12]
}
"""
testset = {
"name": "",
"config": {
"path": ''
},
"api": {},
"testcases": []
}
tests_list = load_case(file_path)#将此处加载yml函数替换为刚才load_case函数即可
for item in tests_list:
for key in item:
if key == "config":
testset["config"].update(item["config"])
testset["name"] = item["config"].get("name", "")
elif key == "test":
test_block_dict = item["test"]
if "api" in test_block_dict:
ref_name = test_block_dict["api"]
test_info = get_testinfo_by_reference(ref_name, "api")
test_block_dict.update(test_info)
testset["testcases"].append(test_block_dict)
elif "suite" in test_block_dict:
ref_name = test_block_dict["suite"]
test_info = get_testinfo_by_reference(ref_name, "suite")
testset["testcases"].extend(test_info["testcases"])
else:
testset["testcases"].append(test_block_dict)
elif key == "api":
api_def = item["api"].pop("def")
function_meta = parse_function(api_def)
func_name = function_meta["func_name"]
api_info = {}
api_info["function_meta"] = function_meta
api_info.update(item["api"])
testset["api"][func_name] = api_info
return testset
结束语:第一次发这种技术帖子,文笔比较low,因为功能还不完善,现在任务比较重,待空闲之时一定抓紧时间开发,争取早点开源,希望大家多多提出建议,在论坛上学习到很多,感谢大家的无私奉献精神,同时再次感谢@debugtalk,由于引用到HttpRunner代码,希望能得到谅解
原文来自:TesterHome
声明:所有来源为“聚合数据”的内容信息,未经本网许可,不得转载!如对内容有异议或投诉,请与我们联系。邮箱:marketing@think-land.com
通过企业关键词查询企业涉讼详情,如裁判文书、开庭公告、执行公告、失信公告、案件流程等等。
IP反查域名是通过IP查询相关联的域名信息的功能,它提供IP地址历史上绑定过的域名信息。
结合权威身份认证的精准人脸风险查询服务,提升人脸应用及身份认证生态的安全性。人脸风险情报库,覆盖范围广、准确性高,数据权威可靠。
全国城市和站点空气质量查询,污染物浓度及空气质量分指数、空气质量指数、首要污染物及空气质量级别、健康指引及建议采取的措施等。
输入手机号和拦截等级,查看是否是风险号码