Ввод условия в HTTP-запрос с использованием gatling

#performance #scala #testing #performance-testing #gatling

#Производительность #scala #тестирование #тестирование производительности #gatling

Вопрос:

Я хочу добавить условие в http-запрос. как и в этом сценарии, используя API,

  1. У меня есть одно действие, из которого я нахожу «Идентификатор действия»

  2. Используя этот «Идентификатор действия», я проверяю статус этого действия, которое является «Запущенным / ожидающим / завершенным / etc», и сохраняю его в переменной

Я сделал это в эти два шага, теперь я хочу сделать

3. Я должен проверять состояние при условии каждые 20 минут, если статус «Выполняется», повторно проверять статус каждые 20 минут, если статус = «завершено», а затем автоматически выходить или выходить через 2 часа (даже если статус находится в рабочем состоянии)

РЕДАКТИРОВАТЬ: хотите поставить условие следующим образом,

 Check status = true
{   
    pause for 15minutes
    request once again after 15minutes
    if(status = false)
    {
        exit
    }
    else
    {
        request once again and check status, if true wait for 15minutes
        If total waiting time is more than 2 hours then exit
    }
}
else
{
    exit
}
  

ниже приведен фрагмент кода, который я сделал,

 import io.gatling.core.Predef._
import io.gatling.http.Predef._
import scala.concurrent.duration._

class LaunchResources extends Simulation {

    val scenarioRepeatCount = Integer.getInteger("scenarioRepeatCount", 1).toInt
    val userCount = Integer.getInteger("userCount", 1).toInt
    val UUID  = System.getProperty("UUID", "24d0e03")
    val username = System.getProperty("username", "p1")
    val password = System.getProperty("password", "P12")
    val testServerUrl = System.getProperty("testServerUrl", "https://someurl.net")

    val httpProtocol = http
        .baseURL(testServerUrl)
        .basicAuth(username, password)
        .connection("""keep-alive""")
        .contentTypeHeader("""application/vnd json""")

    val headers_0 = Map(
        """Cache-Control""" -> """no-cache""",
        """Origin""" -> """chrome-extension://fdmmgasdw1dojojpjoooidkmcomcm""")

    val scn = scenario("LaunchAction")
        .repeat (scenarioRepeatCount) {
            exec(http("LaunchAResources")
                .post( """/api/actions""")
                .headers(headers_0)
                .body(StringBody(s"""{"UUID": "$UUID", "stringVariables" : {"externalFilePath" : "/Test.mp4"}}"""))
                .check(jsonPath("$.id").saveAs("WorkflowID")))


        .exec(http("SaveWorkflowStatus")
                .get("""/api/actions/{$wflowid}""")
                .headers(headers_0)
                .check(jsonPath("$.status").saveAs("WorkflowStatus")))

        .asLongAs(session => session.attributes("WorkflowStatus") != false) {
    pause(900)
    .exec(http("SaveWorkflowStatus")
            .get("""/api/actions/${WorkflowID}""")
            .headers(headers_0)
            .check(jsonPath("$.running").saveAs("WorkflowStatus")))

    }

        }


    setUp(scn.inject(atOnceUsers(userCount))).protocols(httpProtocol)
}
  

Пожалуйста, помогите. Спасибо

Ответ №1:

Попробуйте это asLongAs(session => session.attributes(response) != "MY STATUS") {
exec( http().get(). .check(xpath("//status").saveAs(response) ) }

таким образом, в основном это будет продолжаться до тех пор, пока значение ответа не будет равно МОЕМУ СТАТУСУ.

Вы также можете добавить другие условия короткого замыкания в asLongAs.

Комментарии:

1. Спасибо за ответ. Я отредактировал свой вопрос с точным определением того, что я хочу сделать. можете ли вы, пожалуйста, помочь мне в этом? РЕДАКТИРОВАТЬ: хотите поставить условие, подобное этому, проверьте status = true { ….. }

2. Я думаю, что Питер выше должен решить и это… что вам нужно, так это заблокировать операцию на 20 минут,, вы можете попробовать сделать паузу… Я тоже не пробовал, хотя

3. Я пробовал с asLongAs и добавил в него .pause(), но он выдает ошибку. Что-то не так в передаче ${workflowStatus} . Обновил мой код с ошибками. пожалуйста, помогите. Спасибо.

4. попробуйте этот сеанс.атрибутов («WorkflowStatus») $ не должно быть…

5. Спасибо user666, это сработало. Теперь, как я могу проверить, завершено ли мое действие или нет? я имею в виду, что как только он переходит в длительный цикл, это действие ожидает 15 минут -> затем еще раз запрашивает, если получен статус = true, а затем завершает запрос еще раз. через каждые 15 минут до 2 часов. как это закодировать? Еще раз спасибо