Рубрики
Без рубрики

Варианты прибора для Pтойца

Библиотека для максимальной добавления вариантов командной строки в ваши Suites Petest. Помечено с Pteest, Commandline, Unittest, Python.

На предыдущей работе мы построили промежуточное программное обеспечение домашнего шлюза, которое нужно было проверить на множестве устройств. Я посоветовал начать использовать 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”