我有一个包含JSON数组的JSON文件
测验json
[
{ "Name": "Bob" },
{ "Age": "37" },
{ "DOB": "12/01/1985"}
]
我想针对endpoint测试JSON数组中的每个元素,以观察系统针对唯一有效负载的性能
目前我有
测试ervice.scala
val payload = jsonFile("test.json").circular
val httpProtocol = http
.baseURL("http://test.com")
.headers(Map("Content-Type" -> "application/json"))
val scn = scenario("Test Service")
.feed(payload)
.exec(http("test_request")
.post("/v1/test")
.queryParam("key", "123")
.body()
我无法从中的有效负载中传递每个相应的孩子。body()
作为JSON
Gatling文档称JSON Feeder将数组的每个元素加载到一个记录集合中
https://gatling.io/docs/2.3/session/feeder/
即:
record1: Map("id" -> 19434, "foo" -> 1)
record2: Map("id" -> 19435, "foo" -> 2)
并将正文设置为. body(StringBody("""[{"id":${id}}]"""))
问题是我有不同的密钥(姓名、年龄、出生日期),我希望每个密钥都是不同的请求。
.body(StringBody("""[{"KEY_NAME_HERE": ${KEY_NAME_HERE}}]"""))
我如何做到这一点?
在您的例子中,该数组中的JSON会一个接一个地加载,而且由于该JSON中的每个一级密钥都将保存为会话属性,因此模拟中的用户最终只会获得3个属性中的1个,具体取决于使用的JSON。这样你就不能(或者准确地说,不能轻易地)构建身体线。在这种简单的情况下,最好让JSON具有相同的字段,以便在构建请求负载时可以依赖它们。Fe。您可以在单独的字段中放置有效负载键和值:
[
{
"key":"Name",
"value":"Bob"
},
{
"key":"Age",
"value":"37"
},
{
"key":"DOB",
"value":"12/01/1985"
},
]
通过这种方式,对于模拟中的每个用户,您将拥有两个属性key
和value
,因此您将能够构建如下有效负载:
.body(StringBody("""{"${key}": "${value}"}"""))
当然,这只适用于您描述的简单情况,并且只适用于JSON中的字符串值。如果你的最终目标是让事情变得更复杂,请提供现实生活中的例子。
我是这样做的:-
公司和用户。json。json
[
{
"env":"dev",
"userName": "a@test.com",
"password": "Qwerty!12345678"
},
{
"env":"sit",
"userName": "b@test.com",
"password": "Qwerty!12345678"
},
{
"env":"uat",
"userName": "c@test.com",
"password": "Qwerty!12345678"
},
{
"env":"prod",
"userName": "d@test.com",
"password": "Qwerty!12345678"
}
]
工作代码段:
val jsonFileFeederCompany = jsonFile("data/company_users.json").circular
val get_company_user_token = http("Get Company Tokens")
.post(gwt_token_url)
.header("Content-Type", "application/json")
.header("Accept", "application/json")
.body(StringBody(
"""{
"env": "${env}",
"userName": "${userName}",
"password": "${password}"
}"""
)).asJson
.check(status.is(200))
.check(jsonPath("$.jwtToken").saveAs("jwtToken"))
val getCompanyUsersGwtToken = scenario("Create Company GWT token Scenario")
.feed(GetTokenRequest.jsonFileFeederCompany)
.exec(GetTokenRequest.get_company_user_token).exitHereIfFailed
这将从json中读取每个数组[位置]并替换请求中的值,以从不同的环境中获取安全令牌。
希望这有帮助。
你好Vikram Pathania
Gatling解析Strings参数值并将它们转换为函数,这些函数将根据存储在会话中的数据计算结果,然后对其进行评估。 加特林文件 有没有办法在exec中手动执行此操作? 我有多个使用EL属性的请求体模板,发送的请求将因进纸器而异 我目前拥有的代码如下: 我希望没有办法评估嵌套的EL属性,但是有没有办法使用会话变量手动评估它?类似于 我在其他一些问题中看到过ELCompiler被引用,但不确定从哪
我试着用各种“Rest”和“atOnceUser”进行注射。我在留档上没有找到一个好的解决方案。 我的方法是使用本地计数器创建一个名为“getNextNumber()”的函数,以增加“atOnceUser”的数量,但该函数一开始只调用一次。 有什么想法吗? 我的代码:
我有一个加特林记录,现在我想重复这个场景10次,但我遇到了一些问题,我的重复动作只在第一步启动,不会完成场景的整个步骤。我能知道有什么问题吗?我是否需要在每一步中添加重复(10){}?下面是我的scala代码。
我有一个数组,我想用于2个馈线。我希望每个馈线都能够使用数组中的所有值。但似乎值用完了
我需要在Gatling中发出请求,在其中我能够访问会话项(没有表达式语言)。我需要这样做,因为我想将数据注入到来自csv进纸器的请求中。为了演示我的问题,我有一个小例子(没有会话的实际需要)。 以下场景运行良好: 但那一个没有(我得到异常
我只是试着实施下面的策略,从加特林的CSV反馈器中获取价值。 val csvFeeder=csv(“data/Pet1.csv”)。一批圆形 val csvFeeder=csv(“data/Pet1.csv”)。圆形的 两者似乎都很好。我们什么时候用“.batch.circular”代替“.circular”作为Gatling的喂食策略。 谢谢你的帮助。