<style>.lazy{display:none}</style>Основы нагрузочного тестирования с помощью Locust

Основы нагрузочного тестирования с помощью Locust

Ура! Сервис, над которым вы долго работали, наконец-то готов! Теперь вы готовы выпустить его в публичное пространство. Однако вы не знаете, сколько пользователей он сможет обслуживать и как он будет реагировать на одновременный доступ многих пользователей.

БЕСПЛАТНО СКАЧАТЬ КНИГИ в телеграм канале "Библиотека тестировщика"

Введение в нагрузочное тестирование

Нагрузочное тестирование — это подход к нефункциональному тестированию ПО, при котором проверяется производительность программного приложения под определенной нагрузкой. Иными словами, оно определяет, как ведет себя приложение при одновременном доступе к нему нескольких пользователей.

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

Знакомство с Locust

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

Для установки Locust на вашем компьютере должен быть установлен Python. После этого вы можете набрать в командной строке pip install locust, чтобы установить Locust на локальную машину. Далее вы можете проверить успешность установки, выполнив команду locust --help.

В командной строке вы увидите следующий результат:

Вывод команды help: синтаксис команды locust и список доступных опций

Начало работы

Ниже приведен пример API-сервера на Node.JS. Мы попробуем протестировать это приложение с помощью Locust.

const express = require('express')
const app = express()
const port = 3000

app.get('/hello', (req, res) => {
  res.send('Hello World!')
})

app.get('/slow', (req, res) => {
  setTimeout(() => {
    res.send('SHould took 2s')
  }, 2000)
})

app.listen(port, () => {
  console.log(`Example app listening on port ${port}`)
})

Как видите, у сервера есть две конечные точки: конечная точка /hello, которая возвращает hello world, и конечная точка /slow, которая намеренно должна занять две секунды для завершения.

Теперь мы настроим скрипт Locust для приложения, описанного выше. Для этого создаем новый файл под названием locust.py и добавляем в него следующий код:

import time
from locust import HttpUser, task, between


class WebsiteUserTest(HttpUser):
    wait_time = between(1, 5)

    @task
    def index_page(self):
        self.client.get(url="/hello")

    @task
    def slow_page(self):
        self.client.get(url="/slow")

Как видите, сценарий очень прост: он тестирует обе конечные точки, отправляя HTTP GET-запрос. В строке 6 мы вызываем between(1,5), чтобы сказать Locust подождать от 1 до 5 секунд, пока он не отправит еще один запрос. Это необязательно, но полезно для эмуляции реальных пользовательских запросов.

Строки 8 и 12 содержат функции, которые будут выполняться для проверки каждой конечной точки. Обратите внимание на декоратор @task. Он отмечает, какая функция является функцией задачи. Функция задачи описывает, как Locust должен вызывать ваши сервисы. После декоратора можно добавить число, придающее вес, что позволит вам управлять тем, какие задачи будут выполняться чаще других.

Запуск скрипта

Чтобы запустить скрипт, введите locust -f locust.py. Затем вы можете использовать пользовательский интерфейс по адресу localhost:8089, чтобы указать, сколько пользователей нужно протестировать и с какой скоростью создавать новых:

Пользовательский интерфейс Locust по адресу localhost:8089

После этого пронаблюдайте за результатами:

Результаты тестирования Locust

Поздравляем, вы только что протестировали свой проект!

Если в вашем проекте есть аутентификация и полезная нагрузка, Locust может проверить и их. Ознакомьтесь с официальной документацией Locust чтобы узнать больше.

Перевод статьи «Basic Load Testing with Locust».

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *