说明
环境:
应用 | 版本 |
---|---|
python | 3.9 |
httprunner | 3.1.7 |
用例类型:
查询类用例
设计思路:
本实例为对用户管理查询类用例,由于实际环境限制,故不对返回结果进行数据库校验,仅对接口返回数据进行校验。
用例实例
采用API与用例分离的方式进行用例和API管理。
api
class userPage(HttpRunner):
config = (
Config("用户管理-用户信息查询")
.variables(
**{
"end_create_time": "",
"nick_name": "",
"page": 1,
"page_size": 10,
"phone": "",
"start_create_time": "",
"code": "0",
"message": "成功",
"assert_1": 0,
"result_1": 0,
}
)
.base_url("${get_sys_env(base_url)}")
.export(
*["deptId", "deptName", "nickName", "phonenumber", "userId", "createTime", "count", "status"])
)
teststeps = [
Step(
RunRequest("查询用户信息")
.setup_hook("${setup_hook_headers($request)}")
.post("/users/userpage")
.with_headers(
**{
"token": "$auth_token",
}
)
.with_json(
{
"pageCond": {"page": "$page", "pageSize": "$page_size"},
"parameter": {
"endCreateTime": "$end_create_time",
"nickName": "$nick_name",
"phonenumber": "$phone",
"startCreateTime": "$start_create_time",
},
}
)
.extract()
.with_jmespath("body.data.datalist[0].deptid", "deptid")
.with_jmespath("body.data.datalist[0].deptname", "deptname")
.with_jmespath("body.data.datalist[0].nickname", "nickname")
.with_jmespath("body.data.datalist[0].phone", "phone")
.with_jmespath("body.data.datalist[0].userid", "userid")
.with_jmespath("body.data.datalist[0].createtime", "createtime")
.validate()
.assert_equal("status_code", 200)
.assert_equal("body.code", "$code")
.assert_equal("body.message", "$message")
.assert_equal("$assert_1", "$result_1")
),
]
testcase
步骤说明:
步骤一:
- 调用userPage随机获取一条数据,export出nickname;
步骤二:
- 调用debugtalk.py的cut_data()对nickname进行截取;
- 用截取的nickname传入nick_name进行模糊查询;
- 用JMESPath获取结果,传入assert_1进行断言;
JMESPath释义:
遍历datalist列表的nickname(body.data.datalist[*].nickname),如果存在模糊匹配昵称失败,则匹配失败数据的列表增加一条数据([?contains(@, ‘${cut_data($nickname)}’) == false
]),最后统计匹配失败列表中的数据量(length())
校验方式说明:
假设模糊查询的nickname为test_nickname;
返回结果数据列表中,遍历列表的nickname,返回使用JMESPath模糊匹配不到test_nickname的数量,如果数量大于0,则说明返回数据中存在nickname不包含test_nickname的数据,证明接口数据返回存在问题。
简单来说,就是用JMESPath的模糊匹配校验接口的模糊查询是否正确。
class TestCaseUserPage(HttpRunner):
config = Config("用户管理-用户名称模糊查询")
teststeps = [
Step(
RunTestCase("用户管理-随机获取一条数据")
.call(UserPage)
.export(*["nickname"])
),
Step(
RunTestCase("用户管理-用户名称模糊查询")
.with_variables(**{
"nick_name": "${cut_data($nickName)}",
"assert_1": "body.data.datalist[*].nickname | length([?contains(@, '${cut_data($nickname)}') == `false`])",
})
.call(UserPage)
),
]
debugtalk.py
def cut_data(data: str, index: int = 2) -> str:
"""
截取字符串中的一部分
:param data:
:return:
"""
if len(data) > index:
return data[:index]
else:
return data