如何在Jmeter中从请求中提取值

pxyaymoc  于 2023-08-05  发布在  其他
关注(0)|答案(6)|浏览(210)

嗨,我通过一个电子邮件,这是一个时间功能如下

email = ${__time(MMddyy)}_${__time(HMS)}@yopmail.com

字符串
这个函数的值每次我调用变量email时都会改变。我想将这个函数生成的值存储到一个变量中,并在其他请求中使用它。
因此,目前我在两个不同的http请求中收到两封不同的电子邮件,因为我的两个http请求之间存在一些时间差。
我想做的是通过从请求中提取值来存储在第一HTTP请求中发送的电子邮件,并在第二HTTP请求中传递该值。

POST data:
email=062915_160738%40yopmail.com


我知道从html响应中提取的方法。但是有没有办法从jmeter中的request中提取呢?
如果是这样,有人能告诉我如何实现这一点?
谢谢你

xwmevbvl

xwmevbvl1#

1.添加一个Beanshell PostProcessor作为发送POST请求的子请求
1.将以下代码放入后处理器的“脚本”区域

import org.apache.jmeter.config.Argument;
import org.apache.jmeter.config.Arguments;

Arguments argz = ctx.getCurrentSampler().getArguments();
for (int i = 0; i < argz.getArgumentCount(); i++) {
    Argument arg = argz.getArgument(i);
    if (arg.getName().equals("email")) {
        vars.put("EMAIL", arg.getValue());
        break;
    }
}

字符串
1.必要时,将生成的值称为${EMAIL}
澄清:

  • 上面的代码将提取email请求参数的值(如果有)并将其存储到EMAIL JMeter变量
  • ctx-JMeterContext类示例的简写
  • vars = JMeterVariables类示例的简写
  • ArgumentsArgument-您可以从JMeterContextJavaDoc中找到答案

有关JMeter中Beanshell脚本的更多信息,请参见How to use BeanShell: JMeter's favorite built-in component指南。

wlsrxk51

wlsrxk512#

您可以将时间戳值存储在一个变量中,而不是整个电子邮件,然后使用此时间戳变量在任何您想要的地方创建电子邮件。这样你就可以在任何地方都有相同的电子邮件。

mlmc2os5

mlmc2os53#

添加Beanshell PostProcessor并添加以下脚本:

import org.apache.jmeter.config.Argument;
import org.apache.jmeter.config.Arguments;

Arguments argz = ctx.getCurrentSampler().getArguments();
for (int i = 0; i < argz.getArgumentCount(); i++) {
   Argument arg = argz.getArgument(i);
    String req_body = arg.getValue();
    vars.put("req_Json",req_body);
 }

字符串
这里我们得到json格式的输出:

${req_Json}=
"email":"062915_160738%40yopmail.com",
"name":"abc xyz"


现在使用jp@gc Json Path Extractor提取email的值

Json expression = $['email']


并将值存储在email_value_extacted
现在在任何你想使用的地方使用变量${email_value_extacted}。最后,

${email_value_extacted} = 062915_160738%40yopmail.com

zpgglvta

zpgglvta4#

是HTTP Sampler吗?如果是这样,只需在beanshell后处理器中输入:

String prevQuery = prev.getQueryString(); //your request text
System.out.println(prevQuery );

字符串
也适用于任何采样器:

String prevQuery  = prev.getSamplerData();

ecbunoof

ecbunoof5#

您可以使用正则表达式提取器从请求URL中提取电子邮件地址。
添加正则表达式提取器作为发送post请求的采样器的子项。在正则表达式提取器中,选择响应字段中的URL进行检查,而不是选择Body。
您应该能够以这种方式从请求中提取电子邮件ID。

gmol1639

gmol16396#

添加Beanshell PostProcessor &添加以下脚本:

import org.apache.jmeter.config.Arguments;

Arguments argz = ctx.getCurrentSampler().getArguments();
for (int i = 0; i < argz.getArgumentCount(); i++) {
   Argument arg = argz.getArgument(i);
    String req_body = arg.getValue();
    vars.put("req_Json",requestBody);
 }

字符串
你会得到这样的json:

{
"email":"062915_160738%40yopmail.com",
"name":"abc xyz"
}


现在添加jp@gc - Add Dummy Subresult并在Response Data字段中添加${req_Json}。
现在添加JSON Extractor &选择Sub-samples only单选按钮&在JSON Path表达式中添加$.emailAddress &提供变量名称&使用新创建的变量,您可以访问电子邮件地址。

相关问题