在自动化测试时,经常会用到上一步接口(或sql查询)的结果作为下一个测试节点的入参,那使用jmeter做测试时如何传参呢?
在上一篇建好的测试计划的基础上,我们来配置参数
首先 在jdbc request中配置好sql脚本入出参变量:
建一个java测试类,接收两个参数 state和suggest_operate
package com.jd.xc.jmeter;
import com.sun.org.apache.xpath.internal.operations.Bool;
import org.apache.jmeter.config.Argument;
import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult;
public class QlBlockerTest implements JavaSamplerClient {
private Integer state;
private String suggest;
public void setupTest(JavaSamplerContext javaSamplerContext){ }
public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
SampleResult sampleResult = new SampleResult();
sampleResult.setSampleLabel("qlBlocker");
state = javaSamplerContext.getIntParameter("state");
suggest = javaSamplerContext.getParameter("suggest_operate");
sampleResult.sampleStart();
System.out.println("运单当前状态"+state+" 拦截结果"+suggest);
sampleResult.setSamplerData("运单当前状态"+state+" 拦截结果"+suggest);
sampleResult.setDataType(SampleResult.TEXT);
sampleResult.setResponseMessageOK();
sampleResult.setResponseCodeOK();
sampleResult.sampleEnd();
sampleResult.setSuccessful(Boolean.TRUE);
sampleResult.setResponseData("运单当前状态"+state+" 拦截结果"+suggest,"UTF-8");
return sampleResult;
}
public void teardownTest(JavaSamplerContext javaSamplerContext) {
}
public Arguments getDefaultParameters() {
Arguments params = new Arguments();
params.addArgument("state","4");
params.addArgument("suggest","pass");
params.addArgument("suggest_operate","passOk");
return params;
}
}
将java类打成jar包jmeterTestCase-1.0-SNAPSHOT.jar,然后将jar包放到jmeter的\lib\ext路径下,重启jmeter
新建java请求取样器 如下图所示,在下拉框中选中我们创建的java类
修改参数值
这里的{b_1} 标识取sql返回数据的第1条,如下图所示,循环次数设置10次时,java输出的都是sql返回的第一条返回值
如果想循环获取sql返回的每一个结果,需要添加循环控制器,将java请求拖动至循环控制器下,增加一个计数器
配置计数器参数,引用名我们随便定义一个 idx
如果单纯的拼接参数{idx}} {idx}} jmeter运行会报错
需要我们利用函数助手V函数 绑定两个变量
再点击运行查看java类返回值,会发现打印的是sql查询出来的每一个记录