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

在加特林的场景之外拨打Http电话

巩镜
2023-03-14

我的用例是进行超文本传输协议调用,从响应中的位置标头获取重定向url,并使用此url执行负载测试。这个url是动态生成的,因此是最初的第一次超文本传输协议调用。请注意,测试第一个超文本传输协议调用不是我测试的一部分。实现这一目标的最佳方式是什么?加特林有类似于@Beforemethod的东西吗?gatling本身可以用来调用独立的超文本传输协议吗?或者我需要使用基本的scala来实现这一点?到目前为止,我有这个:

val httpConfig = http
  .inferHtmlResources()
  .acceptHeader("*/*")
  .acceptEncodingHeader("gzip, deflate")
  .acceptLanguageHeader("en-US,en;q=0.5")
  .header("Authorization", "Negotiate " + token)
  .doNotTrackHeader("1")
  .userAgentHeader("Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:51.0) Gecko/20100101 Firefox/51.0")

val scn = scenario("My Tests").exec(http("Health check")
  .get("https://example-server.com")
  .check(status.is(200)))

setUp(
  scn.inject(atOnceUsers(10))
).protocols(httpConfig)

我对加特林和斯卡拉的理解是有限的。因此,这是一个基本问题。

共有3个答案

红智鑫
2023-03-14

您可以在运行某些场景时,从标题或响应将URL保存到某个变量。试试下面的代码也许会有帮助:

val httpConfig = http
  .inferHtmlResources()
  .acceptHeader("*/*")
  .acceptEncodingHeader("gzip, deflate")
  .acceptLanguageHeader("en-US,en;q=0.5")
  .header("Authorization", "Negotiate " + token)
  .doNotTrackHeader("1")
  .userAgentHeader("Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:51.0) Gecko/20100101 Firefox/51.0")

val scn = scenario("My Tests").exec(http("Health check")
  .get("https://example-server.com")
  .check(status.is(200)))

  val scnForGetLocation = scenario("GetLocationHeader").exec(http("Location")
  .get("https://example-server.com")
  .check(status.is(200))  
  .check(header("Location").saveAs("url")))

  val testOne = scenario("testOne").exec(http("testOne") //Your actual test
  .get("${url}")
  .check(status.is(200)))

setUp(
  scn.inject(atOnceUsers(10))
).protocols(httpConfig)

请检查这篇文章以及scala中的Gatling如何从重定向中获取url

皇甫学海
2023-03-14
匿名用户

这取决于您希望如何处理第一个HTTP调用。我认为有两种可能性:

  1. 每个模拟获取一次重定向URL,然后在模拟中多次调用相同的重定向URL。在这种情况下,从加特林的角度来看,第一次呼叫将不是模拟的一部分。
  2. 在模拟中为每个用户独立获取重定向URL,然后调用不同的重定向URL一次(或N次)。在这种情况下,第一次调用将是模拟的一部分,但是您可以使用group(name){...}对调用进行分组,这样您将获得每个组的单独统计信息。

如果我正确理解了你的问题,你就会对第一个解决方案感兴趣。在这种情况下,您需要使用一些外部HTTP客户端并生成重定向URL。Gatling在{}之前有块,当您可以放置任何逻辑时(虽然您不能在那里使用Gatling DSL),但老实说,我会在模拟类的构造函数中这样做,例如,如果重定向url返回位置头,您可以使用Apache HTTP客户端获得它:

import org.apache.http.client.methods.HttpGet
import org.apache.http.impl.client.HttpClients

class RedirectSimulation extends Simulation {

  val redirectUrl = HttpClients.createDefault
    .execute(new HttpGet("http://redirectgenerator/getRedirect"))
    .getLastHeader("Location")
    .getValue

 val scn = scenario("Test redirect url")
   .exec(
     http("Get response").get(redirectUrl)
   )

 setUp(scn.inject(atOnceUsers(10)))
}

