Изучение и использование pytest 17. Как Pytest многократно выполняет сценарии использования? (pytest-повтор)
Изучение и использование pytest 17. Как Pytest многократно выполняет сценарии использования? (pytest-повтор)

1 сценарий использования

  • Чтобы устранить определенные проблемы, нам может потребоваться неоднократно выполнить вариант использования для анализа проблемы;
  • В некоторых сценариях определенный вариант использования может оказаться хорошим или плохим во время автоматического тестирования. Чтобы устранить такие проблемы, нам может потребоваться повторно выполнить этот вариант использования.

2 плагина pytest-repeat

  • Чтобы повторить вариант использования,мы можемиспользоватьpytest-repeatплагин;
  • Пожалуйста, обратитесь к официальному руководству для получения подробной информации.:https://pypi.org/project/pytest-repeat/

2.1 Экологические требования

  • Python 2.7, 3.5+ или PyPy;
  • pytest 3.6 или выше.

2.2 Установка плагина

Язык кода:python
кодКоличество запусков:0
копировать
pip3 install pytest-repeat
Вставьте сюда описание изображения
Вставьте сюда описание изображения

3 использование pytest-repeat

3.1 Повторяйте тест до тех пор, пока он не окажется неудачным.

  • Воляpytestиз -x Опции иpytest-repeatобъединитьиспользовать,Чтобы заставить тестировщика остановиться при первой неудаче;
Язык кода:python
кодКоличество запусков:0
копировать
pytest --count=5 -x test_pytest_repeat.py
  • Например:
Язык кода:python
кодКоличество запусков:0
копировать
# -*- coding:utf-8 -*-
# автор:Насекомые без границ
# Дата: 28 февраля 2023 г. 
# Имя файла: test_pytest_repeat.py
# эффект:плагин pytest-repeatизиспользовать
# Контактное лицо: VX (Ноама Нельсон)
# Блог: https://blog.csdn.net/NoamaNelson

import random
import time
import pytest


def test_case01():
    computer = random.randint(0, 4)
    time.sleep(1)
    print(computer)
    assert computer < 3
  • Результат:
Язык кода:python
кодКоличество запусков:0
копировать
test_pytest_repeat.py 
.0
.2
.3
F

================================================== FAILURES ==================================================
______________________________________________ test_case01[3-5] ______________________________________________

    def test_case01():
        computer = random.randint(0, 4)
        time.sleep(1)
        print(computer)
>       assert computer < 3
E       assert 3 < 3

test_pytest_repeat.py:18: AssertionError
========================================== short test summary info ===========================================
FAILED test_pytest_repeat.py::test_case01[3-5] - assert 3 < 3
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
======================================== 1 failed, 2 passed in 3.13s =========================================

3.2. Выполнение тега варианта использования повторяется несколько раз.

  • использовать @pytest.mark.repeat(count) , пометить некоторые тестовые примеры в коде как выполняемые несколько раз;
  • например:
Язык кода:python
кодКоличество запусков:0
копировать
# -*- coding:utf-8 -*-
# автор:Насекомые без границ
# Дата: 28 февраля 2023 г. 
# Имя файла: test_pytest_repeat01.py
# эффект:плагин pytest-repeatизиспользовать
# Контактное лицо: VX (Ноама Нельсон)
# Блог: https://blog.csdn.net/NoamaNelson

import pytest


@pytest.mark.repeat(8)
def test_case():
    print("Выполнение тестового примера")


if __name__ == '__main__':
    pytest.main(["-s", "test_pytest_repeat01.py"])
  • Результат:
Язык кода:python
кодКоличество запусков:0
копировать
test_pytest_repeat01.py::test_case[1-8] PASSED                           [ 12%] Выполнение тестового примера

test_pytest_repeat01.py::test_case[2-8] PASSED                           [ 25%] Выполнение тестового примера

test_pytest_repeat01.py::test_case[3-8] PASSED                           [ 37%] Выполнение тестового примера

test_pytest_repeat01.py::test_case[4-8] PASSED                           [ 50%] Выполнение тестового примера

