现在有一个需求,从数据库tieba_info表查出rank小于某个值的username和count(*),然后把所有查出来的username和count(*)作为参数值,用于下一个接口。

tieba_info表结构如下图

分析:

1.要查出username和count(*),那么首先就要有1个或者2个 jdbc request,连接本地数据看,分别查询出我们需要的username和count(*);

2.rank小于某个值,这个值我们可以做一个变量,方便管理。不管这个值是多少,我们查出来的count(*)将只有一个值,而username会有很多个,具体多少根据我们的条件rank来变化;

3.查询出所有username后,我怎么取到每一个username的值?

4.又怎么把我们查出来的每一个username作为参数值去请求下一个接口?这里先说下,需要做一个循环。

5.我事先并不知道能查出多少条数据,那如何知道我们需要循环多少次?

接下来逐一解决我们的问题。

实践:

1.首先添加一个jdbc connection configuration,这里的配置方法可以百度,我连接的是我本地的mysql数据库

2.添加1个或者2个 jdbc request,分别查询username和 count(*),我这里是用了两个

3.可以看到,在username这个请求中,select语句中出现了变量rank,那我们可以添加一个【用户定义的变量】,名称就是我们的sql语句里面的变量引用名rank,值就根据需要自己填

4.sql语句写完了,就要提取我们需要的结果了

这个时候可以添加查看结果树,看看我们获取到的count(*)和username

count查出来的数据如下图:

username查询出来的数据如下

那我们需要的就是这个count(*)就是20,和20个username的值

5.上面我们只是查出来数据,接下来我们就要提取username和count(*)数据,再回到我们的count和username jdbc request

在username这个request里面,下方的 variable name这里填上你想使用的变量名,也就是之后的接口中要用到的,我取的username,同理,count的request里也做相同操作,可以取为count

6.现在我们要测试我们的参数化到底成功没有,我模拟请求接口localhost:3306/test,然后参数传count和username,参数值就是我们获取的username和count(*)

查看下请求结果

我发现请求里面 username和count参数化并没有成功,那为什么会不成功呢,经过一番搜索,原来当使用jdbc request的结果作为参数时,要写成${username_1}这样子,1代表你查出来的数据第一行,想取第几行就把1改成几。那问题来了,我们查出来count(*)是肯定只有一条数据,那我们可以确定写成${count_1},但是username却有很多条,我是想所有的username都请求一次,也就是说如果是username这个变量的话,1这个数字应该是要不断变化的而不是某个固定的值,那怎么才能让他不断变化呢

7.计数器

对,就是计数器

我们添加一个计数器

由于我们从第一行开始取值,所以启动填1,每次我们多1,所以递增也填1,最大值可不填,number format就是数字格式,如果填000,取值是12,那最后会显示为012,而我们只需要本身的数字,所以就填0,引用名称就是后面需要用的变量名

8.有了计数器,能递增了,那我们就能把username传进去了。我们上面说了${username_1}是取第一行,${username_2}是取第二行,依次类推,那我们要从1开始取,一直到最后。上一步添加的计数器就起作用了,我们设置的计数器是从1开始计数,每次递增1,那么跟我们想要的完全吻合,index就是我们设置的计数器的变量名,可以直接用他来代替我们的数字1,2,3,4等等,那我们现在来把username和index两个变量拼接起来,这里如果你直接写成 ${username_index}或者 ${username_${index}}都是不行的,因为两个变量不能直接拼接,需要用到一个函数 __V,不了解这个函数的可以百度看看,作用就是可以使2个变量可以拼在一起,所以我们拼接后的username变量应该是${__V(username_${index})}

现在再来看看 我们请求接口有没有把所有的username传进去

结果发现,为啥还是只请求了一次,明明count(*)查出来是20,那应该请求20次啊,为啥只把第一个username传进去了呢?

9.这是因为,我们传的username参数相当于做了参数化,有多个值,这时候就需要在设置线程数或者添加一个循环控制器,但是我们并不知道到底需要循环多少次或者需要设置多少线程数,才能让username刚好传完,这个时候,我们之前查询的count就起作用了,count变量是我们之前查出来的所有数据的总数,这个总数是多少就说明我们需要多少线程或多少次循环。ok,那我们在http 请求上右击,点击插入上级--逻辑控制器--循环控制器,循环次数,我们使用count变量,即${count_1},这样就能把次数确定。这里其实不能用添加线程的方式来做,因为count 和 username两个jdbc request都在这个线程里,如果设置多线程,这两个也会多次请求,不合理,所以我们选择更好的循环控制器

10.所有的东西都设置完了,就需要把我们的东西进行重新排序归类

我们首先是有jdbc connection config,然后有count和username两个jdbc request,然后我们有一个测试的http请求,一个计数器和一个循环控制器,那么这时候就需要把计数器和http请求全部移入循环控制器了,否则还是无法传入全部username值

最后的效果如图,rank变量值是20,刚好20个http请求,每个请求的username都不同

