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

时间:2015-06-29 23:16:52

标签: jmeter

您好我传递的电子邮件是时间函数,如下所示

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

此函数的值更改eveytime我调用变量email。 我想将此函数生成的值存储到变量中,并在其他请求中使用它。

所以目前我在两个不同的http请求中收到两封不同的电子邮件,因为我的两个http请求之间存在一段时间差。

我想要做的是..通过从请求中提取值并在第二个http请求中传递它来存储第一个http请求中发送的电子邮件。

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

我知道从html响应中提取的方法..但有没有办法从jmeter中提取请求?

若有人可以告诉我如何实现这个目标?

谢谢

5 个答案:

答案 0 :(得分:3)

  1. 添加Beanshell PostProcessor作为发送该POST请求的请求的子项
  2. 将以下代码放入PostProcessor"脚本"区域

    ${EMAIL}
  3. 在需要时将生成的值称为email
  4. 澄清:

    • 上面的代码将提取EMAIL请求参数(如果有)的值并将其存储到ctx JMeter变量
    • vars - JMeterContext班级实例的简写
    • Arguments = JMeterVariables班级实例的简写
    • Argumentitem_id item_details item_type 1 'some detail' 1 2 'some detail' 1 3 'some other detail' 2 4 'some other detail' 2 - 您可以从JMeterContext JavaDoc
    • 中找到答案

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

答案 1 :(得分:0)

您可以将时间戳值存储在变量中,然后使用此时间戳变量在任意位置创建电子邮件,而不是整个电子邮件。 通过这种方式,您可以在每个地方都收到相同的电子邮件。

答案 2 :(得分:0)

是HTTP采样器吗?如果是这样,只需加入beanshell后处理器:

extern void *_sidata, *_sdata, *_edata;
extern void *_sbss, *_ebss;

void __attribute__((naked, noreturn)) Reset_Handler()
{
    //Normally the CPU should will setup the based on the value from the first entry in the vector table.
    //If you encounter problems with accessing stack variables during initialization, ensure 
    //asm ("ldr sp, =_estack");

    void **pSource, **pDest;
    for (pSource = &_sidata, pDest = &_sdata; pDest != &_edata; pSource++, pDest++)
        *pDest = *pSource;

    for (pDest = &_sbss; pDest != &_ebss; pDest++)
        *pDest = 0;

    SystemInit();
    __libc_init_array();
    main();
    for (;;) ;
}

也适用于任何采样器:

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

答案 3 :(得分:0)

您可以使用正则表达式提取器从请求URL中提取电子邮件地址。

将正则表达式提取器添加为发送帖子请求的采样器的子级。 在正则表达式提取器中,选择响应提交中的 URL 以检查而不是正文。

您应该能够以这种方式从请求中提取电子邮件ID。

答案 4 :(得分:0)

添加一个 Beanshell 后处理器并添加以下脚本:

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