Проблема при передаче данных от одной функции задачи к другой в саранче с последовательной задачей одна за другой - PullRequest
0 голосов
/ 19 ноября 2018

Мы пытаемся выполнить нагрузочное тестирование на основе сценариев пользователя, которое в основном создает заказ в одном URL, а затем мы должны передать идентификатор заказа в следующем URL, чтобы получить статус этого заказа.

Мы используем для этого последовательную задачу по борьбе с саранчой.Как мы хотим, чтобы он работал последовательно, как первый запрос -> второй запрос -> третий запрос.Мы уже получаем данные ответа, как и ожидалось, но мы не можем отправить эти переменные данные в третье задание для отображения статуса заказа.

import json
from locust import HttpLocust, TaskSet, task, TaskSequence, seq_task

class MyTaskSequence(TaskSequence):

    response_data = ""

    @seq_task(1)
    def index(self):
        print("--- First Task")
        response = self.client.get("/order/testing-06a5c/")
        print(response.status_code)

    @seq_task(2)
    def get_details(self):
        print("--- Second Task")
        response = self.client.post(return_data, headers={"authority": "staging.domain.com", "referer":"https://staging.domain.com/"})
        print(response.status_code)
        response_data = json.loads(response.text)
        print(response_data["details"]["claim_uri"])
        self.response_data

    def on_start(self):
        self.get_details()

    @seq_task(3)     
    def post_details(self):
        print(self.get_details())
        print("-- Third Task", self.response_data)
        #return_data = self.response_data["details"]["claim_uri"]
        #response = self.client.post(return_data, headers={"authority": "staging.domain.com", "referer":"https://staging.domain.com/"})
        #print(response.text)

class MyLocust(HttpLocust):
    task_set = MyTaskSequence
    min_wait = 5000
    max_wait = 15000
    host = 'https://staging.domain.com'

Вывод:

[2018-11-19 19:24:19,784] system.local/INFO/stdout:
[2018-11-19 19:24:19,784] system.local/INFO/stdout: --- First Task
[2018-11-19 19:24:19,785] system.local/INFO/stdout:
[2018-11-19 19:24:20,235] system.local/INFO/stdout: 200
[2018-11-19 19:24:20,235] system.local/INFO/stdout:
[2018-11-19 19:24:29,372] system.local/INFO/stdout: --- Second Task
[2018-11-19 19:24:29,373] system.local/INFO/stdout:
[2018-11-19 19:24:29,653] system.local/INFO/stdout: 200
[2018-11-19 19:24:29,654] system.local/INFO/stdout:
[2018-11-19 19:24:29,654] system.local/INFO/stdout: /payment/initiate/claim/bc6d5024-f608-41af-8e78-191798c31a69/
[2018-11-19 19:24:29,654] system.local/INFO/stdout:
[2018-11-19 19:24:37,089] system.local/INFO/stdout: --- Second Task
[2018-11-19 19:24:37,089] system.local/INFO/stdout:
[2018-11-19 19:24:37,367] system.local/INFO/stdout: 200
[2018-11-19 19:24:37,367] system.local/INFO/stdout:
[2018-11-19 19:24:37,367] system.local/INFO/stdout: /payment/initiate/claim/72217a35-01fc-488e-885e-aea81a57a463/
[2018-11-19 19:24:37,368] system.local/INFO/stdout:
[2018-11-19 19:24:37,368] system.local/INFO/stdout: None
[2018-11-19 19:24:37,368] system.local/INFO/stdout:
[2018-11-19 19:24:37,368] system.local/INFO/stdout: ('-- Third Task', '')
[2018-11-19 19:24:37,368] system.local/INFO/stdout:
^C[2018-11-19 19:24:40,598] system.local/ERROR/stderr: KeyboardInterrupt

Мы хотели передать переменную response_data["details"]["claim_uri"] в @seq_task (3).Так что мы можем сформировать динамическую цель, которая будет domain.com/response_data["details"]["claim_uri"].Эта переменная будет иметь строковый тип и должна проходить отдельно при каждом вызове третьей задачи.

Мы пытались этот метод, но в результате ничего не получили.

Есть ли что-то, чего не хватает?

1 Ответ

0 голосов
/ 20 ноября 2018

Проблема была с переменными данными ответа.Область действия переменной была локальной при вызове ее без self.

Приведенный ниже код работает.

@seq_task(2)
    def get_details(self):
        <-- function data -->
        self.response_data = json.loads(response.text)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...