近期用JMeter做接口测试,遇到了一个需要用到数据数据库的场景:一个关于数据报告的页面,需要将数据库里面的数据求和或者取均值之后,展示出来。
如果要断言的话,需要连接数据库,通过写sql语句,将sql查询结果与页面的结果进行对比。
以MySQL数据库为例,具体实现的步骤如下:
一、加载JDBC驱动
二、连接数据库
三、数据库的查询(单值/多值引用)
一、加载JDBC驱动
一)本地准备驱动jar包
注意:驱动包的版本一定要与数据库的版本匹配,驱动版本太低可能导致连接报错。
1、网盘下载
准备好MySQL的驱动,找不到的可在网盘下载:链接:https://pan.quark.cn/s/b59620ad7f30,提取码:6WWw,将文件放到JMeter安装文件夹下
2、在官网下载
进入官网https://dev.mysql.com/downloads/connector/j/,选择:Platform Independent。点击Download,解压后找到jar文件,将文件放到JMeter安装文件夹下
二)导入驱动包
在JMeter的测试计划中,找到Add directory or jar to classspath,点击旁边的浏览,选中包,导入即可
二、连接数据库
一)添加元件JDBC Connection Configuration
选中线程组,鼠标右键,添加–配置元件–JDBC Connection Configuration
二)配置JDBC Connection Configuration
1、名称:默认为空,可自定义名称,也可为空
2、注释:默认为空,可自定义,也可为空
3、Variable Name for created pool:一个连接名称,例如命名为s_mysql1,需要唯一标识,后面的JDBC请求中需要用到,所以需要与JDBC取样器中的名称一致,简单理解就是jdbc request的时候需要确定去请求哪个数据库。
4、Max Number of Connections:连接池中允许的最大数据库连接数,默认10,做性能测试时,建议填 0
5、Max Wait(ms) :在连接池中取回连接最大等待时间,单位毫秒,默认10000,默认即可
6、Time Between Eviction Runs(ms):线程可空闲时间,单位毫秒,默认60000,默认即可
7、Auto Commit:自动提交sql语句,有三个选项:True、False、编辑(JMeter提供的函数设置),默认为true ,默认即可
8、Transaction Isolation:事务隔离级别,默认为DEFAULT,默认即可
9、Test While Idle: 当连接空闲时是否断开,默认为True,默认即可
10、Soft Min Evictable Idle Time(ms):连接池中连接的最小空闲时间,以毫秒为单位。当连接池中的连接处于空闲状态且超过了 “Soft Min Evictable Idle Time” 的设定值时,连接池可能会选择回收这些空闲连接,默认为5000,默认即可
11、Validation Query:验证sql语法,默认为select1,默认即可
12、Database URL:数据库连接 URL,可以带上字符集characterEncoding=utf-8,也可允许多条sql执行allowMultiQueries=true,还可指定时区serverTimezone=UTC,比如jdbc:mysql://10.0.41.104:33066/u_backend?serverTimezone=UTC&characterEncoding=utf-8&allowMultiQueries=true
13、JDBC Driver class:JDBC的类,默认为空,必填项,mysql就选择com.mysql.jdbc.Driver
14、Username:数据库的用户名
15、Password:数据库的密码
三、 数据库的查询(单值/多值引用)
一)添加JDBC Request
1、选中简单控制器,鼠标右键,添加–Sample–JDBC Request
添加成功后,填写对应参数:
名称:自定义
Variable Name of Pool declared in JDBC Connection Configuration:要与JDBC Connection Configuration中的Variable Name for created pool值保持一致
Query Type:根据填写的sql选择,查询就选择Select Statement,更新就选择Update Statement
Variable names:对应sql查询结果的字段值, 字段值有多少个,则对应值就有多少个,例如sql查出来有一个字段值reg_count,那么下面就对应1个变量count
Handle ResultSet:默认为Store as String,选择默认值即可, 当选择此选项时,查询结果将以字符串的形式存储在变量中
二)添加HTTP请求
添加HTTP请求,填写名称,HTTP请求方法,路径等等
三)添加响应断言
1、引用一个变量
引用变量的形式就是 变量 名 行 数 ,例如 {变量名_行数},例如 变量名
行
数,例如{count_1},表示引用查询结果中count字段第1行的数据,KaTeX parse error: Expected group after '_' at position 5: {变量名_̲#}表示返回的行数,例如{count_#}表示返回了几行。
2、引用多个变量
如果SQL查询出来的值有多个,例如查询出来了5行记录,每行三个字段,pid_reg_count对应变量count,pid_fee对应变量fee,income对应变量income。
可以添加一个Debug Sample,查看每个值是怎么取的,KaTeX parse error: Expected group after '_' at position 7: {count_̲#}表示返回的行数,{count_1}表示返回的count字段的第一行的值,${count_2}表示返回的count字段的第二行的值。
fee1表示返回的fee字段的第一行的值,{income_1}表示返回的income字段的第一行的值。。。依次类推。
今天的分享就到这里,希望对大家所有启发。
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!