Как параметризовать фикстуры на уровне класса с входными и ожидаемыми выходными данными?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как параметризовать фикстуры на уровне класса с входными и ожидаемыми выходными данными?

Сообщение Anonymous »

Я пишу тесты для конечных точек приложения Flask. Первая конечная точка принимает составной запрос и сохраняет предоставленные файлы на сервере. Вторая конечная точка извлекает метаданные сохраненных файлов.
Я хочу создать расширяемые тесты для этих конечных точек, но не знаю, как правильно расположить фикстуры и параметры. Предположим, что публикация файла — это дорогостоящая операция, которую я хочу выполнять только один раз для каждого класса. Вот упрощенный код того, чего я хочу достичь:

Код: Выделить всё

@pytest.mark.parametrize(
("title", "content_type", "expected_label", "expected_media_type"),
[
("My Title", "text/plain; charset=UTF-8", "My Title", "text/plain"),
# remaining test parameters ...
]
)
class TestUploadFile:
@pytest.fixture(scope="class")
def input_file_id(self, app_client, title, content_type):
r = app_client.post(
"/upload", data={"file": (open("example.txt", "rb"), title, content_type}
)
return r.json["file"]. # response contains file id

@pytest.fixture(scope="class")
def file_resource(self, app_client, input_file_id):
return app_client.get(f"/files/{input_file_id}")

def test_file_exists(self, file_resource, expected_label, expected_media_type):
assert file_resource.status_code == 200

def test_file_has_label(self, file_resource, expected_label, expected_media_type):
assert file_resource.json["label"] == expected_title

def test_file_has_media_type(self, file_resource, expected_label, expected_media_type):
assert file_resource.json["mediaType"] == expected_media_type
Вот проблемы и вопросы, которые у меня возникли:
  • Тесты вызывают ScopeMismatch: вы пытались получить доступ к приспособлению области действия функции. input_file_id с объектом запроса в области класса.. Судя по всему, input_file_id имеет область действия function, хотя я установил для нее значение class.
  • Я могу изменить области действия в функцию, но я хочу загружать файл один раз для каждого набора данных, а не для каждой тестовой функции.
  • Я слышал, что это хорошая практика — иметь только одно утверждение для каждого тест, но верно ли это в данном случае?
  • Мне приходится повторять аргументы ожидаемая_метка и ожидаемый_медиа_тип в тестах, которые их не используют. Как этого избежать?
На аналогичный вопрос уже ответил pytest: объединить параметризацию уровня класса с фикстурами в области класса, но я не смог применить его к своему случаю , поскольку моя параметризация также включает ожидаемые значения.

Подробнее здесь: https://stackoverflow.com/questions/793 ... ed-outputs
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»