k6 — Модный тул для нагрузочного тестирования

Andrew Minkin
Sep 14, 2018 · 2 min read

Иногда код, который написал нужно протестировать под нагрузкой. Сгенерить нагрузку можно и на коленке, особенно когда у тебя есть Go в кармане. Можно также и на питоне с помощью тредов. Такой подход хорошо работает для простых случаев. Когда прогнал тесты, проверил что твой код держит нагрузку и забыл.

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

В этом посте хочу поделиться своим опытом в использовании k6. Эмоции, опыт и примеры.

О k6

K6 — это инструмент для нагрузочного тестирования, у которого бекенд написан на Go, а сценарии для него нужно писать на javascript. Это классная смесь (хотя я бы предпочел чисто Go, но не суть) для того, чтобы генерировать нагрузку. Javascript хорош тем, что можно парсить html с помощью того же самого jquery например.

Документация у проекта очень подробная и хорошая. На все вопросы можно найти ответы. А если ответ не получается найти в документации, то можно сходить к ним в слак и они вас направят.

Примеры использования

Небольшой пересказ документации :)
В k6, функция, которая генерит нагрузку описывается таким образом

Есть инструменты для проверок, например check

И этих чеков для респонза можно делать множество.

Из более удобных штук у k6 есть запись скриптов, а еще такая штука как group, которая позволяет группировать шаги в BDD стиле.

Подробнее можно почитать тут.

Подключение js зависимостей в проект

Хоть это и классный инструмент, но он тупой и node.js не шарит. Он умеет только браузерный js и поэтому это может быть ограничением, ведь все зависимости, которые вы хотите добавить должны быть прогнаны через browserify.js

Например подключение cheerio выглядит так

git clone git@github.com:cheeriojs/cheerio.git
cd cheerio
npm install
browserify index.js -s cheerio > cheerio.js
mkdir tests/
cp -rf cheerio tests/cheerio

Генерирование конкурентной нагрузки

Какой инструмент для нагрузочного тестирования без конкурентной нагрузки. Для этого у k6 есть связь из vus, iterations и duration в настройках. Подробнее о настройках можно почитать тут.

То есть мы берем, пишем обычный скрипт для k6 с использованием check, group, sleep или еще чего-нибудь и для того, чтобы распаралелить мы используем vus & iterations.

Правда хочу предупредить о некоторой неочевидности с ними.
Vus шарится между iterations. Если вы хотите сгенерировать 100 одновременных запросов, то вам нужно выставлять vus=100, iterations=100.

Заключение

k6 — отличный инструмент для нагрузочного тестирования вместо jmeter. Он не особо требователен к ресурсам, у него удобный и хороший API для работы. Javascript API предоставляет возможность делать более расширяемые тесты. Можно брать и использовать в следующем проекте. У него даже графики есть и история запуска из коробки.

Engineering your growth. Mad Devs is the team behind large scalable projects, globally.

Mad Devs — блог об IT
Andrew Minkin

Written by

Mad Devs — блог об IT

Mad Devs is a Cambridge-headquartered IT company developing enterprise-level software solutions for finance, transportation & logistics, security, edtech, and advertising industries. For more information about us, please browse our website: https://maddevs.io/

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface. Learn more

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox. Explore

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic. Write on Medium

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store