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

将json字符串作为输入传递给POST请求主体的一个参数

梁丘安晏
2023-03-14

我需要将一个json字符串作为值传递给POST请求正文的一个参数。我的请求正文如下所示:

"parameter1":"abc",
"parameter2":"def",
"parameter3": "{\"id\":\"\",\"key1\":\"test123\",\"prod1\":{\"id\":\"\",\"key3\":\"test123\",\"key4\":\"12334\",\"key5\":\"3\",\"key6\":\"234334\"},\"prod2\":{\"id\":\"\",\"key7\":\"test234\",\"key8\":1,\"key9\":true}}\"",
"parameter4":false,
"parameter5":"ghi"
}

对于参数3,我需要以json格式传递一个字符串值。json文件位于我的本地系统中,是一个巨大的文件,所以如果我可以将其作为jmeter变量传递,这是有意义的。我尝试了以下方法:

{
"parameter1":"abc",
"parameter2":"def",
"parameter3": "${jsonObj}",
"parameter4":false,
"parameter5":"ghi"
}

添加JSR223预处理器后,代码如下:

import org.apache.jmeter.util.JMeterUtils;

String fileContents = new File("path to json//myJson.json").getText('UTF-8');
vars.put("fileContents",fileContents);

var deltaJson = vars.get("fileContents");
var jsonObj = JSON.parse(deltaJson);
vars.put("jsonObj", JSON.stringify(jsonObj));

但我得到以下错误:

exceptions":{"exceptionType":"System.JSONException","exceptionMessage":"Unexpected character ('$' (code 36)): expected a valid value (number, String, array, object, 'true', 'false' or 'null') at input location [1,2]"}

有人能帮我解决这个问题吗?

共有1个答案

岳毅
2023-03-14

有一种更简单的方法可以做到这一点,JMeter附带了_FileToString()函数,因此您可以更快地实现同样的功能,而无需编写任何脚本

比如:

{
  "parameter1": "abc",
  "parameter2": "def",
  "parameter3": ${__FileToString(path to json//myJson.json,UTF-8,jsonObj)},
  "parameter4": false,
  "parameter5": "ghi"
}

还要注意以下事实:

  • 在JSR223测试元素中使用的推荐语言是Groovy,因为它提供了最大的性能
  • 您似乎正在使用不能在浏览器上下文之外使用的JSON对象,因此您的代码无法生成正确的JSON,因此您的请求失败,因为您正在传递${jsonObj},因为它是,替换不会发生,您可以自己查看jmeter.log文件并查看脚本失败的确切原因
 类似资料:
  • 我正在使用Selenium中的RESTAssured Java库进行API测试自动化。我需要将一个json字符串作为值传递给POST请求体的一个参数。我的请求正文如下所示: 对于parameter3,我需要传递一个json格式字符串值。json文件位于我的本地系统中,是一个很大的文件,所以如果我能传递到json文件的路径将会很有意义。 有没有办法使用RestAssured来实现这一点?

  • 问题内容: 我正在将ajax发布到webmethod上,我可以在客户端(通过Firebug)看到请求的状态为200,但未达到我的webmethod中的停止点(webmethod的第一行)。json参数一切正常,但是通过反序列化json的方式,我不得不将其更改为字符串。 js: aspx: 问题答案: 您在jQuery JSON帖子中缺少内容类型: 请参阅本文。当我遇到类似的问题时,它对我很有帮助:

  • 在Spring Boot控制器方法中,我可以将json post请求主体映射到POJO,例如。 我还可以将原始请求正文作为字符串检索: 我的问题是如何将请求体映射到POJO,并将原始请求体作为字符串检索(用于日志目的)。 谢谢

  • 我在Excel中的VBA宏中使用了以下代码: 在即时窗口中,我收到了以下错误: 400 Apache Tomcat/8.0.28-错误报告1{font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;}H2{font-family:Tahoma,Arial,sans-serif;颜

  • 问题内容: 我正在创建一个简单的登录页面,我想将登录名和密码参数作为UTF-8编码的字符串传递。正如您在下面的代码中看到的那样,第一行是我将编码设置为UTF-8的位置,但这似乎毫无意义,因为它不起作用。当我在重音符号中使用登录名和密码参数时,结果页面会收到奇怪的字符。 如何以一种适用于所有浏览器的方式正确设置字符编码? 问题答案: 在只设置响应的字符编码和所述HTTP的属性标题中。基本上,它告诉服

  • 我正在创建一个简单的登录页面,并希望将登录和密码参数作为UTF-8编码字符串传递。正如您在下面的代码中所看到的,第一行是我将编码设置为UTF-8的地方,但这似乎没有意义,因为它不起作用。当我使用带有重音符号的登录和密码参数时,结果页面会收到奇怪的字符。 如何以适用于所有浏览器的方式正确设置字符编码?