Изучение и использование 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
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose