在jmeter中发布json正文时动态输入

时间:2018-11-08 02:11:26

标签: jmeter saml-2.0

我一直在尝试为SAML安全的Web服务编写jmeter负载测试。所以对于我来说,它有一个http请求采样器,它获取访问代码并存储在名为access_code的变量中。但是Web服务接受以下形式的发布请求:

api.service.edu/api/authentication,正文数据为{“代码”:“ $ {access_code}”,“ redirect_uri”:“某些站点”}。

但是每当我尝试运行jmeter时,采样器都会出现以下错误:

线程名称:基本应用使用流程1-1 样品开始时间:2018-11-07 21:08:50 EST 加载时间:1209 连接时间:0 延迟:1208 字节大小:370 已发送字节:0 标头大小(以字节为单位):324 正文大小(以字节为单位):46 样本数:1 错误计数:1 数据类型(“文本” |“ bin” |“”):文本 响应码:500 响应消息:内部服务器错误

HTTPSampleResult字段: ContentType:application / json;字符集= utf-8 数据编码:utf-8

是因为我解析access_code的方式吗?如果可以的话,如何通过json发布请求解析动态值?

1 个答案:

答案 0 :(得分:0)

  1. HTTP Status Code 500代表内部服务器错误,根据HTTP协议规范,问题出在服务器端,因为客户端状态代码(即格式错误的请求)应在{{ 3}}和499。因此,我建议您检查服务器端日志,很可能您将能够从中找出问题所在。
  2. 可能未定义您的${access_code}变量,即相关的400无法从先前的响应中提取出来。使用Post-ProcessorDebug Sampler侦听器组合
  3. 仔细检查其值
  4. 您的${access_code}变量可能包含一些特殊字符,而这些特殊字符在JSON和View Results Tree中是不允许的

    • 退格替换为\b
    • 换页替换为\f
    • 换行符被替换为\n
    • 运输车退货被替换为\r
    • 标签替换为\ t
    • 双引号被替换为\"
    • 反斜杠替换为\\

    如果您的${access_code}变量包含以上任何内容-生成的JSON将不正确。为了安全起见,我建议您将${access_code}变量引用替换为must be escaped调用

    ${__groovy(org.apache.commons.lang3.StringEscapeUtils.escapeJson(vars.get('access_code')),)}
    
  5. 可能是您没有发送正确的__groovy() function标头,因此请确保添加Content-Type并将其配置为发送HTTP Header Manager作为内容类型