Как последовательно выполнять сценарии в Gatling?

У меня есть два сценария: 1-й сценарий «getAssets» будет извлекать все идентификаторы активов и сохранять их в списке, 2-й сценарий «fetchMetadata» будет повторять их ID.

Мне нужно выполнить сценарий «getAssets» только один раз, чтобы получить все идентификаторы, и сценарий «fetchMetadata» до заданного времени только после завершения 1-го сценария.

Как я могу выполнить оба сценария в цепочке (последовательно)?

Вот код, но он не выполняет сценарии последовательно.

import java.util.concurrent.ThreadLocalRandom
import scala.concurrent.duration._
import io.gatling.core.Predef._
import io.gatling.http.Predef._

class getAssetsMetadata extends Simulation {
    val getAssetURL = System.getProperty("getAssetURL", "https://performancetesting.net")
    val username = System.getProperty("username", "performanceuser")
    val password = System.getProperty("password", "performanceuser")
    val limit = Integer.getInteger("limit", 1000).toInt
    val userCount = Integer.getInteger("userCount", 100).toInt
    val duration = Integer.getInteger("duration",1).toInt //in minutes

    var IdList: Seq[String] = _   

    val httpProtocol = http
        .basicAuth(username, password)
        .baseURL(getAssetURL)
        .contentTypeHeader("""application/vnd.v1+json""")

    def getAssets = exec(http("List of Assets")
            .get(s"""/api/assets;limit=$limit""")
            .check(jsonPath("$.assets[*].id").findAll.transform {v => IdList = v; v }.saveAs("IdList"))
            )

    def fetchMetadata = exec(_.set("IdList", IdList))
        .exec(http("Metadata Request")
            .get("""/api/assets/${IdList.random()}/metadata""")
            )

    // Chain scenarios      
    var scn1 = scenario("Scenario 1")
            .exec(getAssets)
    var scn2 = scenario("Scenario 2")       
            .exec(fetchMetadata)
    setUp(scn1.inject(atOnceUsers(1)), scn2.inject(constantUsersPerSec(userCount) during(duration minutes))).protocols(httpProtocol)
    }

person Peter    schedule 19.05.2017    source источник
comment
Я отредактировал свой ответ с помощью «def», но это не сработало. Я думаю, он выполняет оба запроса одновременно. Поскольку запрос 1-го getAssets занимает около 55 секунд, чтобы получить данные ответа, в то время как 2-й запрос начинает выполняться. Любая помощь, как мне выполнить их последовательно или в цепочке? Спасибо.   -  person Peter    schedule 19.05.2017
comment
Я пробовал, но он работает не по порядку. не могли бы вы проверить приведенный выше код? Я его модифицировал.   -  person Peter    schedule 05.06.2017
comment
Попробуйте: val chainedScenario = scenario("chainedScenario").exec(getAssets).exec(fetchMetadata)   -  person Jeffrey Chung    schedule 05.06.2017
comment
Но я хочу выполнить сценарий «getAssets» только ОДИН РАЗ и «fetchMetadata» несколько раз. это возможно в вашем коде?   -  person Peter    schedule 06.06.2017
comment
@Peter У меня одно и то же условие: один тест должен запускаться только один раз, а другие - несколько раз. Удалось ли вам это решить?   -  person Sandeep Purohit    schedule 23.04.2019
comment
@SandeepPurohit Мне удалось сделать это хакерским способом, используя private val initStarted = new AtomicBoolean (false) private val initCompleteLatch = new CountDownLatch (1) Если вам нужен полный пример, не стесняйтесь создавать новый вопрос (этот закрыт).   -  person lukyer    schedule 26.07.2019