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

如何在PUT请求中设置计数器?

蓟浩旷
2023-03-14

我有两个URL,第一个是BaseURL创建用户,第二个是用来为asLongAs循环中的每个用户设置密码。我在第二个url请求中设置“计数器”时遇到问题,即“更改密码”。它在错误下面抛出,

9425[GatlingSystem-akka.actor.default-调度-11]ERRORi.g.http.action.HttpRequest estAction-'httpRequest-4'执行失败:未定义名为'计数器'的属性

我无法在这里设置计数器,

.exec(http("Change_Password")
            .put(setPasswordURL + "/api/authentication/accounts/" + accountName + "/users/" + unm + "${counter}/actions/setPassword")

如果我把静态值放入。提出请求。

这是密码,

import scala.concurrent.duration._
import io.gatling.core.Predef._
import io.gatling.http.Predef._
import io.gatling.jdbc.Predef._

class setPass extends Simulation {
    val testServerUrl = System.getProperty("testServerUrl", "https://abcde.net")
    val username = System.getProperty("username", "ma")
    val password = System.getProperty("password", "ma")

    val accntID = Integer.getInteger("accountID", 27280asd5).toInt
    val rolID = Integer.getInteger("roleId", 272812506).toInt
    val startNum = Integer.getInteger("startNum", 2).toInt
    val endNum = Integer.getInteger("EndNum", 2).toInt
    val userCount = Integer.getInteger("userCount", 1).toInt
    val unm = System.getProperty("CreateUserName", "TestUser")
    val FirstName = System.getProperty("FirstName", "Test")
    val LastName = System.getProperty("LastName", "Yo")
    val emailDomain = System.getProperty("EmailDomain", "@testdomain.com")
    val accountName = System.getProperty("AccountName", "info")

    val counter = new java.util.concurrent.atomic.AtomicInteger(startNum)

    val setPasswordURL = "http://XYZ-differentURL.net:18101"

    val httpProtocol = http
        .baseURL(testServerUrl)
        .basicAuth(username, password)
        .inferHtmlResources()
        .acceptHeader("""*/*""")
        .acceptEncodingHeader("""gzip, deflate""")
        .acceptLanguageHeader("""en-US,en;q=0.8""")
        .contentTypeHeader( """application/json""")
        .userAgentHeader("""Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36""")

    val headers_0 = Map(
        """Cache-Control""" -> """no-cache""",
        """Origin""" -> """chrome-extension://fhbjgbifasdsgdshghfdhdcbncdddomop""")

    val headers_1 = Map(
        """Accept""" -> """application/json""",
        """Content-Type""" -> """application/json""")   

    val scn = scenario("sc1")
        .asLongAs(session => counter.getAndIncrement() < endNum)
        {
        exec(http("req1")
            .post("""/api/user""")
            .headers(headers_0)
            .body(StringBody(session =>s"""{"name": "$unm${counter.get()}" ,"roleId": $rolID, "accountId": $accntID, "firstName": "$FirstName${counter.get()}", "lastName": "$LastName${counter.get()}", "email": "$unm${counter.get()}$emailDomain"}"""))
            .check(jsonPath("$.id").saveAs("UserID"))
            )

        .exec(http("Change_Password")
            .put(setPasswordURL + "/api/authentication/accounts/" + accountName + "/users/" + unm + "${counter}/actions/setPassword")
            .headers(headers_1)
            .body(StringBody("""{"newPassword":"password"}"""))
            )   
        }

    .exec(session => session.set("count", counter.getAndIncrement))
    setUp(scn.inject(atOnceUsers(userCount))).protocols(httpProtocol)
    }

共有1个答案

司寇祺
2023-03-14

你可以用不雅的方式使用加特林请求id。

.exec{session => session.set("number",session.userId.split("-").last.toInt)}
.exec{session => session("number").as[Int] }

我用它每10个请求和每100个请求调用一个请求。

.exec{session => session.set("number",session.userId.split("-").last.toInt)}
.exec(request1)
.doIf(session => session("number").as[Int] % 10 == 0) {
   exec(request2)
   .doIf(session => session("number").as[Int] % 100 == 0) {
      exec(pause(10 seconds))
      .exec(request3)
      .exec(pause(4 seconds))
      .exec(request4)
   }
}
 类似资料:
  • 问题内容: 我想知道是否可以将PUT,DELETE请求(实际上)发送java.net.HttpURLConnection到基于HTTP的URL。 我已经读了很多描述如何发送GET,POST,TRACE,OPTIONS请求的文章,但是我仍然没有找到成功执行PUT和DELETE请求的示例代码。 问题答案: 要执行HTTP PUT: 要执行HTTP删除:

  • 问题内容: 我的Java Web应用程序有问题。 这是index.jsp中的代码: 当我有线请求时,我的浏览器发送以下标头: Tomcat服务器返回以下信息: 但是,如果我以我的形式发送“é”(UTF-8中的%C3%A9),则会显示“é”。 我了解的是浏览器发送了一个用UTF-8(%C3%A9)编码的“é”。 但是服务器将其解释为ISO-8859-1。因此,%C3解码为Ã,%A9解码为©,然后发

  • 问题内容: 我得到了这个servlet,它将pdf文件返回到客户端Web浏览器。我们不希望冒任何风险,即当请求数量过多时,服务器将瘫痪。 我们希望采用一种应用程序级别(程序)的方式来设置并发请求数的限制,并在达到限制时向浏览器返回错误消息。我们需要在审批级别进行操作,因为我们在开发级别(tomcat)和生产级别(websphere)具有不同的servlet容器。 我必须强调,我想控制最大请求数,而

  • 问题内容: 我在Go中做一个简单的http GET: 但是我找不到在doc中自定义请求标头的方法,谢谢 问题答案: 请求的字段是公共的。您可以这样做:

  • 问题内容: 我有Restful Web服务,我发送POST和GET HTTP请求,以及如何使用JAVA在httpURLConection中发送PUT和DELTE请求HTTP。 问题答案: 放 删除

  • 问题内容: 我正在从Java中的Web servlet调用SAP SOAP服务。由于某种原因,每次我在请求的字段中使用特殊字符(例如“è”或“à”)时,SAP都会给我一个错误。SOAP Service的WSDL在UTF-8中定义,我已经相应地设置了字符编码,如下所示。但是我不确定这是正确的方法。另外,请注意,如果我使用SOAP UI(具有相同的信封),则请求可以正常工作,因此它一定是Java方面的