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不要通过变量维护,直接给值即可;