顾超
2023-03-14

您可以在模拟的构造函数中执行所需的任何处理。

这将由Gatling运行库在场景开始之前运行。

即。

class MyTestWithDynamicTarget extends Simulation {

  val targetUrl = loadTarget()

  val scn = scenario("My Tests")
    .exec(http("Health check")
      .get(targetUrl)
      .check(status.is(200)))

  setUp(
    scn.inject(atOnceUsers(10))
  ).protocols(httpConfig)

  /**
   * Fetch the current location of the service under test, which is returned
   * in the "Location" header of an HTTP request
   */
  def loadTarget() = {
    ??? // see e.g. https://stackoverflow.com/questions/2659000/java-how-to-find-the-redirected-url-of-a-url
  }
}

(场景API确实提供了“before”和“after”钩子(请参阅此处的文档),但是没有简单的方法可以将这些钩子中的信息传递到场景配置中,就像您在此处需要做的那样。)

 类似资料:
  • 拨打电话     拨打电话给 Skype 联系人。开始通话前,需先让支援PSP™版 Skype 的音频输入设备连接PSP™主机。 从联系人名单选择拨打对象 1. 进入 Skype 的选单画面后选择(联系人)。 2. 从联系人名单中选择电话的拨打对象。 可拨打电话给登入状态为(在线)等可通话状态的联系人。 开始呼叫后,会显示对方的名字或 Skype 账号。对方回复后即可开始通话。 提示 透过 Sky

  • 问题内容: 我正在尝试拨打的电话不是使用特定号码,而是使用在变量中被调用的号码,或者至少告诉它在您的电话中提取该号码。这个在变量中被调用的数字是我使用解析器或从网站sql检索到的数字。我做了一个按钮,试图用一个函数调用存储在变量中的电话号码,但无济于事。一切都会帮助谢谢! 问题答案: 试一试: 假设电话号码在。 的返回Optional,因此使用可以确保它是(而不是)返回的。 对于Swift 3:

  • 问题内容: 当我用make或new调用创建新的slice或struct时: Go通过内存分配系统调用分配多少内存?它是否预分配了内存,以便后续调用不会触发新的系统调用? 我问这个问题是因为我需要在代码中频繁分配内存。我不确定是否需要自己实现一个内存分配器,还是可以依靠Go来完成肮脏的工作。如果Go确实预分配了内存,我可以自定义要分配的块大小吗? 我在Go中编写了一些实验代码,并在strace下运行

  • 拨打普通电话(SkypeOut)     使用  Skype ,对传统的电话回线拨打电话。若要使用此机能,需先购买 Skype 点数。 1. 进入  Skype 的选单画面后,选择(拨号)。 2. 选择[国家或地区],从清单中选择国家或地区。 3. 选择[电话号码]后,输入号码并选择[确定]。 4. 选择[通话]。 对方接听后,即可开始通话。 重要 无法使用  Skype 拨打紧急电话。

  • 想知道是否有办法在Twilio中实现这个用例(使用taskrouter或其他机制), 情况是这样的: 消费者拨打Twilio号码 Call flow调用返回3个代理电话号码的API 消费者需要根据以下逻辑连接到三个代理中的一个, 开始拨打代理电话1 响铃后/无应答秒 已拨打代理电话2 但联系代理电话1的尝试仍在继续 同样,也会拨打代理电话3 直到1号、2号或3号特工接电话为止 我知道可以同时拨打代

  • 接听由普通电话拨打的电话(SkypeIn)     可接听传统的电话回线拨打的电话。若要使用此机能,需先购买  Skype 点数,或使用信用卡购买  SkypeIn 号码。其次,开始通话前,需先让支援PSP™版 Skype 的音频输入设备连接PSP™主机。 1. 登入 Skype ,并将登入状态调整为[ 在线]。 登入状态为[ 脱机]等状态时,无法接听电话。 2. 铃声响起,并显示来电画面后,选择