Всем привет, мы снова встретились, я ваш друг Цюаньчжаньцзюнь.
Обычно мы думаем, что каждыйтестВарианты использования независимы друг от друга,Поэтому необходимо следить за тем, чтобы результат теста не зависел от порядка выполнения теста.,Запускайте тестовые варианты использования в другом порядке,Можно получить тот же результат.
Порядок, в котором pytest запускает тестовые примеры по умолчанию, определяется модулем и вариантом использования. ASCII Кодирование выполняется последовательно, а это значит, что порядок запуска тестовых случаев каждый раз один и тот же.
app В тесте есть один monkey
Для тестирования щелкните случайным образом на странице. Если вы нажмете нестандартно, вы можете обнаружить больше нестабильностей. ошибка. Итак, когда мы пишем варианты использования pytest, поскольку каждый вариант использования независим друг от друга,
Затем вы можете нарушить порядок вариантов использования и выполнять их случайным образом, используя pytest плагин pytest-random-order
Этого можно достичь, github Адрес https://github.com/jbasko/pytest-random-order
pytest-random-order
этоpytestплагин,Используется для рандомизации порядка тестов. Это полезно для обнаружения прохождения,Потому что он запускается после несвязанного теста.,Это поддерживает систему в хорошем состоянии.
Этот плагин позволяет пользователю контролировать уровень случайности и отключать переупорядочение тестовых подмножеств. Тесты можно запускать повторно в определенном порядке, передав начальное значение, полученное при предыдущем запуске теста.
pip3 install pytest-random-order
Начиная с версии 1.0.0, этот плагин больше не рандомизирует тесты по умолчанию. Чтобы включить рандомизацию, необходимо запустить pytest одним из следующих способов:
pytest --random-order
pytest --random-order-bucket=<bucket_type>
pytest --random-order-seed=<seed>
Если вы хотите всегда рандомизировать порядок,Пожалуйста, настройте pytest. Есть много способов сделать это,Один из моих любимых методов —addopts = --random-order
существоватьpytestПараметры(обычно[pytest]или[tool:pytest]часть)Добавить конкретные
# Содержимое файла pytest.ini
[pytest]
addopts = --random-order
# test_random.py
def test_1():
print("Сценарий использования 1")
def test_2():
print("Сценарий использования 2")
def test_3():
print("Сценарий использования 3")
# test_random2.py
def test_4():
print("Сценарий использования 4")
def test_5():
print("Сценарий использования 5")
def test_6():
print("Сценарий использования 6")
pytest -s --random-order
Using --random-order-bucket=module
Using --random-order-seed=63275
collecting ...
case/random_case/test_random2.py::test_5 ✓ 17% █▋
case/random_case/test_random2.py::test_6 ✓ 33% ███▍
case/random_case/test_random2.py::test_4 ✓ 50% █████
case/random_case/test_random.py::test_3 ✓ 67% ██████▋
case/random_case/test_random.py::test_1 ✓ 83% ████████▍
case/random_case/test_random.py::test_2 ✓ 100% ██████████
Results (0.04s):
Из результатов запуска видно, что когда –random-order-bucket=module используется по умолчанию, варианты использования модуля будут прерываться и выполняться случайным образом, а каждый запуск будет перегенерироваться –random-order-seed=63275 и начальное значение другое. Порядок вариантов использования также будет другим.
хотеть Изменение порядка и диапазона,бегатьpytest –random-order-bucket= опция, которая может быть глобальной, пакетной, модульной, классовой, родительской, родительской:
Группа плагинов тестируется в ведре, перемешивается в ведре, а затем перемешивается в ведре. Принцип конструкции показан на рисунке.
Учитывая приведенный выше набор тестов, вот две возможные сгенерированные тестовые последовательности:
Вы можете выбрать следующие типы ведер:
тесты классов будут перетасовываться внутри класса, а классы будут перетасовываться, но тесты одного класса никогда не будут пересекаться с тестами других классов или модулей.
c2,c1,c3,a3,a1,a2,b3,b2,b1
Запустив пример с параметром --random-order-bucket=global, все варианты использования будут нарушены.
Using --random-order-bucket=global
Using --random-order-seed=784641
collecting ...
case/random_case/test_random2.py::test_5 ✓ 17% █▋
case/random_case/test_random.py::test_3 ✓ 33% ███▍
case/random_case/test_random2.py::test_6 ✓ 50% █████
case/random_case/test_random2.py::test_4 ✓ 67% ██████▋
case/random_case/test_random.py::test_2 ✓ 83% ████████▍
case/random_case/test_random.py::test_1 ✓ 100% ██████████
Results (0.04s):
6 passed
Если мы находимся в модуле или классе и не хотим, чтобы варианты использования внутри были случайными, мы можем установить disabled=True
отключить случайные параметры
# Просто напишите это в верхней части файла .py.
import pytest
pytestmark = pytest.mark.random_order(disabled=True)
def test_1():
print("Сценарий использования 1")
def test_2():
print("Сценарий использования 2")
def test_3():
print("Сценарий использования 3")
import pytest
class TestRandom():
pytestmark = pytest.mark.random_order(disabled=True)
def test_1(self):
print("Сценарий использования 1")
def test_2(self):
print("Сценарий использования 2")
def test_3(self):
print("Сценарий использования 3")
Таким образом, во время выполнения порядок вариантов использования в TestRandom: test_1, test_2, test_3 не будет нарушен.
Если вы обнаружите, что ваши тесты терпят неудачу в результате их изменения порядка, вы можете захотеть перезапустить тесты в том же порядке. Чтобы обеспечить воспроизводимые тестовые заказы, плагин сообщает начальное значение, которое он использует, с помощью генератора псевдослучайных чисел:
============================= test session starts ==============================
..
Using --random-order-bucket=module
Using --random-order-seed=36775
...
Теперь вы можете использовать бит --random-order-seed=... в качестве аргумента при следующем запуске, чтобы создать тот же порядок:
pytest -v --random-order-seed = 36775
Если вы чувствуете, что этот плагин сложен в использовании или влияет на другие ваши функции, вы можете отключить его.
pytest -p no:random_order
По умолчанию рандомизация отключена. Передавая -p no:random_order, вы предотвратите регистрацию плагина, поэтому его хуки не будут зарегистрированы, как и параметры командной строки.
Издатель: Лидер стека программистов полного стека, укажите источник для перепечатки: https://javaforall.cn/165224.html Исходная ссылка: https://javaforall.cn