Использование саранчи с pytest

#python #python-3.x #testing #pytest #locust

Вопрос:

Я пытаюсь запустить locust с помощью pytest. Я создал этот файл python, но он не показывает никаких выходных данных. pytest не собирает тест. Как я могу использовать locust с pytest

 from locust import HttpUser, TaskSet, task
class WebsiteTasks(TaskSet):
    def on_start(self):
        self.index()

    @task(2)
    def index(self):
        self.client.get("/")

    @task(1)
    def about(self):
        self.client.get("/page/about")


class WebsiteUser(HttpUser):
    task = WebsiteTasks
    host = "localhost:5000"
    min_wait = 1000
    max_wait = 5000
 

Когда я запускаю pytest locust_test.py это и есть результат:

 ================================================================ test session starts ================================================================
platform linux -- Python 3.8.5, pytest-6.2.4, py-1.10.0, pluggy-0.13.1
rootdir: /home/user/Desktop/testing
collected 0 items                                                                                                                                   

 

Комментарии:

1. Если вы хотите провести нагрузочный тест саранчи с помощью pytest, я бы рекомендовал вообще этого не делать. тест pytest предназначен для короткого теста на жизнь. саранча предназначена для нагрузочных испытаний. Они не будут хорошо играть вместе.

Ответ №1:

Pytest видит и запускает только те тесты, которые названы определенным образом (и класс, и функция должны начинаться с «test»).

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

 import gevent
from locustfile import WebsiteUser
from locust.env import Environment
from locust.stats import stats_printer, stats_history


def test_locust():
    # setup Environment and Runner
    env = Environment(user_classes=[WebsiteUser])
    env.create_local_runner()

    # start a greenlet that periodically outputs the current stats
    gevent.spawn(stats_printer(env.stats))

    # start a greenlet that save current stats to history
    gevent.spawn(stats_history, env.runner)

    # start the test
    env.runner.start(1, spawn_rate=10)

    # in 60 seconds stop the runner
    gevent.spawn_later(60, lambda: env.runner.quit())

    # wait for the greenlets
    env.runner.greenlet.join()
 

Вы можете написать тестовые утверждения на основе ваших критериев «пройдено/не пройдено», прежде чем покинуть бегуна. Возможно, напишите другую функцию для вызова лямбды, которая сначала проверяет env.stats наличие сбоев и время отклика, а затем вызывает env.runner.quit() quit.