pytest + yaml 框架 -62.支持yaml和json2种格式用例
前言
v1.5.7版本开始新增json格式用例支持,本次版本改动内容
- 1.支持 .json 文件用例
- 2.优化日志中文件后缀名称.yml .yaml .json
- 3.ruamel.yaml 版本兼容0.18.6
yaml 格式用例
yaml 格式用例示例,test_a.yml
test_demo:
name: post
request:
method: POST
url: http://httpbin.org/post
json:
username: test
password: "123456"
extract:
url: body.url
validate:
- eq: [status_code, 200]
- eq: [headers.Server, gunicorn/19.9.0]
- eq: [$..username, test]
- eq: [body.json.username, test]
执行用例
pytest test_a.yml
json 格式用例
前面的yaml 格式用例,等价于以下json格式用例,test_x.json
{
"test_demo": {
"name": "post",
"request": {
"method": "POST",
"url": "http://httpbin.org/post",
"json": {
"username": "test",
"password": "123456"
}
},
"extract": {
"url": "body.url"
},
"validate": [
{"eq": ["status_code", 200]},
{"eq": ["headers.Server", "gunicorn/19.9.0"]},
{"eq": ["$..username", "test"]},
{"eq": ["body.json.username", "test"]}
]
}
}
执行用例
pytest test_x.json
运行报告日志
collected 1 item
test_x.json::test_demo
-------------------------------------------------- live log call --------------------------------------------------
2024-04-18 16:41:20 [INFO]: 执行文件-> test_x.json
2024-04-18 16:41:20 [INFO]: base_url-> http://124.70.221.221:8201
2024-04-18 16:41:20 [INFO]: config variables-> {}
2024-04-18 16:41:20 [INFO]: 运行用例-> test_demo
2024-04-18 16:41:20 [INFO]: 用例步骤name: post
2024-04-18 16:41:20 [INFO]: yml raw -->: {'method': 'POST', 'url': 'http://httpbin.org/post', 'json': {'username':
'test', 'password': '123456'}}
2024-04-18 16:41:20 [INFO]: ------ request info ------
POST http://httpbin.org/post
headers: {
"User-Agent": "python-requests/2.31.0",
"Accept-Encoding": "gzip, deflate",
"Accept": "*/*",
"Connection": "keep-alive"
}
json: {
"username": "test",
"password": "123456"
}
2024-04-18 16:41:21 [INFO]: ------ response info ------
url: http://httpbin.org/post
status_code: 200 OK
headers: {
"Date": "Thu, 18 Apr 2024 08:41:21 GMT",
"Content-Type": "application/json",
"Content-Length": "542",
"Connection": "keep-alive",
"Server": "gunicorn/19.9.0",
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Credentials": "true"
}
cookies: {}
body: {
"args": {},
"data": "{\"username\": \"test\", \"password\": \"123456\"}",
"files": {},
"form": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Content-Length": "42",
"Content-Type": "application/json",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.31.0",
"X-Amzn-Trace-Id": "Root=1-6620dcb1-4aeba72a487a44e00566071c"
},
"json": {
"password": "123456",
"username": "test"
},
"origin": "183.193.25.182",
"url": "http://httpbin.org/post"
}
2024-04-18 16:41:21 [INFO]: extract 提取对象-> {'url': 'body.url'}
2024-04-18 16:41:21 [INFO]: extract 提取结果-> {'url': 'http://httpbin.org/post'}
2024-04-18 16:41:21 [INFO]: validate 校验内容-> [{'eq': ['status_code', 200]}, {'eq': ['headers.Server', 'gunicorn/1
9.9.0']}, {'eq': ['$..username', 'test']}, {'eq': ['body.json.username', 'test']}]
2024-04-18 16:41:21 [INFO]: validate 校验结果-> eq: [200, 200]
2024-04-18 16:41:21 [INFO]: validate 校验结果-> eq: [gunicorn/19.9.0, gunicorn/19.9.0]
2024-04-18 16:41:21 [INFO]: validate 校验结果-> eq: [test, test]
2024-04-18 16:41:21 [INFO]: validate 校验结果-> eq: [test, test]
PASSED [100%]
================================================ 1 passed in 0.90s ==
之前教程全是yaml格式用例,有部分同学反馈不太习惯yaml格式,所以新增了json格式的用例。