java - 如何参与动态http请求并对其进行加密并使用Jmeter替换http请求中的结果
问题描述
我是 jmeter 的新手。我有一个动态 http 请求,其中某些值取决于前一个 http 请求的值。还有一个 encryptedKey 和 value。该值是根据动态的详细信息对象计算得出的。我正在编写一个 java 函数来加密部分动态请求。encryptedValue 必须替换为 java 函数的结果。动态 Http 请求:-
{
"ver": "1.0",
"timestamp":"2019-08-28T11:39:57.153Z",
"Details": {
"key": "Previous API call value",
"key": "Previous API call value"
},
"EncryptedKey": "EncryptedValue"
}
我只需要获取 Details 对象并在其上应用 encrypt util。然后我必须用java函数的结果替换“EncryptedValue”,然后发出http请求。我如何在 jmeter 中做到这一点?
到目前为止我尝试过的:-
目前我正在将详细信息对象加载到一个单独的文件中,并使用 java 读取它并对其进行加密。
所以我最终的http请求如下:-
{
"ver": "1.0",
"timestamp":"2019-08-28T11:39:57.153Z",
"Details": {
"key": "Previous API call value",
"key": "Previous API call value"
},
"EncryptedKey": "${__groovy(new com.util.Encryption().encryptData(), encryptedValue)}"
}
但这不能用上一个 http 请求的结果替换“上一个 API 调用值”。有没有其他方法可以解决这个问题?
解决方案
如果要完全替换请求正文,可以考虑使用JSR223 PreProcessor并使用如下代码:
免责声明:我不能保证下面的代码会起作用,因为您的示例请求数据不是有效的 JSON,而且我不知道您的Encryption().encryptData()
函数是如何实现的
def requestBody = new groovy.json.JsonSlurper().parseText(sampler.getArguments().getArgument(0).getValue())
def key = requestBody.Details.key
requestBody.EncryptedKey = new com.util.Encryption().encryptData(key)
def arguments = new org.apache.jmeter.config.Arguments()
sampler.setArguments(arguments)
sampler.addNonEncodedArgument('', new groovy.json.JsonBuilder(requestBody).toPrettyString(),'')
sampler.setPostBodyRaw(true)
但是您必须重新编写com.util.Encryption().encryptData()
函数以将密钥作为参数,而不是从文件系统中读取它。
在上面的代码示例sampler
中,代表HTTPSamplerProxy类,请参阅 JavaDoc 了解所有可用功能。
另请查看Apache Groovy:解析和生成 JSON,了解有关这些JsonSlurper和JsonBuilder类的更多信息,以及Apache Groovy - Why and How You Should Use It一文,全面概述 JMeter 中的 Groovy 脚本
推荐阅读
- batch-file - 批量 - 使用输入更改帐户密码
- sql-server - Web 服务帐户无权在表上选择或在函数上执行,即使它是公共角色的一部分
- android-studio - Android Studio 中的 Flutter:Build Bundle/APK 灰显
- r - X轴时间
- oracle - 有没有办法允许对象函数返回一个变量而不在构造函数中传入该变量?
- ios - 应用程序无法上传到设备
- c - 如何将用 C 编写的块传递给 Ruby 的 rb_mod_refine?
- java - 无法在句柄事件中访问按钮/文本区域
- android - 如何修复 Android Studio 中的“android.view.InflateException: Binary XML file line #279: Error inflating class...”错误?
- javascript - 使用 module.exports 导出特定数据有错吗?