首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用前一个场景中的数据执行场景?

如何使用前一个场景中的数据执行场景?
EN

Stack Overflow用户
提问于 2016-02-17 23:45:51
回答 1查看 448关注 0票数 0

我想执行两个场景,这两个场景应该相继执行,第一个场景“产生”的数据应该用作第二个场景的基础。

因此,例如,一个案例可以是信用卡的清算。第一个场景是在卡上授权/预留一定金额:

代码语言:javascript
复制
val auths = scenario("auths").during(durationInMinutes minutes) {
    feed(credentials)
        .feed(firstNames)
        .feed(lastNames)
        .feed(cards)
        .feed(amounts)
        .exec(http("send auth requests")
             .post(...)
             .check(...))}

第二个用于捕获/提取信用卡中的金额:

代码语言:javascript
复制
val caps = scenario("caps").during(durationInMinutes minutes) {
    feed(credentials)
        .feed(RESPONSE_IDS_FROM_PREVIOUS_SCENARIO)
        .exec(http("send auth requests")
            .post(...)
            .check(...))}    

我最初考虑使用saveAs(...)选项,但我发现保存的字段只对给定的会话有效。

因此,基本上我希望保留从auths场景中获得的I,并在caps场景中使用它们。

但是,我不能在一个场景中同时执行两个步骤(saveAs可以做到这一点),因为我对两个场景都有不同的要求。

EN

回答 1

Stack Overflow用户

发布于 2016-02-23 00:07:57

引用文档:“目前我们的模拟是一个大型的整体场景。因此,首先让我们将其拆分成可组合的业务流程,类似于使用Selenium的PageObject模式。这样,您将能够轻松地重用某些部分并构建复杂的行为,而无需牺牲维护。”在gatling.io/Advanced Tutorial

因此,您没有用于场景间通信的内置机制(AFAIK)。建议您构建代码的结构,以便随后可以组合对URI的调用。在您的例子中(除了实现细节),您应该有如下内容:

代码语言:javascript
复制
val auths = feed(credentials)
    .feed(firstNames)
    .feed(lastNames)
    .feed(cards)
    .feed(amounts)
    .exec(http("send auth requests")
         .post(...)
         .check(...) // extract and store RESPONSE_ID to session
    )

val caps = exec(http("send auth requests")
        .post(...) // use of RESPONSE_ID from session
        .check(...))

然后,您的场景可能如下所示:

代码语言:javascript
复制
val scn = scenario("auth with caps").exec(auths, caps) // rest omitted 

也许更好的构建代码结构的方法是使用对象。请参阅前面提到的教程链接。

更具说明性的例子(它可以编译,但是当域为foo.com时我没有运行它):

代码语言:javascript
复制
import io.gatling.core.Predef._
import io.gatling.http.Predef._

class ExampleSimulation extends Simulation {

  import scala.util.Random
  import scala.concurrent.duration._

  val httpConf = http.baseURL(s"http://foo.com")

  val emails = Iterator.continually(Map("email" -> (Random.alphanumeric.take(20).mkString + "@foo.com")))
  val names = Iterator.continually(Map("name" -> Random.alphanumeric.take(20).mkString))

  val getIdByEmail = feed(emails)
    .exec(
      http("Get By Email")
        .get("/email/$email")
        .check(
          jsonPath("userId").saveAs("anId")
        )
    )

  val getIdByName = feed(names)
    .exec(
      http("Get By Name")
        .get("/name/$name")
        .check(
          jsonPath("userId").is(session =>
            session("anId").as[String]
          )
        )
    )

  val scn = scenario("Get and check user id").exec(getIdByEmail, getIdByName).inject(constantUsersPerSec(5) during (5.minutes))

  setUp(scn).protocols(httpConf)
}

希望这就是你要找的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35461350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档