[PYTHON] Tool zur Leistungsmessung von Webanwendungen Funkload ...

Funkload

Informationen zum Tool zur Leistungsmessung von Webanwendungen (obwohl es auch als Last auf der Serverseite dient), Apache Bench und [Siege](http: //www.joedog.org/siege-home/) und JMeter Ich habe mich gefragt, ob es noch etwas gibt, und ich habe mich mit Stack Overflow befasst Ich habe etwas namens [Funkload] gefunden (https://github.com/nuxeo/FunkLoad).

Es scheint von Python gemacht zu sein. Dann habe ich versucht, es zu untersuchen, also habe ich versucht, damit zu spielen.

Wartung der Betriebsumgebung

Als Betriebsumgebung ist meine eigene Umgebung wie folgt.

Funkload scheint die Python 2.x-Serie zu unterstützen. Wählen Sie daher die neueste Version der 2.x-Serie aus (Stand Juni 2013). Siehe Installation unter Mac OS X in der Funkload-Dokumentation. ... Anscheinend brauchen Sie nur einen Gnuplot. Lassen Sie es uns mit Homebrew setzen.

> brew install gnuplot

Erstellen Sie eine Umgebung, die schmutzig werden kann

Erstellen Sie mit [virtualenv] eine Umgebung, die verschmutzt sein kann (https://pypi.python.org/pypi/virtualenv).

Mit Python 2.7.5 auf dem System (installiert mit Homebrew usw.) Wenn Sie es nicht mit einem Python-Verarbeitungssystem installiert haben, das easy_install verwendet, Laden Sie das Distribute Package in der folgenden Form herunter und installieren Sie es installiere easy_install, pip

> curl -O http://python-distribute.org/distribute_setup.py
> python distribute_setup.py
> rehash
> easy_install pip
> rehash
> pip install virtualenv

Installieren Sie Funkload

Wenn virtualenv enthalten ist, in der folgenden Form Installieren Sie Funkload mit dem Befehl pip.

> mkdir ~/Sandbox/Funkload
> cd ~/Sandbox/Funkload
> virtualenv .venv
> source .venv/bin/activate
> pip install funkload

Testen Sie Funkload jetzt

Bereiten Sie vorerst eine Webanwendung zum Testen vor

Ohne eine Test-Web-App kann ich also nicht helfen Verwenden Sie die Skelton-Erstellungsfunktion von Express (node.js), um Test-Apps zu unterstützen. Wenn die Knotenumgebung nicht erstellt wird, wird empfohlen, nodebrew zu verwenden ...

Wenn Express nicht enthalten ist

Installieren Sie es als npm_modules an einem globalen Speicherort. Nun npm installieren.

> npm install -g express

Testen Sie die App-Erstellung

Einfach mit Skelton-Erstellungsfunktion (Scaffold wurde nicht offiziell geschrieben)

> express webserver
> cd webserver && npm install
> node app

Dies ist das Ende des Starts der Test-App.

express application start

Testfall erstellen

Beim Betrachten des FunkLoad-Testfalls Funkload Tutorial Ich werde es schreiben. Sie können eine Testfallvorlage mit Befehlen erstellen. Es ist gut.

> fl-install-demo
> cd funkload-demo/simple

Schreiben Sie für den erstellten Testfall den Hauptabschnitt der Simple.conf-Datei wie folgt neu.

[main]
title=Express skelton page test
description=express.js skelton application testing a root page.
# the server url to test
url=http://localhost:3000/

Starten Sie Funkload, um den Zugriff auf die App zu testen

Lassen Sie uns den folgenden Befehl ausführen

> fl-run-test -dv test_Simple.py

fl-run-test

Der Testfall für die Webanwendung scheint in Ordnung zu sein.

Eigentlich mit Funkload getestet

Lassen Sie es uns tatsächlich testen.

> fl-run-bench -c 1:10:20 test_Simple.py Simple.test_simple

Die Option -c ist eine Threadanzahloption für Starttests. Im obigen Beispiel wird der Test mit 1 Thread, 10 Threads und 20 Threads durchgeführt.

fl-run-bench

Der eigentliche Test wurde erfolgreich abgeschlossen.

Testbericht erstellen

Konvertieren Sie den Testbericht mit dem folgenden Befehl von einer XML-Datei in eine HTML-Datei.

> fl-build-report --html simple-bench.xml

Ein Verzeichnis wird erstellt und darunter Der Bericht wird in Form einer HTML-Datei generiert. Lassen Sie es uns in Aktion sehen ...

> cd test_simple-20130601T104942
> open index.html

report-1

Oh, es wird etwas ausgegeben ... Seitenstatistik ist die Anzahl der Seiten, die erfolgreich erfasst wurden. Ich kannte E oder G nicht, aber es gab eine richtige Erklärung am Ende der HTML-Ausgabedatei.

report-2

Wenn die Punktzahl 0,94 oder höher ist, scheint ein blauer Balken zu stehen, weil es E ist. Es ist einfach, die Anzahl der erwarteten Benutzer beträgt nur 20, und es gibt normalerweise kein Problem mit der Antwortgeschwindigkeit. Wird das passieren?

Ich möchte eine etwas komplizierte Anwendung schreiben und testen

Schreiben Sie also eine etwas komplexere Anwendung und testen Sie sie Ich werde ein Szenario vorbereiten.

Die komplexen Anwendungen werden unten vorbereitet. https://github.com/futoase/bottle-application-sample Es hat einfach ein Formular und zeigt es an, wenn es ausgefüllt ist.

Comment Board

Ich habe das auf github vorbereitete Testszenario / die Testanwendung bereits registriert. Die folgenden Repositorys können überprüft werden, indem Sie git clone && git submodule update --init ausführen.

https://github.com/futoase/funkload-sample

Schreiben Sie ein Szenario

Voraussetzung ist, dass die Zielwebanwendung die folgenden Funktionen hat.

--Erhalten Sie den Benutzernamen, kommentieren Sie / comment mit der POST-Methode und fügen Sie ihn zur sqlite3-DB-Datei hinzu

Es ist einfach. Schreiben wir ein Szenario, um die oben genannten Bedingungen zu überprüfen

-Zugriff / (Ressourcen per GET abrufen) --POSTEN Sie den Inhalt von Benutzername und Kommentar zu / comment und fügen Sie ihn dem Datensatz hinzu

Als ein Punkt, den Sie nicht gehen können, wenn Sie nicht vorsichtig sind

Ich kann den Inhalt im Hauptabschnitt nicht auslassen. Weil es im Quellcode fest codiert ist ...

Szenariodatei

Ich schreibe ein Szenario in CommentBoard.py. Das Testszenario basiert auf der Funkload-Dokumentationsseite.

CommentBoard.py


# -*- coding:utf-8 -*-

import unittest
import random
import json
from funkload.FunkLoadTestCase import FunkLoadTestCase

with open('conf/user_names.json') as f:
  USER_NAMES = json.loads(f.read())

with open('conf/comments.json') as f:
  COMMENTS = json.loads(f.read())

class CommentBoard(FunkLoadTestCase):
  def setUp(self):
    self.target_url = self.conf_get('main', 'url')
    self.try_count = self.conf_getInt('comment_board_setting', 'try_count')

  def test_index(self):
    target_url = self.target_url
    try_count = self.try_count

    for i in range(try_count):
      self.get(target_url, description='Get comment board index.') 

  def test_posts(self):
    target_url = self.target_url + 'comment'
    try_count = self.try_count

    user_name = random.choice(USER_NAMES)
    comment = random.choice(COMMENTS)

    self.post(target_url,
      params=[
        ('user_name', user_name),
        ('comment', comment)
      ],
      description='Comment as {user_name}'.format(user_name=user_name)
    )

if __name__ == '__main__':
  unittest.main()

--Testszenario, in dem test_index / (index) ist --Test_posts ist ein Testszenario für / comment

Wird sein.

Konfigurationsdatei zur Verwendung in Szenarien

Die Einstellungsdatei wird in CommentBoard.conf geschrieben.

[main]
title=Comment board test
description=Comment board test
url=http://localhost:3000/

[index]
title=Comment board index tests
description=Comment board index

[comments]
title=Comment board posts tests
description=Comment board posts

[comment_board_setting]
try_count=30

[credential]
log_to = console file
log_path = comment-board.log
result_path = comment-board-test.xml
ok_codes =  200:301:302
sleep_time_min = 0
sleep_time_max = 0

[bench]
cycles = 50:75:100:125
duration = 10
startup_delay = 0.01
sleep_time = 0.01
cycle_time = 1
log_to =
log_path = comment-board-bench.log
result_path = comment-board-bench.xml
ok_codes =  200:301:302
sleep_time_min = 0
sleep_time_max = 0.5

[distribute]
log_path = log-distributed
funkload_location=http://pypi.python.org/packages/source/f/funkload/funkload-1.16.1.tar.gz

Ich mache nichts Besonderes dagegen.

Testlauf

Bevor Sie den Test ausführen, müssen Sie die zu testende Anwendung starten Beginnen wir wie folgt.

> git clone git://github.com/futoase/funkload-sample.git
> git checkout -b v1.0.0 v1.0.0
> cd funkload-sample
> git submodule update --init
> virtualenv .venv
> source .venv/bin/activate
> pip install -r requiements.txt
> cd bottle-application-sample
> python migrate.py
> python app.py

Erstellen Sie nach dem Start eine neue Sitzung mit tmux Führen Sie den Funkload-Testfall aus.

cd funkload-sample
> fl-run-bench -c 10 CommentBoard.py CommentBoard.test_index
> fl-build-report --html comment-board-bench.xml
> cd test_index-20130604T175903
> open index.html
> cd ..
> fl-run-bench -c 10 CommentBoard.py CommentBoard.test_posts
> cd -test_posts-20130604T180037
> open index.html

Überprüfen Sie den Status der Test-Webanwendung, die ausgeführt wird.

Comment Board Test Result

Sie können ordnungsgemäß in der im Test angegebenen Form posten. Das Ergebnis wird ebenfalls ausgegeben.

Versuchen Sie es mit

Es ist wunderschöner als Apache Bench, aber es könnte schön sein, "Trends zu sehen". Sie können sich selbst ein Urteil bilden, indem Sie sich den Übergang zum Aufbringen der Last ansehen.

Es gibt jedoch nur wenige Informationen auf Japanisch Es gibt keine Indikatoren wie die von anderen gemessenen Ergebnisse. Ich fragte mich, ob es schwierig sein würde, es bei der Arbeit einzusetzen, wenn ich nicht in der Lage wäre, Verantwortung zu übernehmen. Ich denke, es kann verwendet werden, solange es als Benchmark beurteilt wird. Um eine "langsame" Entscheidung zu treffen, müssen Sie Ihre eigenen "langsamen" und "schnellen" Implementierungen schreiben und erstellen.

Apache Bench ist einfach, daher lädt der Anwendungsserver das Referenzsystem wie GET Da Sie dies überprüfen können, verfügt Socci über mehr operatives Know-how. Wenn Sie im Internet suchen, kann dies das Ergebnis der Leistung sein. Ich frage mich, ob es gut ist ...

Das Werkzeug hängt von der Person ab.

Recommended Posts

Tool zur Leistungsmessung von Webanwendungen Funkload ...
Redis Leistungsmessung
Zusammenfassung der NVMe-Leistungsmessung
WEB-Anwendungsentwicklung mit Django-Entwicklung Teil 1-
Entwicklung von Webanwendungen mit Flask
Erstellen Sie eine Webanwendung mit Django
Webanwendung mit Python + Flask ② ③
Messung der Netzwerkleistung mit iperf
Webanwendung mit Python + Flask ④