我有一系列用于测试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_type
,shipping
和color
。 patterns
是可选的,除非color
为mixed
。
此测试的问题在于我无法将其作为其他终点的通用。我必须在测试中拥有所有必需/可选逻辑。
我有其他测试使用完全相同的参数,但在某些情况下只需要product_type
,或者需要shipping
等等。这意味着我复制/粘贴{{重复1)}装饰器,必须在我的所有测试中进行必需/可选的检查,而不是更通用的测试。
有没有办法可以使用pytest指定参数是必需/可选(/半可选),以便我可以使用同一组装饰器,只需将新端点添加到我的上一个装饰器中?我想使这更加通用,以便我可以快速添加新的端点,而无需在每个测试中重建所需/可选的逻辑。除了必需/可选的逻辑之外,它还将代码拆分为单个通用测试,而不是50个几乎相同的副本。