pytest параметры тестов используются с помощью декоратора @pytest.mark.parametrize. Этот декоратор позволяет запускать один и тот же тест несколько раз, передавая ему разные наборы параметров.  Он принимает два основных аргумента:
  argnames: Строка с именами параметров, разделёнными запятыми, или список имён параметров.argvalues: Список или кортеж значений для параметров.  Каждый элемент в списке/кортеже соответствует одному набору параметров.  Значения передаются в тест в соответствии с порядком имён параметров.@pytest.mark.parametrize("input,expected", [(1, 2), (3, 4), (5, 6)])
  В этом примере тест будет запущен трижды, сначала с input=1 и expected=2, затем с input=3 и expected=4, и наконец с input=5 и expected=6.
В pytest параметры тестов (parametrization) позволяют запускать один и тот же тестовый код с разными входными данными. Это особенно полезно для тестирования различных сценариев, граничных случаев или для обеспечения покрытия кода с разными наборами значений.
Основной способ параметризации в pytest – использование декоратора @pytest.mark.parametrize.
Синтаксис:
@pytest.mark.parametrize("argnames", argvalues)Где:
argnames: строка или список строк, содержащий имена параметров, которые будут переданы в тестовую функцию.  Если параметров несколько, их нужно указать через запятую (например, "input, expected").argvalues: список значений (или кортежей значений, если параметров несколько) для каждого набора тестов.  Каждый элемент списка argvalues будет использован как набор входных данных для одного запуска тестовой функции.Пример:
 import pytest
 def add(x, y):
  return x + y
 @pytest.mark.parametrize("x, y, expected", [
  (1, 2, 3),
  (5, 5, 10),
  (0, -1, -1),
  (-1, -1, -2),
 ])
 def test_add(x, y, expected):
  assert add(x, y) == expected
  В этом примере функция test_add будет запущена четыре раза. Каждый раз x, y и expected будут принимать значения из соответствующего кортежа в списке argvalues.  Таким образом, тест проверяет, что функция add правильно складывает различные числа.
Другие возможности:
ids в @pytest.mark.parametrize, чтобы задать имена для каждого набора тестов.  Это облегчает понимание результатов тестирования.
 @pytest.mark.parametrize("x, y, expected", [
  (1, 2, 3),
  (5, 5, 10),
 ], ids=["positive_numbers", "equal_numbers"])
 def test_add(x, y, expected):
  assert add(x, y) == expected
     
 import pytest
 def divide(x, y):
  return x / y
 @pytest.mark.parametrize(
  "x, y, expected",
  [
   (10, 2, 5),
   pytest.param(10, 0, float('inf'), marks=pytest.mark.xfail(reason="Division by zero")),
  ],
 )
 def test_divide(x, y, expected):
  assert divide(x, y) == expected
     xfail, чтобы указать, что ожидается сбой.
   argvalues можно использовать функцию, которая будет генерировать эти значения. Это полезно для сложных случаев, когда требуется динамически создавать наборы входных данных.Преимущества использования параметризации:
В заключение, параметризация тестов в pytest – мощный инструмент, который позволяет писать более эффективные, читаемые и надежные тесты.