test_pytest_repeat01.py::test_case[5-8] PASSED                           [ 62%] Выполнение тестового примера

test_pytest_repeat01.py::test_case[6-8] PASSED                           [ 75%] Выполнение тестового примера

test_pytest_repeat01.py::test_case[7-8] PASSED                           [ 87%] Выполнение тестового примера

test_pytest_repeat01.py::test_case[8-8] PASSED                           [100%]Выполнение тестового примера


============================== 8 passed in 0.04s ==============================

3.3 Подробное объяснение параметра командной строки --repeat-scope

  • Функция параметра командной строки: может переопределить порядок выполнения тестового примера по умолчанию.,похожийобласть применения приспособленияпараметр;
  • проиллюстрировать:

Объем

иллюстрировать

function

По умолчанию каждый вариант использования выполняется повторно перед выполнением следующего варианта использования.

class

Взяв класс за единицу, несколько раз выполните варианты использования в классе, а затем выполните следующий.

module

Возьмите модуль как единое целое, несколько раз выполните варианты использования в модуле, а затем выполните следующий.

session

Повторите всю тестовую сессию, т.е. выполнение всех тестовых случаев один раз, а затем второй раз.

3.3.1 пример класса

Язык кода:python
кодКоличество запусков:0
копировать
# -*- coding:utf-8 -*-
# автор:Насекомые без границ
# Дата: 1 марта 2023 г. 
# Имя файла: test_pytest_repeat02.py
# эффект:плагин pytest-repeatизиспользовать
# Контактное лицо: VX (Ноама Нельсон)
# Блог: https://blog.csdn.net/NoamaNelson

import pytest


class TestCase01():
    def test_01(self):
        print("Если у меня есть 100 миллионов,")

class TestCase02():
    def test_02(self):
        print("Я обязательно возьму тебя выполнить это!")
  • Выполнение командной строки:
Язык кода:python
кодКоличество запусков:0
копировать
pytest -s --count=3 --repeat-scope=class test_pytest_repeat02.py
  • Результат:
Язык кода:python
кодКоличество запусков:0
копировать
test_pytest_repeat02.py Если бы у меня было 100 миллионов,
.Если бы у меня было 100 миллионов,
.Если бы у меня было 100 миллионов,
.Я обязательно возьму тебя его выполнить!
.Я обязательно возьму тебя его выполнить!
.Я обязательно возьму тебя его выполнить!
.

=============== 6 passed in 0.16s ================

3.3.2 пример модуля

Язык кода:python
кодКоличество запусков:0
копировать
# -*- coding:utf-8 -*-
# автор:Насекомые без границ
# Дата: 1 марта 2023 г. 
# Имя файла: test_pytest_repeat03.py
# эффект:плагин pytest-repeatизиспользовать
# Контактное лицо: VX (Ноама Нельсон)
# Блог: https://blog.csdn.net/NoamaNelson

import pytest

def test_01():
    print("Если у меня есть 100 миллионов,")

def test_02():
    print("Я обязательно возьму тебя выполнить это!")

class TestCase():
    def test_03(self):
        print("если у тебя есть 100 миллионов,Сначала ты можешь одолжить его мне,Я возьму тебя, чтобы выполнить его снова! ")
  • Выполнить команду:
Язык кода:python
кодКоличество запусков:0
копировать
pytest -s --count=3 --repeat-scope=module test_pytest_repeat03.py
  • Результат:
Язык кода:python
кодКоличество запусков:0
копировать
test_pytest_repeat03.py Если бы у меня было 100 миллионов,
.Я обязательно возьму тебя его выполнить!
.Если у тебя есть 100 миллионов, ты можешь сначала одолжить их мне, а потом я возьму тебя их выполнять!
.Если бы у меня было 100 миллионов,
.Я обязательно возьму тебя его выполнить!
.Если у тебя есть 100 миллионов, ты можешь сначала одолжить их мне, а потом я возьму тебя их выполнять!
.Если бы у меня было 100 миллионов,
.Я обязательно возьму тебя его выполнить!
.Если у тебя есть 100 миллионов, ты можешь сначала одолжить их мне, а потом я возьму тебя их выполнять!
.

