目录
1.对接口进行定义
1.1编写接口定义
1.2调试API
2.测试用例调用已定义的API
3.参数之间的关联
3.1用例中后一步操作的参数需要前一步骤中获得
3.2 通过用例中调用另一个用例并传递所需参数来实现
4.测试步骤的写法
可以先将案例目录tests\api中的get_token.yml拷贝到自己构建的测试结构目录中,Api_api\api,加一些备注,也好知道以后如何照着例子写:
name: get token #接口定义描述
base_url: http://127.0.0.1:5000 #请求的根目录
variables: #定义变量
user_agent: PostmanRuntime/7.24.0
device_sn: ${gen_random_string(15)}
os_platform: ios
app_version: 2.8.6
expected_status_code: 200
request: #请求信息
url: /api/get-token #请求的相对路径
method: POST
headers:
user_agent: $user_agent
device_sn: $device_sn
os_platform: $os_platform
app_version: $app_version
Content-Type: "application/json"
device_sn: $device_sn
json:
sign: ${get_sign($device_sn, $os_platform, $app_version)}
validate: #校验/断言
- eq: ["status_code", $expected_status_code] #状态码
- len_eq: ["content.token", 16] #token字符串长度
- contains: [{"a": 1, "b": 2}, "a"] #此句不明何意?
API 尽量保持完整,可以单独运行,方便调试。
hrun D:\httprunner\Api_api\api\get_token.yml
2.1引用 接口定义
config:
name: 获得 token #必填,测试用例名称,测试报告以此作为标题
variables: #非必填,全局变量,作用域为整个testcase,可合并覆盖API中的variables
user_agent: win/7
os_platform: 'win'
device_sn: TESTCASE_SETUP_001
teststeps:
- name: /api/get-token #必填,测试步骤名称
api: api/get_token.yml
variables: #合并覆盖API中的variables,但不能覆盖config中的variables
user_agent: 'iOS/12'
app_version: '7'
extract:
- session_token: content.token
teardown_hooks:
- ${hook_print($user_agent)}
- ${hook_print($os_platform)}
- ${hook_print($app_version)}
- ${hook_print($device_sn)}
validate:
- eq:
- status_code
- 200
- len_eq:
- content.token
- 16
2.2提取token信息
通过extract关键字提取信息,完整代码如下:
config:
name: 获得 token #必填,测试用例名称,测试报告以此作为标题
variables: #非必填,全局变量,作用域为整个testcase,可合并覆盖API中的variables
user_agent: win/7
os_platform: 'win'
device_sn: TESTCASE_SETUP_001
output: #只能打印出config中定义的变量,和extract提取的信息,步骤中定义的和api中定义的变量,在此输出时找不到数据
- session_token
- user_agent
- os_platform
- app_version
- device_sn
teststeps:
- name: /api/get-token #必填,测试步骤名称
api: api/get_token.yml
variables: #合并覆盖API中的variables,但不能覆盖config中的variables
user_agent: 'iOS/12'
app_version: '7'
extract:
- session_token: content.token #获取token值
output: #放在测试步骤中不会打印出信息
- app_version
teardown_hooks:
- ${hook_print($user_agent)}
- ${hook_print($os_platform)}
- ${hook_print($app_version)}
- ${hook_print($device_sn)}
validate:
- eq:
- status_code
- 200
- len_eq:
- content.token
- 16
1.3使用output关键字输出提取的关键字
在上述代码中,为了在执行结果中便于查看提取的数据,使用output来输出token,但在尝试过程中发现如下2个问题:
1.output写在config中有效,但写在teststeps中,没有起到效果;
2.写在config中,只能打印出config中定义的变量,和extract提取的信息,步骤中定义的和api中定义的变量,在此输出时找不到数据。
例子中,创建用户时,需要接口get_token产出的token数据,下面实现一个创建用户的接口脚本:
config:
name: 创建用户 #必填,测试用例名称,测试报告以此作为标题
variables: #非必填,全局变量,作用域为整个testcase,可合并覆盖API中的variables
user_agent: win/7
os_platform: 'win'
device_sn: ${gen_random_string(15)}
output: #只能打印出config中定义的变量,和extract提取的信息,步骤中定义的和api中定义的变量,在此输出时找不到数据
- session_token
- user_agent
- os_platform
- app_version
- device_sn
extract:
- session_token
teststeps:
- name: 获取token #必填,测试步骤名称
api: api/get_token.yml
variables: #合并覆盖API中的variables,但不能覆盖config中的variables
user_agent: 'iOS/12'
app_version: '7'
extract:
- session_token: content.token #获取token值
teardown_hooks:
- ${hook_print($user_agent)}
- ${hook_print($os_platform)}
- ${hook_print($app_version)}
- ${hook_print($device_sn)}
validate:
- eq:
- status_code
- 200
- len_eq:
- content.token
- 16
- name: 创建用户 #必填,测试步骤名称
api: api/create_user.yml
variables:
token: $session_token
1.需要在被调用参数中,加入extract关键字,获取参数信息,同时在config中也加入此参数,其他用例才能使用获取的参数,于是修改下之前的“获得token”用例,config和测试步骤中均加入extract代码块,完整代码如下:
config:
name: 获得 token #必填,测试用例名称,测试报告以此作为标题
variables: #非必填,全局变量,作用域为整个testcase,可合并覆盖API中的variables
user_agent: 'win/7'
os_platform: 'win'
device_sn: ${gen_random_string(15)}
output: #只能打印出config中定义的变量,和extract提取的信息,步骤中定义的和api中定义的变量,在此输出时找不到数据
- session_token
- user_agent
- os_platform
- app_version
- device_sn
extract: #后续接口需要关联此参数信息,则在此需要加入此关键字和参数
- session_token
teststeps:
- name: /api/get-token #必填,测试步骤名称
api: api/get_token.yml
variables: #合并覆盖API中的variables,但不能覆盖config中的variables
user_agent: 'iOS/12'
app_version: '7'
extract:
- session_token: content.token #获取token值
output: #放在测试步骤中不会打印出信息
- app_version
teardown_hooks:
- ${hook_print($user_agent)}
- ${hook_print($os_platform)}
- ${hook_print($app_version)}
- ${hook_print($device_sn)}
validate:
- eq:
- status_code
- 200
- len_eq:
- content.token
- 16
2.在“创建用户”用例中,调用“获取token”用例:
config:
name: 创建用户 #必填,测试用例名称,测试报告以此作为标题
extract:
- session_token
- device_sn
teststeps:
- name: 获取token #必填,测试步骤名称
testcase: testcases/get_token_new1.yml
extract:
- session_token
- device_sn
- name: 创建用户 #必填,测试步骤名称
api: api/create_user.yml
variables:
token: $session_token
device_sn: $device_sn
两种方式,用例均能执行成功:
写在一起的用例结果:
用例中调用另一个用例的执行结果:
测试步骤在teststeps代码块中,一个name块为一个步骤,如下所示:
config:
name: 创建用户 #必填,测试用例名称,测试报告以此作为标题
extract:
- session_token
- device_sn
teststeps:
- name: 获取token #第一步,获取token
testcase: testcases/get_token_new1.yml
extract:
- session_token
- device_sn
- name: 创建用户 #第二步,根据token创建用户
api: api/create_user.yml
variables:
token: $session_token
device_sn: $device_sn