JMeter在字符串化的json上Assert时出现问题:“值应为{\“host\":\“testHost 221\"},但找到{“host”:“testHost221”}”

uoifb46i  于 2023-05-02  发布在  其他
关注(0)|答案(1)|浏览(84)

我用Jmeter测试了两件事。
1.大字符串(多个字符作为一个值,例如."valueeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee

  1. Smal字符串(只是正常值,Ex.“value”)在针对一百个用户的字符串化JSON的JSON请求中。

***首先我使用PUT http request来用json数据更新db:

{" data ":"{" servers ":[{" host":"testHost221","port":1234,"useSSL":false,"useTLS":false,"password":"testPassword1","username":"koko "}]}"}

***然后我使用GET来验证数据库的结果。
***这是我在两个测试的JSONAssert中得到的错误(当然,当我使用大字符串作为value时,值看起来不像username = koko,而是kokoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo

值应为“{”servers“:[{" host ":" testHost221 "," port ":1234,"useSSL":false,"useTLS":false,"password":"testPassword1","username":"koko "}]}"',
但找到了'{" servers ":[{" host ":" testHost221 "," port ":1234,"useSSL":false,"useTLS":false,"password":"testPassword1","username":""}]}'
注意:似乎stackoverflow也删除了转义,所以我上传了一个失败Assert的图像:

在“大字符串-1用户”和“小字符串-100用户”这两个测试中都会发生这种情况。然而,这发生在第49次执行时(当我使用100个用户和短字符串时),但当我使用大字符串值时总是发生(有很多字符,如上面所示)。
那么为什么在某个时候转义被删除了呢?谁能帮帮我?注意:我必须使用这个(字符串化的)json!
我试着从插件管理器使用HTTP原始请求,但它一直返回400,我猜它不喜欢JSON。我问AI,它建议Jmeter可能会将转义错误地视为正则表达式,并在某些时候感到困惑。..结果是一致的,无论是通过的还是失败的测试。..总是在测试的第49次执行时(当我使用100个用户时),并且总是当我使用1个用户的json键值很大时。Postman没有这个问题(我用长字符串值测试了这个案例,不知道如何在Postman上测试100个用户,以及是否有可能。..)

dxxyhpgq

dxxyhpgq1#

我相信有一个更好的方法来处理这种情况,但你的问题没有提供足够的细节,所以我不能拿出最优雅的解决方案。
作为一种直接的解决方法,您可以考虑使用__groovy()函数来调用StringEscapeUtils。unescapeJson()

${__groovy(org.apache.commons.text.StringEscapeUtils.unescapeJson(vars.get('your-variable-name-here')),)}

有关JMeter中Groovy脚本的更多信息:Apache Groovy:What Is Groovy Used For?

相关问题