当前位置: 首页 > 知识库问答 >
问题:

场景中的Gatling交换协议

游乐池
2023-03-14

我试图创建一个Gatling场景,需要在测试期间将协议切换到另一个主机。用户的旅程是

https://example.com/page1
https://example.com/page2
https://accounts.example.com/signin
https://example.com/page3

因此,作为单个场景的一部分,我需要以太切换场景设置中定义的协议,或切换协议上定义的base Url,但我不知道如何做到这一点。

一个基本的场景可能是这样的

package protocolexample

import io.gatling.core.Predef._
import io.gatling.http.Predef._

class Example extends Simulation {
  val exampleHttp = http.baseURL("https://example.com/")
  val exampleAccountsHttp = http.baseURL("https://accounts.example.com/")

  val scn = scenario("Signin")
    .exec(
      http("Page 1").get("/page1")
    )
    .exec(
      http("Page 2").get("/page2")
    )
    .exec(
      // This needs to be done against accounts.example.com
      http("Signin").get("/signin")
    )
    .exec(
      // Back to example.com
      http("Page 3").get("/page3")
    )

  setUp(
    scn.inject(
      atOnceUsers(3)
    ).protocols(exampleHttp)
  )
}

我只需要弄清楚第三步如何切换主机或协议。我知道我可以创建多个场景,但这需要跨多个主机的单个用户流。

我试过直接使用另一个协议

exec(
  // This needs to be done against accounts.example.com
  exampleAccountsHttp("Signin").get("/signin")
)

结果

protocolexample/example.scala:19: type mismatch;
 found   : String("Signin")
 required: io.gatling.core.session.Session
       exampleAccountsHttp("Signin").get("/signin")

并更改请求的基本URL

exec(
  // This needs to be done against accounts.example.com
  http("Signin").baseUrl("https://accounts.example.com/").get("/signin")
)

结果

protocolexample/example.scala:19: value baseUrl is not a member of io.gatling.http.request.builder.Http

共有1个答案

幸阳波
2023-03-14

您可以使用绝对URI(包含协议)作为Http.getHttp.post等的参数。

class Example extends Simulation {
  val exampleHttp = http.baseURL("https://example.com/")
  val scn = scenario("Signin")
    .exec(http("Page 1").get("/page1"))
    .exec(http("Page 2").get("/page2"))
    .exec(http("Signin").get("https://accounts.example.com/signin"))
    .exec(http("Page 3").get("/page3"))
  setUp(scn.inject(atOnceUsers(3))
    .protocols(exampleHttp))
}

见:https://gatling.io/docs/current/cheat-sheet/#http-协议URL baseUrl

baseURL:设置应用配置的场景的所有相对URL的基本URL。

 类似资料:
  • 我想在运行Gatling场景期间更改令牌,因为我想与不同的用户进行测试,这是我的HTTP协议: 如何在

  • 我一直在使用JMeter和Gatling在JSF2 PrimeFaces4 web应用程序上记录一个场景,以便对其进行负载测试。这两个工具都可以很好地进行录制,但是由于在commandButton上打开弹出对话框的单击操作不会触发关联事件,所以该场景的重播失败了。所述commandButton由场景中的前一个操作(同一表行中的下拉选择)启用。 只有在性能测试工具上运行场景时才会出现此问题,而不是在

  • 我必须使用Gatling/Scala编写一些测试。在我的具体情况下,我必须使用用户名和密码登录网站(此外还有密钥斗篷安全性)。有一个带有很多用户/密码行的CSV文件,我的目标是使用此CSV文件中的每个用户/密码登录。 问题是我不知道怎么做。我可以用用户名/密码和密钥斗篷的安全令牌登录,只需一个用户。到目前为止还可以,但还不够。以下是我到目前为止所做的。 第一类: 馈线类: 登录名: 如您所见,我在

  • 我有测试单个endpoint的简单场景。我对DSL有问题。不知道如何使用feeder启动场景。我必须先进行无用的调用才能编译它。 我怎样才能摆脱

  • 我有一个场景,有4个不同的API调用,它们总是保持不变。我试图创建一个并行的压力测试,我希望相同的场景首先运行,比如10%,然后是20%,30%······max用户的等等。 但我也需要设置是动态的,取决于脚本中的可配置变量这是造成问题的原因,我希望能够很容易地配置它运行例如10%,50%和100%。 这就是我到目前为止所做的(缩短了,并且onceuser和nothingFor从迭代于bla(I)

  • 当我运行该程序时,它加载第一个和第二个fxml,但继续显示第一个fxml(当它应该显示第二个时)。我可以使用相同代码的输入(即按钮)从第一个屏幕到第二个屏幕。 我尝试使用不同的加载器,每次设置场景时都使用。show()方法,但这些(或它们的许多变体)都不起作用。 我在调用方法时进行打印--这就是我确定它们被加载的方式(printline): null 相反,输出(在调试中,如果stage.show