Funkload
À propos de l'outil de mesure des performances de l'application Web (bien qu'il serve également de charge côté serveur), Apache Bench et [Siege](http: //www.joedog.org/siege-home/) et JMeter Je me demandais s'il y avait autre chose, et je cherchais dans Stack Overflow J'ai trouvé quelque chose qui s'appelle Funkload.
Il semble être fait par Python. Ensuite, j'ai essayé d'enquêter, alors j'ai essayé de jouer avec.
En tant qu'environnement d'exploitation, mon propre environnement est le suivant.
Funkload semble prendre en charge la série Python 2.x, alors sélectionnez la dernière version de la série 2.x (à partir de juin 2013). Reportez-vous à Comment installer sur Mac OS X dans la documentation Funkload. ... Apparemment, tout ce dont vous avez besoin est un gnuplot. Mettons-le avec l'homebrew.
> brew install gnuplot
Créez un environnement qui peut être sale avec virtualenv.
Avec Python 2.7.5 sur le système (installé avec homebrew etc.) Si vous ne l'avez pas installé avec un système de traitement Python qui utilise easy_install, Téléchargez et installez le package de distribution, et sous la forme suivante installer easy_install, pip
> curl -O http://python-distribute.org/distribute_setup.py
> python distribute_setup.py
> rehash
> easy_install pip
> rehash
> pip install virtualenv
Si virtualenv est inclus, sous la forme suivante Installez Funkload à l'aide de la commande pip.
> mkdir ~/Sandbox/Funkload
> cd ~/Sandbox/Funkload
> virtualenv .venv
> source .venv/bin/activate
> pip install funkload
Je ne peux pas aider sans une application Web de test, alors Utilisez la fonction de création skelton d'express (node.js) pour prendre en charge les applications de test. Si l'environnement de nœud n'est pas construit, il est recommandé d'utiliser nodebrew ...
Installez-le en tant que npm_modules dans un emplacement global. Eh bien npm installer.
> npm install -g express
Facile avec la fonction de création de skelton (Scaffold n'a pas été officiellement écrit)
> express webserver
> cd webserver && npm install
> node app
C'est la fin du lancement de l'application de test.
En regardant le cas de test FunkLoad Tutoriel Funkload Je vais l'écrire. Vous pouvez créer un modèle de scénario de test avec des commandes. C'est bon.
> fl-install-demo
> cd funkload-demo/simple
Pour le scénario de test créé, réécrivez la section principale du fichier Simple.conf comme suit.
[main]
title=Express skelton page test
description=express.js skelton application testing a root page.
# the server url to test
url=http://localhost:3000/
Exécutons la commande suivante
> fl-run-test -dv test_Simple.py
Le scénario de test de l'application Web semble bien se passer.
Testons-le réellement.
> fl-run-bench -c 1:10:20 test_Simple.py Simple.test_simple
L'option -c est une option de nombre de threads pour les tests de lancement. Dans l'exemple ci-dessus, le test est effectué avec 1 thread, 10 threads et 20 threads.
Le test réel a été effectué avec succès.
Convertissez le rapport de test d'un fichier xml en un fichier html avec la commande suivante.
> fl-build-report --html simple-bench.xml
Un répertoire est créé et sous celui-ci Le rapport est généré sous la forme d'un fichier html. Voyons-le en action ...
> cd test_simple-20130601T104942
> open index.html
Oh, quelque chose sort ... les statistiques de page correspondent au nombre de pages acquises avec succès, Je ne connaissais pas E ou G, mais il y avait une explication appropriée au bas du fichier html de sortie.
Si le score est de 0,94 ou plus, il semble qu'une barre bleue se trouve car c'est E. C'est simple, le nombre d'utilisateurs attendus est aussi petit que 20, et il n'y a généralement pas de problème avec la vitesse de réponse. Cela arrivera-t-il?
Alors écrivez une application un peu plus complexe et testez-la Je vais préparer un scénario.
Les applications complexes sont préparées ci-dessous. https://github.com/futoase/bottle-application-sample Il a simplement un formulaire et l'affiche lorsqu'il est rempli.
J'ai déjà enregistré le scénario / l'application de test préparé sur github. Les dépôts suivants peuvent être vérifiés en faisant git clone && git submodule update --init.
https://github.com/futoase/funkload-sample
En tant que condition, l'application Web cible a les fonctions suivantes.
--Recevoir nom_utilisateur, commenter / commenter par la méthode POST et ajouter au fichier de base de données sqlite3 -Afficher le contenu du commentaire posté par / (index)
C'est simple. Écrivons un scénario pour vérifier les conditions ci-dessus
-Access / (Obtenir des ressources par GET) --POSTER le contenu de user_name et commenter / commenter et les ajouter à l'enregistrement
Comme un point que vous ne pouvez pas y aller à moins d'être prudent
--Le nom de fichier, le nom de classe et le nom de fichier de configuration utilisés dans le test doivent être identiques.
Je ne peux pas omettre le contenu écrit dans la section principale, Parce qu'il est codé en dur dans le code source ...
J'écris un scénario dans CommentBoard.py. Le scénario de test est basé sur la page de documentation Funkload.
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()
Sera.
Le fichier de configuration est écrit dans CommentBoard.conf.
[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
Je ne fais rien de spécial à ce sujet.
Avant d'exécuter le test, vous devez lancer l'application à tester, donc Commençons comme suit.
> 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
Après le démarrage, créez une nouvelle session avec tmux le cas échéant Exécutez le scénario de test Funkload.
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
Vérifiez l'état de l'application Web de test en cours d'exécution.
Vous pouvez publier correctement dans le formulaire spécifié dans le test. Le résultat est également affiché.
C'est plus beau qu'Apache Bench, mais il peut être agréable de "voir les tendances". Vous pouvez faire un auto-jugement en regardant la transition de la façon d'appliquer la charge.
Cependant, il y a peu d'informations en japonais, donc Il n'y a pas d'indicateurs tels que les résultats mesurés par d'autres, Je me suis demandé s'il ne serait pas difficile de l'utiliser au travail à moins d'être en mesure d'en prendre la responsabilité. Je pense qu'il peut être utilisé tant qu'il est jugé comme une référence, Pour prendre une décision "lente", vous devez écrire et construire vos propres implémentations "lentes" et "rapides".
Apache Bench est simple, donc le serveur d'applications se charge sur le système de référence tel que GET Puisque vous pouvez le vérifier, Socci a plus de savoir-faire opérationnel, et si vous recherchez sur le net, cela peut être le résultat de la performance. Je me demande si c'est bon ...
L'outil dépend de la personne.
Recommended Posts