接口测试 —— jmeter与数据库的操作

在进行接口测试时,数据库查询是常用的一种判断方式,用来确定数据操作是否成功。除了这种场景,数据库里面的数据也是非常好的测试数据,比如作为请求的测试数据输入,那使用jmeter工具如何把数据库的数据依次获取作为参数传入下一个请求的参数中呢?这篇文章就跟你来讲一讲~~

因为项目的原因,假设我们要实现如下要求:

从数据库的用户表里获取用户信息,并作为参数全部传递给登录请求,分别完成登录操作。

一、jmeter连接数据库

1、导入mysql驱动包

    • 下载好mysql的驱动包(mysql-connector-java-5.1.7-bin.jar),放到jmeter的lib目录下
    • 选中测试计划,添加mysql驱动包

2、添加JDBC Connection Configuration(右键测试计划-->配置元件-->JDBC Connection Configuration),并配置数据库连接信息,如下图所示:

  • 参数解释如下:
  • DataBase URL: jdbc:mysql://192.168.88.130:3306/dataname?useUnicode=true&characterEncoding=utf-8
    • 1)192.168.88.130:3306为数据库的地址和端口号;dataname为数据库名
    • 2)useUnicode=true&characterEncoding=utf-8 指定字符的编码解码格式utf-8
  • JDBC Driver Class : com.mysql.jdbc.Driver 此为mysql数据库的驱动
  • Username: 数据库的登录用户名
  • Password: 数据库的密码

二、添加jdbc请求并设置变量

1、添加线程组-->右键线程组-->添加jdbc request,并做好设置

2、添加Debug PostProcessor用于查看变量phone值的获取,添加查看结果树并运行;得到以下结果。说明jmeter发起的jdbc请求及变量设置正常

三、实现循环读取库的用户信息,并传递到下一个登录请求

接下来就要思考怎么将查库得到的用户手机号,作为参数传递给下一个登录请求。这里需要引用到ForEach控制器

1、添加ForEach控制器(右键线程组-->逻辑控制器-->ForEach控制器),并先尝试如下设置

  • 参数解释:
  • 输入变量的前缀:phone; 从之前的jdbc request设置的变量得知,我们要取的值为phone_1、phone_2、phone_3......,所以这里输入phone
  • Start index for loop:0; 变量循环启动的索引,第一个元素起始索引+1
  • End index for loop:6; 变量循环结束的索引。所以这里是取值phone_1、phone_2、...、phone_6
  • 输出的变量名称:t_phone; 用于替换循环下的请求的变量

2、在ForEach控制器下添加登录请求,并进行变量引用

3、运行后,查看结果,成功从库里获取了前6个用户手机号,并分别成功登录

​以上这种处理需要自行查库获知总共有多少个用户,再去设置ForEach控制器的End index for loop值(设置为用户总数),就可以将库里所有用户进行参数传值登录了;

四、能不能jmeter自动去获知数据库表的用户数,然后去循环取值进行登录呢?

当然可以,先用jdbc request查出用户数,再直接对ForEach控制器的End index for loop值进行设置就ok了,实操如下:

a、添加一个jdbc请求,查询用户表的用户总数,并设置变量count

b、设置ForEach控制器的End index for loop值

c、运行,查看结果成功

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

相关推荐
2401_850491657 分钟前
c++如何通过文件映射mmap在多进程间实现高性能数据共享【进阶】
jvm·数据库·python
iuvtsrt8 分钟前
PHP 中高效查找 CSV 行并获取前后指定偏移行的数据
jvm·数据库·python
m0_463672208 分钟前
MySQL从库出现大量锁等待怎么办_分析从库执行计划与锁日志
jvm·数据库·python
2301_8092047010 分钟前
为 Go 语言 WaitGroup.Wait() 添加超时机制的实用方案
jvm·数据库·python
是桃萌萌鸭~34 分钟前
oracle的隐藏虚拟列详解
运维·数据库·oracle
2301_7796224136 分钟前
SQL分组聚合优化_GROUP BY索引与优化方案
jvm·数据库·python
m0_7407963640 分钟前
golang如何使用sync.WaitGroup_golang sync.WaitGroup并发等待使用方法
jvm·数据库·python
DianSan_ERP41 分钟前
抖店订单接口同步中如何解决订单漏单与数据一致性难题?
数据库
2401_824222691 小时前
c++如何通过重定向rdbuf来捕获第三方库的日志输出到文件【详解】
jvm·数据库·python
2401_867623981 小时前
CSS如何解决响应式文字大小调整_利用clamp函数实现流体排版
jvm·数据库·python