如何对参数列表中的每个项目运行pytest测试

时间:2019-06-25 13:04:10

标签: python testing pytest

假设我有一个HTTP URL列表,例如

endpoints = ["e_1", "e_2", ..., "e_n"]

我想运行n测试,每个端点一个。我该怎么办?

一次测试所有端点的简单方法是

def test_urls():
    for e in endpoints:
        r = get(e)
        assert r.status_code < 400

或类似的东西。但是,正如您所看到的,这是对所有n端点的一项测试,我想要的粒度要多一点。

我已经尝试过使用夹具

@fixture
def endpoint():
    for e in endpoints:
        yield e

但是,显然,Pytest并不真正喜欢灯具中的“多产量”,并且会返回yield_fixture function has more than one 'yield'错误

1 个答案:

答案 0 :(得分:1)

按照Parametrizing fixtures and test functions中的示例,您可以通过以下方式实现测试:

{"A":{"isInstallment":true,"isRecurring":true,"price":"4.0","sku":"abc"},
"B":{"isInstallment":false,"isRecurring":true,"price":"1.0","sku":"def"}}

此操作将import pytest endpoints = ['e_1', 'e_2', ..., 'e_n'] @pytest.mark.parametrize('endpoint', endpoints) def test_urls(endpoint): r = get(endpoint) assert r.status_code < 400 test_urls次运行,每个端点一次:

n