Pytest 断言语法以及如何从 pytest 函数调用 yml 文件

Pytest assert syntax and how to call yml file from pytest function

这就是我编写单元测试代码的方式:

def test_valid_number():
  check = requests.get("http://testing/validateNumber/021844223")
  assert True

def test_invalid_number():
  check = requests.get("http://testing/validateNumber/02188441")
  assert False 

我的问题是:

  1. 如何正确断言(使用 pytest)以检查 API 响应? 第一个功能是检查有效数字,它 return 结果:

    {"header":[{"STUDENTNUM":"P56219","STUDENTNAME":"GOLDIE",..... }
    

第二个功能是用预期的 return:

检查无效号码
    {"header":[],"headercount":0,"offers":[]}
  1. 而不是手动编码 url 和学号。我如何在 YAML 中创建它以及如何在我的两个函数中调用 YAML 文件。

Pytest 提供了一个 fixture monkeypatch 你可以使用它

def test_valid_number(monkeypatch):
    def patched_get():
        return {"header":[{"STUDENTNUM":"P56219","STUDENTNAME":"GOLDIE"}
    monkeypatch.setattr(requests, 'get', patched_get)
    assert check == {"header":[{"STUDENTNUM":"P56219","STUDENTNAME":"GOLDIE"}

要读取 YAML 文件,您需要 PyYAML。使用 pip.

安装
import yaml

with open("example.yml", "r") as f:
    test_data = yaml.load(f)

def test_valid_number():
    response = requests.get(test_data['url']).json()
    assert response == test_data['expected']

YAML 文件如下所示:

url: "http://testing/validateNumber/021844223"
expected:
  header:
    -
      STUDENTNUM: "P56219"
      STUDENTNAME: "GOLDIE"
      ......