Serie Locust Performance-Zero-Basic Entry (8)

Este artículo continúa explicando en profundidad la aplicación de TaskSet en la simulación de escenas de Locust.

primera parte:

Primero, explique la implementación y configuración de múltiples clases TaskSet en la prueba, primero para explicar los ejemplos.

from locust import User, TaskSet, between,task

class ForumSection(TaskSet):

    @task
    def read_thread(self):
        print("This is task readThread")

    @task
    def create_thread(self):
        print("This is task create thread")

    @task
    def reply_thread(self):
        print("This is a reply thread")

    @task
    def view_next_page(self):
        print("This is function- view next page!")

class BrowserCategory(TaskSet):
    @task
    def watch_movie(self):
        print("this is function- watch movies")

    @task
    def filter_movie(self):
        print("this is function- filter movies")

class LoggedInUser(User):
    wait_time = between(5,10)
    tasks = {ForumSection:2,BrowserCategory:3}

    @task
    def index_page(self):
        print("this is index page.")

    @task
    def about_page(self):
        print("this is about page.")

Hay dos subclases de TaskSet, ForumSection y BrowserCategory, en el script anterior Hay múltiples TaskSets en este tipo, que son más comunes en la práctica.

En primer lugar, como en el artículo anterior, puede establecer el peso de las tareas relacionadas dentro de cada TaskSet; en segundo lugar, en la clase User, como la clase LoggedInUser en el ejemplo, no afecta la configuración de su peso, pero la configuración de este peso es La configuración de nivel superior es el control de la presión y el flujo generales, como en el ejemplo:

tasks = {ForumSection:2,BrowserCategory:3}

Puede comprender que el 40% del flujo de presión ejecutará el conjunto de tareas ForumSection; de manera similar, el 60% del flujo de presión ejecutará el conjunto de tareas BrowserCategory.

La segunda parte: la
clase TaskSet se puede incrustar en la clase User y existe como su subclase. Consulte el ejemplo de secuencia de comandos:

from locust import User,task,TaskSet,between

class RegisteredUser(User):
    wait_time = between(1,1.5)
    @task
    class Forum(TaskSet):
        @task(5)
        def view_thread(self):
            print("This is view thread method.")

        @task(1)
        def stop(self):
            self.interrupt()

    @task
    def frontpage(self):
        print("This is front page functions.")

Aquí echamos un vistazo a la estructura general del script. La capa más externa contiene la clase de colección de tareas TaskSet Forum y la página frontal del método de tarea. Estos dos objetos son paralelos (o equivalentes). Hay métodos view_thread y stop en el conjunto de tareas del Foro, y cada uno tiene un peso de 5 y 1. Entonces las características lógicas de su funcionamiento son las siguientes:

1> Cuando la escena comienza a ejecutarse, el conjunto de tareas del Foro y el método de la tarea de la página principal tienen el mismo peso para ejecutarse.

2> Una vez que se ejecuta el conjunto de tareas del Foro, hay un 83,3% de probabilidad de que ejecute la tarea normal view_thread, y la probabilidad restante ejecutará stop

3> Solo después de que se ejecute el método de detención, la tarea de la página principal se puede ejecutar nuevamente. En este momento, será el mismo que el primer punto, el ciclo de ejecución de la tarea de prueba que acaba de comenzar.

4> Si el método de detención no está configurado en la clase de colección de tareas TaskSet, una vez que se ejecuta la colección de tareas, no finalizará a menos que se ejecute toda la escena. Y si hay otras tareas o conjuntos de tareas, la configuración sin el método de detención no es razonable.

Supongo que te gusta

Origin blog.51cto.com/13734261/2551720
Recomendado
Clasificación