利用pytest通过必需和可选字段测试API

时间:2017-08-09 19:29:24

标签: python pytest

我有一系列用于测试REST API的测试。端点具有必需,可选和半可选(仅当其中一个必填字段具有特定值时才需要值。)

现在我的测试看起来像这样:

valid_types = ['shirt', 'pants', 'shoes']
valid_shipping = ['1', '2', '10']
valid_color = ['red', 'black', 'purple', 'mixed']
valid_patterns = ['glitter', 'spiral', 'stars', 'vertical']

@pytest.mark.parametrize("product_type", valid_types)
@pytest.mark.parametrize("shipping", valid_shipping)
@pytest.mark.parametrize("color", valid_color)
@pytest.mark.parametrize("patterns", valid_patterns)
@pytest.mark.parametrize("endpoint, success_code", [
    ('order', 200),
])
def test_valid_inputs(endpoint,
    success_code,
    product_type,
    shipping,
    color,
    patterns):
    # perform tests

在此示例中,必填字段为product_typeshippingcolorpatterns是可选的,除非colormixed

此测试的问题在于我无法将其作为其他终点的通用。我必须在测试中拥有所有必需/可选逻辑。

我有其他测试使用完全相同的参数,但在某些情况下只需要product_type,或者需要shipping等等。这意味着我复制/粘贴{{重复1)}装饰器,必须在我的所有测试中进行必需/可选的检查,而不是更通用的测试。

有没有办法可以使用pytest指定参数是必需/可选(/半可选),以便我可以使用同一组装饰器,只需将新端点添加到我的上一个装饰器中?我想使这更加通用,以便我可以快速添加新的端点,而无需在每个测试中重建所需/可选的逻辑。除了必需/可选的逻辑之外,它还将代码拆分为单个通用测试,而不是50个几乎相同的副本。

0 个答案:

没有答案