Изучение и использование pytest 20. Как pytest проводит распределенное тестирование? (pytest-xdist)
Изучение и использование pytest 20. Как pytest проводит распределенное тестирование? (pytest-xdist)

1 Что такое распределенное тестирование?

  • Прежде чем продолжить эту статью,Сначала изучите базовые знания,Что такое распределенный тест?
  • распределенный тест: относится к локальной сети и Интернету.,Подключите распределенные в разных местах тестовые компьютеры, которые независимо выполняют определенные функции.,Чтобы добиться совместного использования ресурсов тестирования、децентрализованные операции、Централизованное управление、совместная работа、балансировка нагрузки、Тестирование компьютерных сетей для мониторинга процесса тестирования и других целей.
  • С точки зрения непрофессионала:распределенныйтест Работы слишком много, и для ее выполнения одному человеку требуется время, поэтому позвольте нескольким людям делать это вместе, экономя ресурсы и время.

2 Зачем проводить распределенное тестирование?

2.1 Сценарий 1: Сценарий автоматизированного тестирования

  • Во время автоматического тестирования у нас есть множество вариантов использования, например 2000 вариантов использования, которые выполняются последовательно. Каждый вариант использования выполняется в течение 1 минуты, что занимает 2000 минут;
  • Какая концепция? 2000 минут — это более 30 часов. Если это дымовой тест, то он, вероятно, не такой быстрый, как запуск вручную;
  • Кроме того, если он будет опубликован в Интернете, просмотр 2000 вариантов использования будет пустой тратой времени;
  • Итак, если мы позволим распределенному варианту использования выполнить,Может ли это сэкономить много времени?

2.2 Сценарий 2: Сценарий тестирования производительности

  • Если объем данных большой, если мы используем одну машину для испытания под давлением, одновременное давление может быть слишком высоким;
  • Затем вам нужно выбрать использование нескольких машин для нагрузочного тестирования (например, агента/загрузочной машины Jmeter);
  • Это также сценарий распределенного стресс-теста или распределенного теста производительности.

Подводя итог, можно сказать, что на самом деле речь идет о повышении эффективности и качества.

3. Каковы характеристики распределенного тестирования?

Функции

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

сетка

Многоузловое соединение и совместное использование ресурсов

Распределение

Совместная работа, балансировка нагрузки, масштабируемость и высокая доступность в разных регионах и на компьютерах.

открытость

Портативность, совместимость, масштабируемость, доступность

в реальном времени

Вся информация должна быть в режиме реального времени

Динамический

Динамическое отображение объектов и действий процесса тестирования

Работа с неопределенностью

иметь Работа с неопределенностьюспособность

Отказоустойчивость и безопасность

Высокая отказоустойчивость, высокая надежность и хорошая безопасность.

4. Каковы ключевые технологии распределенного тестирования?

Технические моменты

Требовать

Распределенная среда

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

Узел связи в Распределенной среде

Стабильная коммуникационная среда, подходящая для реализации на основе обмена сообщениями.

Планирование тестовых заданий

Статическое планирование, динамическое планирование и гибридное планирование.

5. Каковы предварительные условия для вариантов использования распределенного выполнения?

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

6 установка pytest-xdist

  • pytest-xdistДавайте автоматизироватьтествариант использованияраспределенныйосуществлять,Экономьте время тестирования,Параллелизм на уровне процесса;
  • Установите с помощью:
