Изучите скорость и узкие места вашего приложения: руководство по освоению тестирования производительности с помощью K6!

Изучите скорость и узкие места вашего приложения: руководство по освоению тестирования производительности с помощью K6!

29 декабря 2023 г.

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

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

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

В этой статье я хочу показать вам, как создать несколько сценариев тестирования вашего сервиса с помощью K6.

В демонстрационных целях создадим API-сервис на Go-lang:

// main.go
package main

import (
    "fmt"
    "net/http"
)

func main() {
    http.HandleFunc("/hello", func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprint(w, "Hello, World!")
    })

    http.ListenAndServe(":8080", nil)
}

Запустите API с помощью:

go run main.go

Этот API будет работать на http://localhost:8080/hello.

После запуска нашей службы API мы готовы создать несколько тестов производительности.

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

Теперь давайте создадим простой сценарий K6 для тестирования этого API (вы можете создавать разные сценарии для разных сценариев). Создайте файл с именем script.js:

// script.js
import http from 'k6/http';
import { check, sleep } from 'k6';

export let options = {
    stages: [
        { duration: '30s', target: 10 },  // Ramp-up to 10 virtual users over 30 seconds
        { duration: '1m', target: 10 },   // Stay at 10 virtual users for 1 minute
        { duration: '30s', target: 0 },   // Ramp-down to 0 virtual users over 30 seconds
    ],
};

export default function () {
    let res = http.get('http://localhost:8080/hello');
    check(res, {
        'status is 200': (r) => r.status === 200,
    });

    // Simulate a user "thinking" by sleeping for a short duration
    sleep(5);
}

Этот сценарий определяет стрессовый сценарий с увеличением числа виртуальных пользователей до 10, поддержанием этой нагрузки в течение 1 минуты, а затем снижением числа пользователей до 0. Настройте target и duration в массиве options.stages в соответствии с вашими конкретными потребностями в тестировании.

У нас есть самый первый сценарий для теста производительности, и мы готовы увидеть результаты.

Откройте терминал и запустите тест K6:

k6 run script.js

В результате запуска этого теста вы получите вывод в консоли:

Test results

Этот вывод полезен при запуске тестов производительности из одной точки запуска тестов. Если вы хотите запускать тесты с нескольких модулей (машин), я рекомендую вам использовать метрики и панели мониторинга производительности вместо этих выходных данных, чтобы понять поведение сервиса при высоких нагрузках.


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE