httprunner用法
1. httprunner在一个用例single_casecenter_postpone.yaml中:
- config: name: 订单延期 base_url: ${get_config(casecenter_url)} ###前置条件:下单 - test: name: 正常场景_下单成功 variables: expected_result: 'E0000' #成功 testcase: testcases/modulecase/casecenter/module_casecenter_takecase.yaml validate: - eq: [status_code, 200] - eq: [content.code, '000000'] - eq: [content.message, '请求成功'] output: - orderNo - orderId #######订单为待接单时,延期订单失败 - test: name: 异常场景_待接单的订单延期失败 variables: expected_result: 'E0004' #当前订单状态下,不可执行该操作 api: api/pc/casecenter/casecenterPostpone.yaml setup_hooks: - ${sign_api($request)} teardown_hooks: - ${respone_decode($response)} validate: - eq: [status_code, 200] - eq: [content.code, '000000'] - eq: [content.message, '请求成功'] - eq: [content.data.result, $expected_result] ###前置条件:app登录 - test: name: app登录 testcase: testcases/modulecase/app/module_app_login.yaml output: - h5_token - visitorId #作业人员id ###前置条件:作业人员给自己派单 - test: name: 作业管理员给自己派单 testcase: testcases/modulecase/module_dispatch_sendOrder.yaml - test: name: 正常场景_订单延期成功 variables: expected_result: 'E0000' #成功 api: api/pc/casecenter/casecenterPostpone.yaml setup_hooks: - ${sign_api($request)} teardown_hooks: - ${respone_decode($response)} validate: - eq: [status_code, 200] - eq: [content.code, '000000'] - eq: [content.message, '请求成功'] - eq: [content.data.result, $expected_result]
1> 下单module_casecenter_takecase.yaml的域名为A
2> 订单延期api/pc/casecenter/casecenterPostpone.yaml的域名为A
3> app登录module_app_login.yaml的域名为B
4>作业管理员给自己派单module_dispatch_sendOrder.yaml的域名为C
base_url是httprunner框架支持的一个关键字,该流程中,
6> module模块的module_casecenter_takecase.yaml,api/pc/casecenter/casecenterPostpone.yaml是相同的域名,是通过该流程config的base_url求取的A;
7>app登录module_app_login.yaml的域名是通过在module_app_login.yaml脚本的config的base_url求取的B;
8> 作业管理员给自己派单module_dispatch_sendOrder.yaml的域名也是通过在module_dispatch_sendOrder.yaml脚本的config的base_url求取的C;
结论:base_url的作业范围:优先使用内层module的base_url,若module层没有求取该值,则会使用外层用例层(flow或single)求取的base_url;故一般base_url在外层用例层求取,用例某个步骤的base_url是其它特殊值时,可在module层里重新求取该值;
2. 接口中的变量作用范围:
1> 在用例层single_casecenter_postpone.yaml脚本中,步骤 异常场景_待接单的订单延期失败中,直接调用了api层,api接口参数url使用了变量uri赋值
2> 上一步骤的下一个步骤是app登录(module_app_login.yaml),该module调用app登录接口
3> app登录的api中的url也是uri变量赋值
4> 执行脚本后
重要结论:一个用例层的步骤中,直接调用api层时,同一个变量uri一直都为第一个api调用时给的值,后面的api接口通过uri赋值不会生效;故api层维护接口时,
url不要通过变量维护,直接给值即可;