Язык кода:python
кодКоличество запусков:0
копировать
pip3 install pytest-xdist
Язык кода:python
кодКоличество запусков:0
копировать
C:\Users\Administrator>pip3 install pytest-xdist
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Requirement already satisfied: pytest-xdist in d:\python37\lib\site-packages (1.31.0)
Requirement already satisfied: six in d:\python37\lib\site-packages (from pytest-xdist) (1.15.0)
Requirement already satisfied: execnet>=1.1 in d:\python37\lib\site-packages (from pytest-xdist) (1.8.0)
Requirement already satisfied: pytest>=4.4.0 in d:\python37\lib\site-packages (from pytest-xdist) (6.2.4)
Requirement already satisfied: pytest-forked in d:\python37\lib\site-packages (from pytest-xdist) (1.1.3)
Requirement already satisfied: apipkg>=1.4 in d:\python37\lib\site-packages (from execnet>=1.1->pytest-xdist) (1.5)
Requirement already satisfied: toml in d:\python37\lib\site-packages (from pytest>=4.4.0->pytest-xdist) (0.10.2)
Requirement already satisfied: attrs>=19.2.0 in d:\python37\lib\site-packages (from pytest>=4.4.0->pytest-xdist) (20.3.0)
Requirement already satisfied: colorama in d:\python37\lib\site-packages (from pytest>=4.4.0->pytest-xdist) (0.4.4)
Requirement already satisfied: atomicwrites>=1.0 in d:\python37\lib\site-packages (from pytest>=4.4.0->pytest-xdist) (1.4.0)
Requirement already satisfied: pluggy<1.0.0a1,>=0.12 in d:\python37\lib\site-packages (from pytest>=4.4.0->pytest-xdist) (0.13.1)
Requirement already satisfied: py>=1.8.2 in d:\python37\lib\site-packages (from pytest>=4.4.0->pytest-xdist) (1.10.0)
Requirement already satisfied: importlib-metadata>=0.12 in d:\python37\lib\site-packages (from pytest>=4.4.0->pytest-xdist) (2.1.1)
Requirement already satisfied: packaging in d:\python37\lib\site-packages (from pytest>=4.4.0->pytest-xdist) (20.8)
Requirement already satisfied: iniconfig in d:\python37\lib\site-packages (from pytest>=4.4.0->pytest-xdist) (1.1.1)
Requirement already satisfied: zipp>=0.5 in d:\python37\lib\site-packages (from importlib-metadata>=0.12->pytest>=4.4.0->pytest-xdist) (1.2.0)
Requirement already satisfied: pyparsing>=2.0.2 in d:\python37\lib\site-packages (from packaging->pytest>=4.4.0->pytest-xdist) (2.4.7)

7 преимуществ pytest-xdist

  • Распараллеливание тестовых запусков;
  • Запустите тест несколько раз в дочернем процессе;
  • Вы можете указать разные интерпретаторы Python или разные платформы для параллельного запуска тестов.

8 Использование pytest-xdist

8.1 Нормальное выполнение

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

import pytest
import time

class TestCase01():
    def test_case_01(self):
        time.sleep(1)
        print("case01$$$$$$$$$$$$$$$$$$$$$")

    def test_case_02(self):
        time.sleep(1)
        print("case02$$$$$$$$$$$$$$$$$$$$$")

    def test_case_03(self):
        time.sleep(1)
        print("case03$$$$$$$$$$$$$$$$$$$$$")

    def test_case_04(self):
        time.sleep(1)
        print("case04$$$$$$$$$$$$$$$$$$$$$")

    def test_case_05(self):
        time.sleep(1)
        print("case05$$$$$$$$$$$$$$$$$$$$$")

    def test_case_06(self):
        time.sleep(1)
        print("case06$$$$$$$$$$$$$$$$$$$$$")

class TestCase02():
    def test_case_07(self):
        time.sleep(1)
        print("case07$$$$$$$$$$$$$$$$$$$$$")

    def test_case_08(self):
        time.sleep(1)
        print("case08$$$$$$$$$$$$$$$$$$$$$")

    def test_case_09(self):
        time.sleep(1)
        print("case08$$$$$$$$$$$$$$$$$$$$$")


if __name__ == '__main__':
    pytest.main(["-s", "test_xdist.py"])
  • Результаты выполнения с использованием 9.14s следующие:
Язык кода:python
кодКоличество запусков:0
копировать
test_xdist.py::TestCase01::test_case_01 
test_xdist.py::TestCase01::test_case_02 
test_xdist.py::TestCase01::test_case_03 
test_xdist.py::TestCase01::test_case_04 
test_xdist.py::TestCase01::test_case_05 
test_xdist.py::TestCase01::test_case_06 
test_xdist.py::TestCase02::test_case_07 PASSED                           [ 11%]case01$$$$$$$$$$$$$$$$$$$$$
PASSED                           [ 22%]case02$$$$$$$$$$$$$$$$$$$$$
PASSED                           [ 33%]case03$$$$$$$$$$$$$$$$$$$$$
PASSED                           [ 44%]case04$$$$$$$$$$$$$$$$$$$$$
PASSED                           [ 55%]case05$$$$$$$$$$$$$$$$$$$$$
PASSED                           [ 66%]case06$$$$$$$$$$$$$$$$$$$$$
PASSED                           [ 77%]case07$$$$$$$$$$$$$$$$$$$$$

test_xdist.py::TestCase02::test_case_08 PASSED                           [ 88%]case08$$$$$$$$$$$$$$$$$$$$$

test_xdist.py::TestCase02::test_case_09 PASSED                           [100%]case08$$$$$$$$$$$$$$$$$$$$$


