python Pytest -如何有效地构建测试

rvpgvaaj  于 2023-02-07  发布在  Python
关注(0)|答案(3)|浏览(126)

假设有2个终点需要检验。
端点1返回需要在对端点2的请求中使用的数据。
如何有效地测试2个端点?

# file_1.py

def test_endpoint_1():
    r = requests.get(...)

    assert r.status_code == 200
    maybe some JSON Schema validation

    return r
# file_2.py

from file_1 import test_endpoint_1

def test_endpoint_2():
    needed_data = test_endpoint_1()
    r = requests.get(..., payload=needed_data.json())

    assert r.status_code == 200
    maybe some JSON Schema validation

上面的方法还可以,但是如果我执行测试套件,我们会测试endpoint_1两次。我可以更改test_endpoint_1()的名称来避免这种情况,但是也许有一种更简单、更优雅的方法?

iqih9akk

iqih9akk1#

访问端点1只是为端点2获取合适有效负载的一种方法,另一种方法是只提供硬编码的有效负载。

# file_2.py

def test_endpoint_2():
    needed_data = {"foo": "bar"}  # Whatever is appropriate

    r = requests.get(..., payload=needed_data.json())

    assert r.status_code == 200
    maybe some JSON Schema validation
7cjasjjr

7cjasjjr2#

硬编码值

一般来说,我们“假设”依赖项工作正常。在这种情况下,保持简单并在测试中创建一个硬编码值。

# file_2.py

def test_endpoint_2():
    needed_data = "JSON"  # valid return example from test_endpoint_1
    r = requests.get(..., payload=needed_data)

    assert r.status_code == 200
    maybe some JSON Schema validation

试验夹具

如果你在很多测试中都需要这个值,那么创建一个fixture来代替,这样你就可以在一个地方编辑endpoint_2的“有效值”,而不是在依赖它的每个测试中修改它。

# conftest.py

import pytest

@pytest.fixture
def endpoint_1_value_200():
    return "JSON"

# file_2.py

def test_endpoint_2(endpoint_1_value_200):
    r = requests.get(..., payload=endpoint_1_value_200)

    assert r.status_code == 200
    maybe some JSON Schema validation
2izufjch

2izufjch3#

只需将其放在一个单独的函数中:

def check_endpoint_1():
    r = requests.get(...)

    assert r.status_code == 200
    maybe some JSON Schema validation

    return r

def test_endpoint_1():
    check_endpoint_1()

def test_endpoint_2():
    needed_data = check_endpoint_1()
    r = requests.get(..., payload=needed_data.json())

    assert r.status_code == 200
    maybe some JSON Schema validation

相关问题