← Назад ко всем вопросам

Как работает распаковка *args и **kwargs? Где это полезно в тестах?

1️⃣ Как кратко ответить

Распаковка *args и **kwargs позволяет передавать функции переменное количество аргументов. *args используется для передачи произвольного количества позиционных аргументов, а **kwargs — для передачи произвольного количества именованных аргументов. В тестировании это полезно для создания гибких тестовых функций, которые могут принимать различные наборы входных данных без изменения их сигнатуры.

2️⃣ Подробное объяснение темы

Распаковка *args и **kwargs в Python — это механизм, который позволяет функции принимать переменное количество аргументов. Это делает функции более гибкими и универсальными, особенно в контексте автоматизированного тестирования, где часто требуется проверять различные сценарии с разными наборами данных.

*args

*args позволяет передавать функции произвольное количество позиционных аргументов. Внутри функции args будет представлять собой кортеж, содержащий все переданные позиционные аргументы.

Пример:

def test_function(*args):
    for arg in args:
        print(arg)
​
test_function(1, 2, 3)
  • def test_function(*args): — определение функции, которая принимает произвольное количество позиционных аргументов.
  • for arg in args: — перебор всех переданных аргументов.
  • print(arg) — вывод каждого аргумента на экран.

В этом примере функция test_function может принимать любое количество аргументов, и все они будут обработаны в цикле.

**kwargs

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

Пример:

def test_function(**kwargs):
    for key, value in kwargs.items():
        print(f"{key} = {value}")
​
test_function(a=1, b=2, c=3)
  • def test_function(**kwargs): — определение функции, которая принимает произвольное количество именованных аргументов.
  • for key, value in kwargs.items(): — перебор всех переданных именованных аргументов.
  • print(f"{key} = {value}") — вывод каждого аргумента в формате "ключ = значение".

В этом примере функция test_function может принимать любое количество именованных аргументов, и все они будут обработаны в цикле.

Применение в тестах

В автоматизированном тестировании *args и **kwargs полезны для создания тестов, которые могут принимать различные наборы данных. Это позволяет легко адаптировать тесты к новым требованиям без изменения их сигнатуры.

Пример использования в тестах:

def test_api_response(*args, **kwargs):
    expected_status = kwargs.get('expected_status', 200)
    response = api_call(*args)
    assert response.status_code == expected_status
​
# Пример вызова теста
test_api_response('GET', '/endpoint', expected_status=404)
  • def test_api_response(*args, **kwargs): — тестовая функция, принимающая произвольное количество позиционных и именованных аргументов.
  • expected_status = kwargs.get('expected_status', 200) — получение ожидаемого статуса ответа с использованием значения по умолчанию.
  • response = api_call(*args) — вызов функции api_call с переданными позиционными аргументами.
  • assert response.status_code == expected_status — проверка, что статус ответа соответствует ожидаемому.

Этот подход позволяет легко изменять параметры теста, такие как метод HTTP или ожидаемый статус, без изменения самой тестовой функции.

Тема: Python
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки