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.
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 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
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
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 ...
Installieren Sie es als npm_modules an einem globalen Speicherort. Nun npm installieren.
> npm install -g express
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.
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/
Lassen Sie uns den folgenden Befehl ausführen
> fl-run-test -dv test_Simple.py
Der Testfall für die Webanwendung scheint in Ordnung zu sein.
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.
Der eigentliche Test wurde erfolgreich abgeschlossen.
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
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.
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?
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.
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
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 ...
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.
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.
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.
Sie können ordnungsgemäß in der im Test angegebenen Form posten. Das Ergebnis wird ebenfalls ausgegeben.
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