Testy wydajnościowe z Artillery. Artillery to narzędzie open source do testowania wydajności i niezawodności aplikacji internetowych i usług sieciowych. Został stworzony przez zespół Artillery.io w 2014 roku.
Wprowadzenie
Artillery umożliwia tworzenie i uruchamianie skryptów testowych, które symulują działanie wielu użytkowników jednocześnie i pozwalają na ocenę wydajności i niezawodności aplikacji pod obciążeniem. Narzędzie jest szybkie i łatwe w użyciu i pozwala na automatyzację testów wydajnościowych.
Narzędzie Artillery jest napisane w Node.js i można go używać za pośrednictwem wiersza poleceń lub za pomocą interfejsu API. Jest wspierany przez wielu programistów i jest stale rozwijany i ulepszany.
Artillery jest idealnym narzędziem dla programistów, testerów oprogramowania czy specjalistów DevOps, którzy chcą zautomatyzować testy wydajności swoich aplikacji internetowych. Narzędzie jest elastyczne i pozwala na dostosowywanie skryptów testowych do konkretnych potrzeb i wymagań.
Główne cechy narzędzia
Narzędzie posiada wiele zalet i może przypaść do gustu osobom które lubią tworzyć testy automatyczne w ramach pisania skryptów.
- Symulacja wielu użytkowników jednocześnie.
- Łatwe tworzenie i uruchamianie skryptów testowych.
- Wbudowane raportowanie i analiza danych z testów.
- Obsługa protokołów HTTP i WebSockets.
- Integracja z innymi narzędziami do testowania wydajności.
- Wsparcie dla testów z wieloma wątkami.
- Elastyczność i dostosowywanie skryptów testowych.
- Wsparcie dla skryptów testowych napisanych w języku YAML.
- Proste i intuicyjne interfejsy użytkownika i API.
- Darmowa i open source’owa licencja.
- Używanie Playwrighta do testów wydajnościowych
Instalacja
Aby zainstalować niezbędne jest posiadanie zainstalowanej wersji NodeJSa.
npm install -g artillery
npm install -D artillery@latest
Po krótkiej instalacji możemy zabierać się za tworzenie skryptów testowych które będą
Pierwsze testy
Testy tworzymy poprzez stworzenie plików *.yml. Następnie w ramach prostego wzorca tworzymy prosty test.
Ten skrypt jest zapisany w języku YAML i składa się z dwóch sekcji: config
i scenarios
.
W sekcji config
określamy docelowy adres URL strony (target
), a także fazę testu, w której symulujemy działanie 10 użytkowników na sekundę przez 60 sekund (arrivalRate
i duration
).
Dalej w sekcji scenarios
określamy, co użytkownicy powinni robić na stronie. W tym przypadku jedyną akcją jest wysłanie żądania HTTP GET do głównej strony (/
).
Po uruchomieniu skryptu Artillery będzie wysyłać żądania do strony www.example-page.pl
i mierzyć wydajność i niezawodność.
config: target: "https://www.example-page.pl" phases: - duration: 60 arrivalRate: 10 scenarios: - flow: - get: url: "/"
Możemy też przetestować inne warianty :
config: target: "https://www.example-page.pl" scenarios: - name: "10 users per second for 60 seconds" flow: - population: 10 duration: 60 - name: "20 users per second for 60 seconds" flow: - population: 20 duration: 60 - name: "50 users per second for 30 seconds" flow: - population: 50 duration: 30 - name: "10 users per second for 60 seconds" flow: - population: 10 duration: 60
W powyższym skrypcie konfigurujesz cel testu jako adres URL witryny, a następnie opisujesz każdy test obciążenia jako osobne scenariusze, określając liczbę użytkowników na sekundę i czas trwania testu.
Kolejnym wariantem jest obciążenie dwóch slugów:
config: target: "http://www.example-page.pl" phases: - duration: 60 arrivalRate: 10 scenarios: - flow: - get: url: "/info" - flow: - get: url: "/about-us"
Możemy też uruchomić testy jeden po drugim.
config: target: "http://www.example-page.pl" phases: - duration: 30 arrivalRate: 10 scenarios: - name: "Test /info" flow: - get: url: "/info" - name: "Test /about-us" flow: - get: url: "/about-us"
Więcej przykładów na oficjalnej stronie.
Integracje
Oczywiście Artillery możemy zintegrować z wieloma narzędziami by wykorzystywać jego pełny potencjał.
Możesz zintegrować Artillery IO z następującymi narzędziami do CI/CD:
- Jenkins
- Travis CI
- CircleCI
- GitLab CI/CD
- Bitbucket Pipelines
- AWS CodePipeline
- Azure DevOps Pipelines
Integracja z powyższymi narzędziami pozwala na automatyzację procesu testowania obciążenia i dodanie go do pipeline. W ten sposób można zapewnić testowanie aplikacji w jakimś zakresie w ramach automatycznego procesu.
Artillery posiada listę narzędzi oficjalnych z którymi możemy zintegrować narzędzie:
Oczywiście możemt też zintegrować narzędzie z nieoficjalnymi dodatkami – tworzonymi przez społeczność:
Uruchamianie testów i raporty
Aby uruchomić nasz test wystarczy krótka komenda z linii poleceń:
- artillery run test.yml --output ./report/result.json
- artillery report ./report/result.json
Tworzą się raporty dzięki którym możemy odczytać w jaki sposób przebiegał nasz test i jakie są rezultaty.
Podsumowanie
Testy wydajnościowe z Artillery to wpis, który miał Wam przybliżyć kolejne narzędzia, w bardzo skondensowanej formie. Więcej o testach wydajnościowych a szczególnie o JMeterze, k6 stale piszemy w dziale dedykowanym dla tego narzędzia.