2016-10-03 7 views
2

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

  1. У меня есть одно действие, с которого я нахожу 'Action ID'

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

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

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

EDIT: Хотите поставить условие, как это,

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) 
} 

Пожалуйста, помогите. Благодаря

ответ

3

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

поэтому в основном это будет продолжать работать до значения ответа не равно мой статус.

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

+0

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

+0

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

+0

Я пробовал с asLongAs и добавил .pause() в него, но он выдает ошибку. При передаче $ {workflowStatus} что-то не так. Обновлен код с ошибками. PLS помощи. Благодарю. – Peter

Смежные вопросы