Série d'entrée basée sur zéro performance Locust (9) - Application SequentialTaskSet

La première partie:
Comment s'assurer que plusieurs utilisateurs (threads) suivent une certaine séquence lors de l'exécution de plusieurs tâches de test sous la pression du trafic, plutôt que d'un phénomène aléatoire. Cette exigence est également réalisable dans Locust, l'ensemble de tâches peut être hérité de la sous-classe SequentialTaskSet de TaskSet. Prenons un exemple pour illustrer cette utilisation:

from locust import User,SequentialTaskSet,task,between

def function_task(l):
    print("This is the function task")

class MyUser(User):
    wait_time = between(5,9)
    @task
    class SequenceOfTasks(SequentialTaskSet):
        @task
        def first_task(self):
            print("this is the first task")

        tasks = [function_task]

        @task
        def second_task(self):
            print("this is the second task")

        @task
        def third_task(self):
            print("this is the third task")

Dans l'exemple de code ci-dessus, la classe SequeneOfTasks est incorporée dans la classe MyUser. D'après la signification du paramètre SequentialTaskSet, l'ordre d'exécution des tâches de cet exemple doit être le suivant:

  • first_task

  • fonction_tâche

  • deuxième_tâche

  • troisième_tâche

Exécuté par script, la sortie de la console est la suivante:

 All users hatched: MyUser: 1 (0 already running)
this is the first task
This is the function task
this is the second task
this is the third task
this is the first task
This is the function task
this is the second task
this is the third task
this is the first task
This is the function task
...

Partie 2:
Comment configurer le bloc de code que l'utilisateur virtuel exécutera au début et à la fin? Nous savons que dans l'outil précédent LoadRunner, lr_start et lr_end peuvent être définis. Ensuite, c'est également possible dans Locust. Il existe deux manières d'expliquer ici, l'une est le niveau de la classe User, l'autre est le niveau du module. Ces deux méthodes seront décrites en détail par la suite.

1> niveau de classe d'utilisateur

D'abord sur le code:

from locust import User,task,between

class MyUser(User):
    wait_time = between(5,8)

    def on_start(self):
        print("A test will start...")

    def on_stop(self):
        print("A test is ending...")

    @task
    def task_1(self):
        print("it is task1")

    @task
    def task_2(self):
        print("it is task2")

Comme le montre le code ci-dessus, tous les utilisateurs virtuels exécuteront la fonction on_start lors de la configuration et exécuteront la fonction on_stop pendant le démontage. À partir des résultats en cours d'exécution (5 utilisateurs virtuels exécutant des scénarios pendant 20 secondes), la sortie de la console est la suivante:

Hatching and swarming 5 users at the rate 5 users/s (0 users already running)...
 Name                                                          # reqs      # fails     Avg     Min     Max  |  Median   req/s failures/s
--------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------
 Aggregated                                                         0     0(0.00%)       0       0       0  |       0    0.00    0.00

A test will start...
it is task1
A test will start...
it is task1
A test will start...
it is task2
A test will start...
it is task2
[2020-11-20 08:52:18,681] jasondeMacBook-Pro.local/INFO/locust.runners: All users hatched: MyUser: 5 (0 already running)
A test will start...
it is task2
 Name                                                          # reqs      # fails     Avg     Min     Max  |  Median   req/s failures/s
--------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------
 Aggregated                                                         0     0(0.00%)       0       0       0  |       0    0.00    0.00

 Name                                                          # reqs      # fails     Avg     Min     Max  |  Median   req/s failures/s
--------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------
 Aggregated                                                         0     0(0.00%)       0       0       0  |       0    0.00    0.00

it is task1
it is task2
 Name                                                          # reqs      # fails     Avg     Min     Max  |  Median   req/s failures/s
--------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------
 Aggregated                                                         0     0(0.00%)       0       0       0  |       0    0.00    0.00

it is task1
it is task2
it is task2
 Name                                                          # reqs      # fails     Avg     Min     Max  |  Median   req/s failures/s
--------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------
 Aggregated                                                         0     0(0.00%)       0       0       0  |       0    0.00    0.00

 Name                                                          # reqs      # fails     Avg     Min     Max  |  Median   req/s failures/s
--------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------
 Aggregated                                                         0     0(0.00%)       0       0       0  |       0    0.00    0.00

it is task1
 Name                                                          # reqs      # fails     Avg     Min     Max  |  Median   req/s failures/s
--------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------
 Aggregated                                                         0     0(0.00%)       0       0       0  |       0    0.00    0.00

it is task2
it is task2
 Name                                                          # reqs      # fails     Avg     Min     Max  |  Median   req/s failures/s
--------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------
 Aggregated                                                         0     0(0.00%)       0       0       0  |       0    0.00    0.00

it is task1
it is task2
 Name                                                          # reqs      # fails     Avg     Min     Max  |  Median   req/s failures/s
--------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------
 Aggregated                                                         0     0(0.00%)       0       0       0  |       0    0.00    0.00

it is task2
 Name                                                          # reqs      # fails     Avg     Min     Max  |  Median   req/s failures/s
--------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------
 Aggregated                                                         0     0(0.00%)       0       0       0  |       0    0.00    0.00

it is task2
it is task2
it is task1
[2020-11-20 08:52:37,696] jasondeMacBook-Pro.local/INFO/locust.main: Time limit reached. Stopping Locust.
A test is ending...
A test is ending...
A test is ending...
A test is ending...
A test is ending...
[2020-11-20 08:52:37,697] jasondeMacBook-Pro.local/INFO/locust.main: Running teardowns...
[2020-11-20 08:52:37,698] jasondeMacBook-Pro.local/INFO/locust.main: Shutting down (exit code 0), bye.
[2020-11-20 08:52:37,698] jasondeMacBook-Pro.local/INFO/locust.main: Cleaning up runner...
 Name                                                          # reqs      # fails     Avg     Min     Max  |  Median   req/s failures/s
--------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------
 Aggregated                                                         0     0(0.00%)       0       0       0  |       0    0.00    0.00

Percentage of the requests completed within given times
 Type                 Name                                                           # reqs    50%    66%    75%    80%    90%    95%    98%    99%  99.9% 99.99%   100%
------------------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------------------

2> Niveau du module.

Que faire s'il y a plusieurs classes dans le fichier module / locust? Vous pouvez réduire la quantité de code en définissant on_start et on_stop au niveau du module. Le code ci-dessus est également réécrit comme l'original. La version réécrite est la suivante, mais veuillez noter que ⚠️: on_start et on_stop here ne seront exécutés qu'une seule fois, quel que soit le nombre d'utilisateurs virtuels, veuillez donc choisir un mode différent en fonction de vos besoins. Où l'étiquette dans ce modèle

@ events.test_stop.add_listener est la clé.

from locust import events,User,task,between

@events.test_start.add_listener
def on_start(**kwargs):
    print("A test will start...")

@events.test_stop.add_listener
def on_stop(**kwargs):
    print("A test is ending...")

class MyUser(User):
    wait_time = between(5,8)
    @task
    def task_1(self):
        print("it is task1")

    @task
    def task_2(self):
        print("it is task2")

Série d'entrée basée sur zéro performance Locust (9) - Application SequentialTaskSet

Je suppose que tu aimes

Origine blog.51cto.com/13734261/2571136
conseillé
Classement