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格式的用例。

posted @ 2024-04-18 16:44  上海-悠悠  阅读(97)  评论(0编辑  收藏  举报