K09_HttpRunner参数化:函数动态生成测试数据 + 组合关联参数
在测试用例集合(testsuite)中实现参数化:
- 用例中参数个数:2个 (用户名和密码同时进行参数化处理)
- 数据源提供:通过在外部 debugtalk.py 文件中定义函数实现
- 测试数据: 正确的“用户名/密码”组合为 “admin/admin”
在函数定义中,需要返回一个列表(list),列表里面的元素为字典(dict)类型:
- 如果只涉及一个参数: {"参数名": "参数值"}
- 如果涉及两个相关的参数组合:{"参数名1": "参数值", "参数名2": "参数值"}
文件列表
测试用例文件: testcase_login.yml
- config:
name: 用例 - 登录
- test:
name: login
request:
url: http://localhost/myweb/jxc/index.asp?action=login
method: POST
data:
username: $p_username
pwd: $p_pwd
cookies: ${get_cookie()}
extract:
- info: <frame src=\"(.*)\" name=\"topFrame\"
validate:
- eq: [status_code, 200]
- eq: [$info, top.asp]
测试用例集合文件: testsuite_login.yml
config:
name: 测试集
testcases:
testcase01:
name: 调用用例
testcase: testcase_login.yml
parameters:
p_username-p_pwd: ${set_username(3)}
外置函数定义文件: debugtalk.py
根据传入的参数(n),生成指定个数的用户名和密码数据:
- 用户名命名规则: admin_n, n∈[1, 3]
- 密码命名规则: pwd_n, n∈[1, 3]
def set_username(n):
base_name = "admin"
lst = []
for i in range(1, n+1):
username = "admin_%d" % i
password = "pwd_%d" % i
dic = {"p_username": username, "p_pwd": password}
lst.append(dic)
# 最后附加一对正确的用户名和密码
lst.append({"p_username": "admin", "p_pwd": "admin"})
return lst
if __name__ == "__main__":
# 生成: 3对无效用户名和密码 + 1对有效用户名和密码
print(set_username(3))
在 IDE 中单独执行该函数检验输出,输出了四对用户名和密码测试数据:
- admin_1, pwd_1
- admin_2, pwd_2
- admin_3, pwd_3
- admin, pwd
[
{'p_username': 'admin_1', 'p_pwd': 'pwd_1'},
{'p_username': 'admin_2', 'p_pwd': 'pwd_2'},
{'p_username': 'admin_3', 'p_pwd': 'pwd_3'},
{'p_username': 'admin', 'p_pwd': 'admin'}
]
运行测试用例集合后,查看测试报告