繁体   English   中英

大型响应体中的 JSONPath 验证(Gatling Scala)

[英]JSONPath validations in large response bodies (Gatling Scala)

我有一个非常简单的 gatling(开源版本)项目:它从 csv 馈送器中随机选择文件名,然后将文件的内容发送到端点并验证它是否收到了 200 个响应代码。 发送的文件和响应一样大。 每个响应都是这样 x 500:

{
 "guid1":{
    "recordId":"abc",
    "someThing1":"xyz",
    "someThing2":"def",
    "status":200,
    "message":null
 },
 "guid2":{
    "recordId":"ghi",
    "someThing1":"klm",
    "someThing2":"nop",
    "status":200,
    "message":null
 }, 
 ...
}

换句话说,每个响应都有 1,000 条记录。

如果这不是一个坏主意,我想断言所有 1,000 条记录的“状态”都是 200。我会说如果检查这 200 条记录会使测试速度减慢到扭曲结果的地步,这是一个坏主意。

假设它可以在不减慢测试速度的情况下完成,我猜我会使用 .check(jsonpath(something)) 来检查查询的计数,例如:

$.[?(@.status == '200')]

返回 1000。有人可以帮忙吗?

更新:

试过这个(jsonpath 在 jsonpath.com 上工作):

.check(jsonPath("$.[?(@.status == '200')]").count.is(1000))

运行时,我收到此错误:

jsonPath($.[?(@.status == '200')]).count.is(1000) extraction crashed: end of input expected  

试过这个(jsonpath 在一些https://jsonpath.herokuapp.com/选项卡上工作,但不是加特林 scala 选项卡)

.check(jsonPath("$..[?(@.status == '200')].recordId").count.is(1000))

在运行时,我得到了这个,但我可以在回显的响应中看到格式类似于上面的格式:

jsonPath($..[?(@.status == '200')].recordId).count.is(1000), but actually found 0

您的响应正文将只有〜120kB。 就解析性能而言,您应该没问题。

我终于找到了。

.check(jsonPath("$.*[?(@.status == 200)].recordId").ofType[Seq[Any]].count.is(1000))

这里的 Gatling 选项卡帮助很大: https://jsonpath.herokuapp.com/

正如Stéphane LANDELLE 所指出的,性能下降似乎不是问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM