На предыдущей работе мы построили промежуточное программное обеспечение домашнего шлюза, которое нужно было проверить на множестве устройств. Я посоветовал начать использовать pteest
за его краткость и расширяемость.
Теперь типичный корпус использования должен был загрузить новую прошивку на устройство, загрузите его и запустить тестовый набор против него. IP-адрес устройства и двоичные прошивки были переменными.
Благодаря Архитектура крючка Pytests , тестовый набор может быть расширен с рядом вариантов командной строки. Благодаря pteest
Приспособления, можно ввести информацию в тест.
Если бы только мы могли комбинировать эти две приятные функции для получения вариантов командной строки из вашего теста ….
Таким образом, идея выросла, чтобы создать библиотеку, чтобы объявить варианты, и сделать их доступными в качестве тестовых приборов. Я назвал библиотеку ‘fixtopt’ Поскольку OPTFIXT намного сложнее произносить:). Это на открытом воздухе, потому что я думаю, что это полезно для большего, чем просто один случай.
Давайте начнем с произвольно простого примера кода Code, мы можем проверить – и работать до командной строки.
def format_message(body, recipient): return "Hi there, {recipient},\n{body}"
Простой тестовый случай
def test_a_person_is_greeted_properly(): message = "Dear Lisa, there is a hole in my bucket. Regards, John" recipient = "Lisa" assert format_message(message, recipient)\ .startswith("Dear {recipient}")
… Конечно, это тривиально. Но давайте посмотрим на то, что мы можем сделать с помощью тестовых входных переменных сообщение
и получатель
Отказ
Извлечение тестовых светильников
Pytest позволяет зарегистрировать Функции как приборы Отказ При выполнении функции тестирования он возьмет имена аргументов функции тестирования и позвоните в тестовую функцию с результатами соответствующих функций прибора.
@pytest.fixture def message(): return "Dear Lisa, there is a hole in my bucket. Regards, John" @pytest.fixture def recipient(): return "Lisa" def test_a_person_is_greeted_properly(message, recipient): assert format_message(message, recipient)\ .startswith("Dear {recipient}")
Параметры командной строки
Теперь мы хотели бы, чтобы эти приспособления впрыскивали командную строку PteSt, подобную так:
pytest . --message "Nothing else to say" --recipient Lisa
И вот где это fixtopt-xtofl
Библиотека приходит в: добавить файл Conftest.py
В вашем тестовом каталоге и объявите опции:
# conftest.py from fixtopt import Option, register def pytest_options(parser): register(globals(), parser, ( Option( name="message", default="Dear Lisa, there is a hole in my bucket. Regards, John", help="the message to send"), Option( name="recipient", default="Olav", help="the one to adress"), ))
И там вы идете! pteest
Выбирает его, добавляет его к собственной справке текста, и вы можете просто использовать параметры, как вам нравится!
/path/to/testdir> pytest --help ... custom options: --message=MESSAGE the message to send --recipient=RECIPIENT the recipient ...
Запуск теста (со сломанной реализацией):
/path/to/testdir> pytest . --message "whatever" --recipient "Lisaz" ==== test session starts ==== platform linux -- Python 3.6.9, pytest-6.0.1, py-1.9.0, pluggy-0.13.1 rootdir: /path/to/testdir collected 1 item test_messageformat.py F [100%] ==== FAILURES ==== ____ test_a_person_is_greeted_properly ____ message = 'whatever', recipient = 'Lisaz' def test_a_person_is_greeted_properly(message, recipient): > assert format_message(message, recipient)\ .startswith("Dear {recipient}") E AssertionError: assert False E + where False =('Dear {recipient}') E + where = 'Dear, {recipient},\n{body}'.startswith E + where 'Dear, {recipient},\n{body}' = format_message('whatever', 'Lisaz') test_messageformat.py:5: AssertionError ==== short test summary info ==== FAILED test_messageformat.py::test_a_person_is_greeted_properly - AssertionError: assert False ==== 1 failed in 0.07s ====
Договорились, полученные данные оказания небольны в глазах, но это не имеет ничего общего с аргументами командной строки или приспособлениями.
Ну … это все. Небольшая и простая библиотека для добавления параметров командной строки к вашим тестам. Это еще не установлено, но это сделает работу. Посмотрите, попробуйте его, поставьте проблему, добавьте запрос на тягу. Это может только стать лучше.
Оригинал: “https://dev.to/xtofl/fixture-options-for-pytest-4dh8”