============================== 9 passed in 9.14s ==============================

8.2 Распределенное выполнение приведенного выше кода:

  • Выполнить команду:
Язык кода:python
кодКоличество запусков:0
копировать
pytest -s -n auto test_xdist.py
  • Результаты следующие:,Затраченное время 4,51 с.,Видно, что время теста сильно сокращается после выполнения распределенного:
Язык кода:python
кодКоличество запусков:0
копировать
(venv) F:\pytest_study\test_case\test_j>pytest -s -n auto test_xdist.py
============================================ test session starts =============================================
platform win32 -- Python 3.7.0, pytest-6.2.4, py-1.10.0, pluggy-0.13.1
rootdir: F:\pytest_study, configfile: pytest.ini
plugins: allure-pytest-2.8.12, assume-2.4.3, cov-2.8.1, forked-1.1.3, html-2.0.1, metadata-1.8.0, ordering-0.6,
 repeat-0.9.1, rerunfailures-10.3, xdist-1.31.0
gw0 [9] / gw1 [9] / gw2 [9] / gw3 [9] / gw4 [9] / gw5 [9] / gw6 [9] / gw7 [9]
.........
============================================= 9 passed in 4.51s ==============================================

8.3 Укажите количество запусков ЦП

  • -n auto:Может автоматически обнаруживать системуCPUКоличество ядер;
  • использоватьautoвоспользовался всемCPUДавайте рассмотрим вариант использования;
  • Вы также можете указатьиспользоватьнесколькоCPUДавайте рассмотрим вариант использования:
Язык кода:python
кодКоличество запусков:0
копировать
# x — количество процессоров
pytest -s -n x
  • Как вы можете видеть нижеиспользоватьдваCPUДавайте рассмотрим вариант использования Продолжительность6.27s:
Язык кода:python
кодКоличество запусков:0
копировать
(venv) F:\pytest_study\test_case\test_j>pytest -s -n 2 test_xdist.py
============================================ test session starts =============================================
platform win32 -- Python 3.7.0, pytest-6.2.4, py-1.10.0, pluggy-0.13.1
rootdir: F:\pytest_study, configfile: pytest.ini
plugins: allure-pytest-2.8.12, assume-2.4.3, cov-2.8.1, forked-1.1.3, html-2.0.1, metadata-1.8.0, ordering-0.6,
 repeat-0.9.1, rerunfailures-10.3, xdist-1.31.0
gw0 [9] / gw1 [9]
.........
============================================= 9 passed in 6.27s ==============================================

8.4 Использование с pytest-html

  • Команда выглядит следующим образом:
Язык кода:python
кодКоличество запусков:0
копировать
pytest -s -n auto --html=report.html --self-contained-html
  • Результаты запуска:
Язык кода:python
кодКоличество запусков:0
копировать
pytest -s -n auto test_xdist.py --html=report.thml --self-contained-htm
l
Язык кода:python
кодКоличество запусков:0
копировать
gw0 [9] / gw1 [9] / gw2 [9] / gw3 [9] / gw4 [9] / gw5 [9] / gw6 [9] / gw7 [9]
.........
------------------ generated html file: file://F:\pytest_study\test_case\test_j\report.thml ------------------
============================================= 9 passed in 4.68s ==============================================
Вставьте сюда описание изображения
Вставьте сюда описание изображения

8.5 Пусть pytest-xdist выполняется в указанном порядке

  • pytest-xdistосуществлять По умолчанию не требуется;
  • Сносно --dist параметр для управления последовательностью;

параметр

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

--dist=loadscope

тот же модульmoduleФункция ниже аналогичнатестдобрыйclassДля группировки используются следующие методы.

--dist=loadfile

Группа с одинаковым именем файла

8.6 Как pytest-xdist обеспечивает однократное выполнение сеанса

  • pytest-xdistНе существует встроенной поддержки, обеспечивающей использование только фикстур в области сеанса.осуществлятьодин раз;
  • МожетиспользоватьFileLockМетод генерируется только один разfixtureданные:
Язык кода:python
кодКоличество запусков:0
копировать
import pytest
from filelock import FileLock


@pytest.fixture(scope="session")
def login():
    print("====Логин===")
    with FileLock("session.lock"):
        name = "zhang"
        password= "123456"
        # web автоматизация пользовательского интерфейса
        # Объявить драйвер и вернуться

        # Автоматизация интерфейса
        # Инициирование запроса на вход и возврат токена можно записать так

    yield name, password
    печать("====Выход====")
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 позволяет экспортировать с сохранением двух десятичных знаков.