================= 9 passed in 0.15s =================
boy illustration
Углубленный анализ переполнения памяти CUDA: OutOfMemoryError: CUDA не хватает памяти. Попыталась выделить 3,21 Ги Б (GPU 0; всего 8,00 Ги Б).
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Прочитайте нейросетевую модель Трансформера в одной статье
boy illustration
.ART Теплые зимние предложения уже открыты
boy illustration
Сравнительная таблица описания кодов ошибок Amap
boy illustration
Уведомление о последних правилах Points Mall в декабре 2022 года.
boy illustration
Даже новички могут быстро приступить к работе с легким сервером приложений.
boy illustration
Взгляд на RSAC 2024|Защита конфиденциальности в эпоху больших моделей
boy illustration
Вы используете ИИ каждый день и до сих пор не знаете, как ИИ дает обратную связь? Одна статья для понимания реализации в коде Python общих функций потерь генеративных моделей + анализ принципов расчета.
boy illustration
Используйте (внутренний) почтовый ящик для образовательных учреждений, чтобы использовать Microsoft Family Bucket (1T дискового пространства на одном диске и версию Office 365 для образовательных учреждений)
boy illustration
Руководство по началу работы с оперативным проектом (7) Практическое сочетание оперативного письма — оперативного письма на основе интеллектуальной системы вопросов и ответов службы поддержки клиентов
boy illustration
[docker] Версия сервера «Чтение 3» — создайте свою собственную программу чтения веб-текста
boy illustration
Обзор Cloud-init и этапы создания в рамках PVE
boy illustration
Корпоративные пользователи используют пакет регистрационных ресурсов для регистрации ICP для веб-сайта и активации оплаты WeChat H5 (с кодом платежного узла версии API V3)
boy illustration
Подробное объяснение таких показателей производительности с высоким уровнем параллелизма, как QPS, TPS, RT и пропускная способность.
boy illustration
Удачи в конкурсе Python Essay Challenge, станьте первым, кто испытает новую функцию сообщества [Запускать блоки кода онлайн] и выиграйте множество изысканных подарков!
boy illustration
[Техническая посадка травы] Кровавая рвота и отделка позволяют вам необычным образом ощипывать гусиные перья! Не распространяйте информацию! ! !
boy illustration
[Официальное ограниченное по времени мероприятие] Сейчас ноябрь, напишите и получите приз
boy illustration
Прочтите это в одной статье: Учебник для няни по созданию сервера Huanshou Parlu на базе CVM-сервера.
boy illustration
Cloud Native | Что такое CRD (настраиваемые определения ресурсов) в K8s?
boy illustration
Как использовать Cloudflare CDN для настройки узла (CF самостоятельно выбирает IP) Гонконг, Китай/Азия узел/сводка и рекомендации внутреннего высокоскоростного IP-сегмента
boy illustration
Дополнительные правила вознаграждения амбассадоров акции в марте 2023 г.
boy illustration
Можно ли открыть частный сервер Phantom Beast Palu одним щелчком мыши? Супер простой урок для начинающих! (Прилагается метод обновления сервера)
boy illustration
[Играйте с Phantom Beast Palu] Обновите игровой сервер Phantom Beast Pallu одним щелчком мыши
boy illustration
Maotouhu делится: последний доступный внутри страны адрес склада исходного образа Docker 2024 года (обновлено 1 декабря)
boy illustration
Кодирование Base64 в MultipartFile
boy illustration
5 точек расширения SpringBoot, супер практично!
boy illustration
Глубокое понимание сопоставления индексов Elasticsearch.
boy illustration
15 рекомендуемых платформ разработки с нулевым кодом корпоративного уровня. Всегда найдется та, которая вам понравится.
boy illustration
Аннотация EasyExcel позволяет экспортировать с сохранением двух десятичных знаков.