Jmeter将JDBC Request查询结果作为下一个接口参数方法(转载)的更多相关文章

  1. Jmeter将JDBC Request查询结果作为下一个接口参数方法

    现在有一个需求,从数据库tieba_info表查出rank小于某个值的username和count(*),然后把所有查出来的username和count(*)作为参数值,用于下一个接口. tieba_ ...

  2. 【重点】Jmeter----- 将 JDBC Request 查询结果作为下一个接口参数方法(二)

    一.说明 jmeter与数据库mysql已连接成功 二.需求 1.前置条件: 1.已user数据库的前8位手机号码作为行动计划的名称 2.行动计划的日期是2018-10-17 2.操作步骤: 1)获取 ...

  3. jmeter将JDBC Request查询出的数据作为下一个接口的参数

    现在有一个需求,从数据库tieba_info表查出rank小于某个值的username和count(*),然后把所有查出来的username和count(*)作为参数值,用于下一个接口. tieba_ ...

  4. Jmeter中JDBC Request和BeanShell PostProcessor的结合使用(SQL模糊查询)

    [前言] 今天记录一下Jmeter中JDBC Request和BeanShell PostProcessor的结合使用的方法(SQL模糊查询) [步骤] 1.下载对应数据库的驱动包到jmeter安装目 ...

  5. jmeter 性能测试 JDBC Request (查询数据库获取数据库数据) 的使用

    JDBC Request 这个Sampler可以向数据库发送一个jdbc请求(sql语句),并获取返回的数据库数据进行操作.它经常需要和JDBC Connection Configuration配置原 ...

  6. 转jmeter 性能测试 JDBC Request (查询数据库获取数据库数据) 的使用

    JDBC Request 这个Sampler可以向数据库发送一个jdbc请求(sql语句),并获取返回的数据库数据进行操作.它经常需要和JDBC Connection Configuration配置原 ...

  7. Jmeter JDBC Request 查询语句中有汉字查询结果为空的解决方法

    搜索接口我会校验返回值,查询JDBC Request 查询语句有中文字的时候查询会有问题. 解决方法很简单,在JDBC Connection Configuration的Database URL里加一 ...

  8. Jmeter(十三) JDBC Request

    Jmeter中取样器(Sampler)是与服务器进行交互的单元.一个取样器通常进行三部分的工作:向服务器发送请求,记录服务器的响应数据和记录响应时间信息 有时候工作中我们需要对数据库发起请求或者对数据 ...

  9. jmeter将上一个接口返回值作为下一个接口的请求参数

    在jmeter中有时候会用到,将上一个接口的返回值作为下一个接口的请求参数 具体操作如下: 1.首先新建一个http请求(右键线程组--添加Sampler--http请求),同时添加好接口相应的请求参 ...

随机推荐

  1. Java泛型中的通配符

    Java泛型中的通配符可以直接定义泛型类型的参数.而不用把该函数定义成泛型函数. public class GenericsTest { public static void main(String[ ...

  2. code1169 传纸条

    来自:http://www.cnblogs.com/DSChan/p/4862019.html 题目说找来回两条不相交路径,其实也可以等价为从(1,1)到(n,m)的两条不相交路径. 如果是只找一条, ...

  3. 不使用库函数sqrt实现求一个数的平方根

    二分法: double mysqrt(double a) { ) ; , end = a; ) end = ; while(end - start > precision) { ; if( mi ...

  4. pageadmin去掉xxx

    首先,屏蔽网页标题栏上的版权信息. 这个版本的信息在Incs目录下,我添加代码的文件是web_top.ascx,在它的最底下加入下面的代码. <script language="jav ...

  5. git post-receive 待验证的代码

    使用 git post-receive 钩子部署服务端代码 本站文章除注明转载外,均为本站原创或者翻译. 本站文章欢迎各种形式的转载,但请18岁以上的转载者注明文章出处,尊重我的劳动,也尊重你的智商: ...

  6. thinkphp5网站中集成使用支付宝手机支付接口

    今天以thinkphp5中使用支付宝的手机支付接口为例. 一.创建基本页面pay/alipay_wap_submit.php(开始创建订单) <!DOCTYPE html> <htm ...

  7. Hadoop-2.4.0中HDFS文件块大小默认为128M

    134217728 / 1024 = 131072 / 1024 = 128

  8. SciTE编写lua的快捷键整理

    SciTE快捷键整理 常用键整理: Ctrl + Q: 多行注释 Ctrl + L:删除一行或多行 Ctrl+T :和上一行换位置 Ctrl+D :复制高亮选中字符. 如果没有高亮选择字符, 则复制光 ...

  9. Alpha冲刺 - (9/10)

    Part.1 开篇 队名:彳艮彳亍团队 组长博客:戳我进入 作业博客:班级博客本次作业的链接 Part.2 成员汇报 组员1(组长)柯奇豪 过去两天完成了哪些任务 进一步优化代码,结合自己负责的部分修 ...

  10. WebApi跨域请求

    在实际开发中 会有提供webapi给前端js 直接调用的情况, 这时候就会有存在跨域的情况, 解决方案: 在Global中添加代码 protected void Application_BeginRe ...