Jmeter将JDBC Request查询结果作为下一个接口参数方法
现在有一个需求,从数据库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查询结果作为下一个接口参数方法的更多相关文章
- Jmeter将JDBC Request查询结果作为下一个接口参数方法(转载)
现在有一个需求,从数据库tieba_info表查出rank小于某个值的username和count(*),然后把所有查出来的username和count(*)作为参数值,用于下一个接口. tieba_ ...
- 【重点】Jmeter----- 将 JDBC Request 查询结果作为下一个接口参数方法(二)
一.说明 jmeter与数据库mysql已连接成功 二.需求 1.前置条件: 1.已user数据库的前8位手机号码作为行动计划的名称 2.行动计划的日期是2018-10-17 2.操作步骤: 1)获取 ...
- jmeter将JDBC Request查询出的数据作为下一个接口的参数
现在有一个需求,从数据库tieba_info表查出rank小于某个值的username和count(*),然后把所有查出来的username和count(*)作为参数值,用于下一个接口. tieba_ ...
- Jmeter中JDBC Request和BeanShell PostProcessor的结合使用(SQL模糊查询)
[前言] 今天记录一下Jmeter中JDBC Request和BeanShell PostProcessor的结合使用的方法(SQL模糊查询) [步骤] 1.下载对应数据库的驱动包到jmeter安装目 ...
- jmeter 性能测试 JDBC Request (查询数据库获取数据库数据) 的使用
JDBC Request 这个Sampler可以向数据库发送一个jdbc请求(sql语句),并获取返回的数据库数据进行操作.它经常需要和JDBC Connection Configuration配置原 ...
- 转jmeter 性能测试 JDBC Request (查询数据库获取数据库数据) 的使用
JDBC Request 这个Sampler可以向数据库发送一个jdbc请求(sql语句),并获取返回的数据库数据进行操作.它经常需要和JDBC Connection Configuration配置原 ...
- Jmeter JDBC Request 查询语句中有汉字查询结果为空的解决方法
搜索接口我会校验返回值,查询JDBC Request 查询语句有中文字的时候查询会有问题. 解决方法很简单,在JDBC Connection Configuration的Database URL里加一 ...
- Jmeter(十三) JDBC Request
Jmeter中取样器(Sampler)是与服务器进行交互的单元.一个取样器通常进行三部分的工作:向服务器发送请求,记录服务器的响应数据和记录响应时间信息 有时候工作中我们需要对数据库发起请求或者对数据 ...
- jmeter将上一个接口返回值作为下一个接口的请求参数
在jmeter中有时候会用到,将上一个接口的返回值作为下一个接口的请求参数 具体操作如下: 1.首先新建一个http请求(右键线程组--添加Sampler--http请求),同时添加好接口相应的请求参 ...
随机推荐
- linux应用之yum命令
yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器.基於RPM包管理,能够从指定的服务器自动下载RP ...
- AtCoder Beginner Contest 103
https://beta.atcoder.jp/contests/abc103 A - Task Scheduling Problem Time Limit: 2 sec / Memory Limit ...
- ACM学习历程—NPU1045 2015年陕西省程序设计竞赛网络预赛(热身赛)C题 Graph Theory(递推 && 组合数学 && 大数)
Description In graph theory, a matching or independent edge set in a graph G = (V , E) is a set of e ...
- Godot-3D教程-01.介绍3D
创建一个3D游戏将是个挑战,额外增加的Z坐标将使许多用于2D游戏的通用技术不再有用.为了帮助变换(transition),值得一提的是Godot将使用十分相似的API用于2D和3D. 目前许多节点是公 ...
- C++的函数重载与C参数个数不一致时的编译
C++的函数重载意味着函数名和返回值类型相同,但是参数个数和/或类型不同.在编译过程中编译器一般会把各个参数的类型连接到函数名内组成新的函数名,以区分各个重载函数. C语言不支持函数重载.但是有时候虽 ...
- WPF学习笔记系列之一 (布局详情)
布局:StackPanel 栈布局:控件不会拐弯且多出的不再显示.DockPanel 停靠布局 吸在上边下边或左右.WrapPanel 环绕布局 一行控件会拐弯Canvas 进行基于 ...
- 性能测试之Jmeter学习(八)
本节主要学习:断言 JMeter也有像LR中的检查点,本节就来介绍下JMeter的检查点如何去实现. JMeter里面的检查点通过添加断言来完成. 检查点:上一节讲到,我们对用户名和密码进行了参数化, ...
- Auto Layout Guide----(二)-----Auto Layout Without Constraints
Auto Layout Without Constraints 没有约束的自动布局 Stack views provide an easy way to leverage the power of A ...
- 下拉选择select和复选框checkbox的状态的各种方式
复选框的状态 <input name="ck" value=" " type="checkbox" checked> 或者&l ...
- ACM-ICPC2018徐州网络赛 Features Track(二维map+01滚动)
Features Track 31.32% 1000ms 262144K Morgana is learning computer vision, and he likes cats, too. ...