Je suis nouveau sur Locust et j'essaie d'obtenir un https GET barebones à exécuter en demandant une page d'index de serveurs.

locustfile.py

import time
from locust import HttpUser, task

class QuickstartUser(HttpUser):
    @task
    def index(self):
        self.client.get("/")

my.conf

locustfile = locustfile.py
headless = true
expect-workers = 5
host = https://localhost:8001/
users = 100
spawn-rate = 10
run-time = 10m
csv = out

Pour démarrer le processus, j'utilise: locust --conf my.conf

Je m'attendais à ce que cela fonctionne, mais il semble avoir des problèmes d'authentification. Le taux de perte est de 100%

En dehors:

 Name                                                          # reqs      # fails  |     Avg     Min     Max  Median  |   req/s failures/s
--------------------------------------------------------------------------------------------------------------------------------------------
 GET //                                                           806 806(100.00%)  |     318      15     729     290  |   94.26   94.26
--------------------------------------------------------------------------------------------------------------------------------------------
 Aggregated                                                       806 806(100.00%)  |     318      15     729     290  |   94.26   94.26

Response time percentiles (approximated)
 Type     Name                                                              50%    66%    75%    80%    90%    95%    98%    99%  99.9% 99.99%   100% # reqs
--------|------------------------------------------------------------|---------|------|------|------|------|------|------|------|------|------|------|------|
 GET      //                                                                290    390    450    510    570    630    680    710    730    730    730    806
--------|------------------------------------------------------------|---------|------|------|------|------|------|------|------|------|------|------|------|
 None     Aggregated                                                        290    390    450    510    570    630    680    710    730    730    730    806


Error report
 # occurrences      Error
--------------------------------------------------------------------------------------------------------------------------------------------
 806                GET //: SSLError(MaxRetryError("HTTPSConnectionPool(host='localhost', port=8001): Max retries exceeded with url: // (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate (_ssl.c:1123)')))"))
--------------------------------------------------------------------------------------------------------------------------------------------
1
blkpingu 14 janv. 2021 à 00:26

2 réponses

Meilleure réponse

Locust fonctionne très bien avec les URL https sans avoir à faire aucun type de configuration si tout ce que vous voulez faire est simplement d'atteindre un point de terminaison en utilisant https, c'est pourquoi la documentation ne dit rien sur la façon de le faire; pour un fonctionnement de base, il n'y a rien à configurer. Vous n'avez même pas besoin d'utiliser ces options tls-cert et tls-key car elles le seraient pour forcer l'utilisation d'un certificat et d'une clé spécifiques. Si c'est ce que vous voulez, tant mieux. Ça devrait marcher.

Si vous voulez faire quelque chose de plus avancé, consultez cette FAQ: https: // github.com/locustio/locust/wiki/FAQ#control-headers-or-other-things-about-my-http-requests

Ce qui signifie que vous devez savoir plus exactement ce que vous cherchez à faire. Pour quelque chose comme la vérification de certificat, cela peut être utile:

https://2.python-requests.org/en/latest/user/advanced/#ssl-cert-verification

MODIFIER:

Dans le cas de l'erreur que vous obtenez lorsque vous ne spécifiez pas le certificat, cela fonctionne comme prévu. Un certificat auto-signé n'est pas bon à avoir en production, donc la plupart des bons clients généreront une erreur à ce sujet. Dans ce cas, puisque vous essayez simplement d'obtenir une preuve de concept, vous pouvez inclure verify=False dans votre appel .get() (voir Requêtes Python lançant SSLError pour plus de détails et d'avertissements sur la façon de conserver cela), ou vous pouvez spécifiez votre certificat auto-signé pour que le client puisse le vérifier. Dans ce cas, vous pouvez utiliser l'option tls-cert dans la configuration comme vous l'aviez auparavant. Assurez-vous d'inclure le chemin d'accès. Et vous voulez probablement le .pem et non le .crt.

2
Solowalker 13 janv. 2021 à 22:35

Ajout à la réponse Solowalkers:

Au cas où quelqu'un voudrait reproduire mes découvertes.

La méthode de demande Locusts exige une cert tuple dans le cas de verify=True. Donc, si vous n'avez pas de .pem, utilisez ceci.

locustfile.py (nommez-le en fait ou utilisez locust -f yourname.py)

import time
from locust import HttpUser, task
import urllib3

# surpress verify warnings from urllib
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

class QuickstartUser(HttpUser):
    @task(10)
    def index(self):
        self.client.get('', verify=True, cert=('my.crt', 'my.key'))

client.conf (il n'est pas important de le nommer ainsi. Il existe cependant un ordre de chargement en cascade pour les .conf s. Lisez la documentation pour plus d'informations.

locustfile = locustfile.py
headless = true
expect-workers = 5
host = https://localhost:8001/ # change for server
users = 1                      # one user for proof of concept
spawn-rate = 1
run-time = 10m
csv = out

Commencez dans le répertoire avec ces fichiers avec: locust --conf client.conf Locust trouve le locustfile.py lui-même s'il est nommé ainsi.

0
blkpingu 14 janv. 2021 à 18:31
65710029