现在有一个需求,从数据库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. 通过阿里云域名动态解析 IP 地址

    这两天在家里用树莓派折腾了一个家用服务器,主要用来做 mac 的 Time Machine ,还有就是当做下载机和 nas ,想着平时上班时间家里没人用网络,空着也是空着,就可以利用空闲带宽下个美剧啥 ...

  2. 【Shell】变量的取用、删除、取代与替换

    ——来自<鸟哥的Linux私房菜> ——总结做方便查阅之用 变量的取用: echo echo $variableecho $PATHecho ${PATH} 变量的配置守则1.变量与变量内 ...

  3. 集训Day1

    雅礼集训2017Day1的题 感觉上不可做实际上还挺简单的吧 T1 区间加 区间除法向下取整 查询区间和 区间最小值 大力上线段树,把除法标记推到底,加法标记就是按照线段树的来 先拿30 然后60的数 ...

  4. CF785CAnton and Permutation(分块 动态逆序对)

    Anton likes permutations, especially he likes to permute their elements. Note that a permutation of  ...

  5. 2010浙大:zoj问题

    题目描述: 对给定的字符串(只包含'z','o','j'三种字符),判断他是否能AC. 是否AC的规则如下:1. zoj能AC:2. 若字符串形式为xzojx,则也能AC,其中x可以是N个'o' 或者 ...

  6. android TextView selector点击样式改变

    1.selector 从单词的意思来说:选择器,就是对你的目标的控制.selector主要是用在ListView的item单击样式和TextView和Button的点击样式. 2.主要属性介绍: an ...

  7. JSON 生成 C# Model

    http://www.cnblogs.com/tianqiq/p/4309791.html

  8. WPF win7+vs2010开发的打印功能,怎么在XP系统上无法打印

    在wpf 中打印功能很强大,但最近是在win7上可以但是布置到xp上就不可以了,查了好多资料终于知道怎么回事了原来xp里没有.net framework3.5 安装一个就OK了要先安装4.0.

  9. petrozavodsk1

    A 转化模型和相当于求解小于n/2的最大的和n互质的数字, 显然可以证明所求和n/2相距 O(logn) ,从 n/2 开始向下枚举然后判定即可. B 上下界网络流? C 从底层开始向上走贪心选下层节 ...

  10. 使用c语言实现的常用函数

    /* 为了面试准备的,有些在工作中也可以用用,本人算法方面比较欠缺,如果有更优秀的算法麻烦告诉我啊 */ /* strcat的实现 */ #include <assert.h> char* ...