JMeter 如何用数据库查询结果作为java测试入参

在自动化测试时,经常会用到上一步接口(或sql查询)的结果作为下一个测试节点的入参,那使用jmeter做测试时如何传参呢?
在上一篇建好的测试计划的基础上,我们来配置参数
首先 在jdbc request中配置好sql脚本入出参变量:


image.png

建一个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类


image.png

修改参数值

image.png

这里的 {b_1} 标识取sql返回数据的第1条,如下图所示,循环次数设置10次时,java输出的都是sql返回的第一条返回值
image.png

如果想循环获取sql返回的每一个结果,需要添加循环控制器,将java请求拖动至循环控制器下,增加一个计数器

image.png

image.png

配置计数器参数,引用名我们随便定义一个 idx
image.png

如果单纯的拼接参数 {idx}} {idx}} jmeter运行会报错
image.png

需要我们利用函数助手V函数 绑定两个变量


image.png

image.png

再点击运行查看java类返回值,会发现打印的是sql查询出来的每一个记录


image.png

你可能感兴趣的:(JMeter 如何用数据库查询结果作为java测试入参)