pytest+requests+Python3.7+yaml+Allure+Jenkins+docker实现接口自动化测试 (3)

可以针对不同的项目,配置不同的host、header等,通过不同的命名区分,如header1、header2,在yaml测试用例文件中,通过变量名引用即可,比如${host}$,${header1}$

在该接口配置文件里的字段值,可以调用函数助手的功能,引用相关函数,比如header3,在其字段值里即引用了函数RandomString、timestamp产生需要的值,并将值拼接在一起,然后再用加密函数SHA1加密后,传给sign。

3、测试用例的设计

测试用例以yaml格式的文件保存,简洁优雅,表达力又强,用例直接反映了接口的定义、请求的数据以及期望的结果,且将测试用例中的公共部分提取出来,平时只需维护测试数据和期望结果,维护成本低。
yaml测试用例的数据格式如下:

http类型接口

# 用例基本信息 test_info: # 用例标题,在报告中作为一级目录显示,用接口路径倒数第二个字段名作为标题 title: parkinside # 用例所属产品版本,不填则为None product_version: icm_v1.0 # 用例等级,优先级,包含blocker, critical, normal, minor,trivial几个不同的等级 case_level: blocker # 请求的域名,可写死,也可写成模板关联host配置文件,也可写在用例中 host: ${host}$ # 请求地址 选填(此处不填,每条用例必填) address: /${api}$ # 请求头 选填(此处不填,每条用例必填,如有的话) headers: ${header1}$ # 请求协议 http_type: http # 请求类型 request_type: POST # 参数类型 parameter_type: json # 是否需要获取cookie cookies: False # 是否为上传文件的接口 file: False # 超时时间 timeout: 20 # 运行顺序,当前接口在本轮测试中的执行次序,1表示第一个运行,-1表示最后一个运行 run_order: 1 # 前置条件,case之前需关联的接口,与test_case类似,关联接口可写多个 premise: - test_name: 获取token # 必填 info: 正常获取token值 # 选填 address: /GetToken # 请求接口 http_type: http # 请求协议 request_type: GET # 请求方式 parameter_type: # 参数类型,默认为params类型 headers: {} # 请求头 timeout: 10 # 超时时间 parameter: # 可填实际传递参数,若参数过多,可保存在相应的参数文件中,用test_name作为索引 username: "admin" password: "123456" file: False # 是否上传文件,默认false,若上传文件接口,此处为文件相对路径 bool or string relevance: # 关联的键 list or string ;string时,直接写在后面即可;可提取多个关联值,以列表形式,此处提取的关联值可用于本模块的所有用例 # 测试用例 test_case: - test_name: parkinside_1 # 用例ID,第一条用例必填,从1开始递增 case_id: 1 # 是否运行用例,不运行为 False ,空值或其它值则运行 is_run: # 用例描述 info: parkinside test # 参数保存在单独文件中时,可通过文件路径引入参数 parameter: data_parkinside.json # 校验列表(期望结果) check: # 这里为多种校验方式组合 - check_type: json # 校验类型,这里为json校验 expected_code: 200 # 期望状态码 expected_result: result_parkinside.json # 期望结果保存在单独文件中时,可通过文件路径引 - check_type: datebase_check # 校验类型,这里为数据库校验 execute_sql: ${common_sql}$ # 校验时查询数据库的sql语句,可通过变量引入配置中的sql语句,也可以直接写sql语句 result_row_num: 1 # 校验sql语句执行后,数据库返回的结果行数 expected_result: - \'"name": "zhangsan"\' # 校验数据库的字段和对应的值,可校验多个字段值 - \'"age": 18\' # 关联作用范围,True表示全局关联,其他值或者为空表示本模块关联 global_relevance: # 关联键,此处提取的关联值可用于本模块后续的所有用例 relevance: - userID - vpl - test_name: parkinside_2 # 第二条用例 case_id: 2 is_run: info: parkinside # 请求的域名 host: 127.0.0.1:12306 # 请求协议 http_type: http # 请求类型 request_type: POST # 参数类型 parameter_type: json # 请求地址 address: /parkinside # 请求头 headers: Content-Type: application/json # 请求参数 parameter: sign: ${sign}$ # 通过变量引用关联值 vpl: AJ3585 # 是否需要获取cookie cookies: False # 是否为上传文件的接口 file: False # 超时时间 timeout: 20 # 校验列表 check: - check_type: Regular_check #正则校验,多项匹配 expected_code: 200 expected_result: - \'"username": "wuya\' - \'"Parking_time_long": "20小时18分钟"\' - \'"userID": 22\' - \'"Parking fee": "20\$"\' - check_type: datebase_check # 校验类型,这里为数据库校验 execute_sql: \'select name,age,sex from user\' # 校验时查询数据库的sql语句,可以直接写sql语句,也可以通过变量引入 result_row_num: 3 # 仅校验查询数据库返回结果的行数时,期望结果可不填 expected_result: global_relevance: # 关联键 relevance: - test_name: parkinside_3 # 第三条用例 case_id: 3 # 是否运行用例 is_run: # 用例描述 info: parkinside # 请求参数 parameter: vpl: ${vpl}$ userID: ${userID}$ # 校验列表 check: expected_result: result_parkinside.json # 期望结果保存在单独文件中时,可通过文件路径引入 check_type: only_check_status expected_code: 400 global_relevance: # 关联键 relevance:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwjpgg.html