Для меня это звучит очень похоже на параметризованные тесты, у pytest есть поддержка для этого, в основном вы можете написать тест и предоставить входные параметры, как и ожидалось.Таким образом, вы пишете только один тест, но достаточно универсальный для поддержки различных параметров, а значит, меньше кода для поддержки.За сценой pytest запускает один и тот же тест один за другим с вашими заданными параметрами.Написание общих тестов может привести к некоторой логике (как вы можете видеть в моем примере), но вы можете жить с этим, по моему мнению
В качестве общего примера:
@pytest.mark.parametrize('is_admin,expected_status_code,expected_error', [
(True, 200, {}),
(False, 401, {"fail": "login"})
])
def test_sample(is_admin, expected_status_code, expected_data):
# do your setup
if is_admin:
user = create_super_user()
else:
user = normal_user()
# do your request
response = client.get('something')
# make assertion on response
assert response.status_code == expected_status_code
assert response.data == expected_data
Вы также можете иметь несколькослои параметров, например ::
@pytest.mark.parametrize('is_admin', [
True,
False
])
@pytest.mark.parametrize('some_condition,expected_status_code,expected_error', [
(True, 200, {}),
(False, 401, {"fail": "login"})
])
Это выполнит тесты для каждой комбинации is_admin (True / False) и других параметров, хорошо, да?
Проверьте документацию здесь тесты параметризации pytest
Если вы не используете pytest, проверьте эту библиотеку, которая выполняет нечто подобное Параметризованное тестирование с любой структурой тестирования Python