声明:本文所记录的仅本次操作学习到的知识点,其中商城IP错误,请自行更改。
背景:获取数据库用户表中的数据进行登录接口测试。
思路:
- 引用jar包【测试计划】。
- 设置数据库的连接信息,取变量名db1--数据源【配置元件】。
- 数据取样器引用数据源,填写查询sql,定义用户名密码变量名【取样器】。
- 循环登录场景【循环控制器】:计数器、拼接变量。
1.配置
(1) 下载
夸克网盘
链接:https://pan.quark.cn/s/934385c13d1f
提取码:j12w
(2) Navicat直接解压即可
2. 认识JMeter
(1) 配置元件**【JDBC Connection Configuration】**
一个数据库连接池配置。一个测试计划可以有多个JDBC Connection Configuration,但是可以通过创建池的变量名称来区分开来。
(2) 取样器【JDBC Request**】**
主要是向数据库发送 JDBC 请求(sql 语句),并获取返回的数据集。需要和数据库连接池配置(JDBC Connection Configuration)一起使用。
(3) 配置元件【计数器**】**
循环递增生成数字,可以在线程组任意地方添加计数器。
(4) 配置元件【调试取样器**】**
生成 一个包含JMeter变量或属性值的样本,并且这些值可以在组件【查看结果树】的响应窗格中看到。
3. 【JDBC Connection Configuration】
(1)引用MySQL的jar包
点击【测试计划】点击【浏览】,选择【mysql-connector-java-5.1.48-bin.jar】。
(2)新建【JDBC Connection Configuration】
线程组【右击】【添加】【配置元件】【JDBC Connection Configuration】
(2) 设置【JDBC Connection Configuration】
① Variable Name for created pool:创建池的变量名称:db1。需要定义一个变量名来区分每个数据库连接池,一个线程组可以有多个连接池,所以每个连接池变量名需唯一(在后面JDBC Request时需要用到)。
② Database URL:数据库连接URL,本次配置:jdbc:mysql://商城IP:端口/数据库名
③ JDBC Driver class:数据库驱动,下拉选择:com.mysql.jdbc.Briver
④ Username:数据库登录用户名
⑤ Password:数据库登录密码
4.【JDBC Request】
(1)新建【JDBC Request】
线程组【右击】【添加】【取样器】【JDBC Request】
(2) 设置【JDBC Request】
① Variable Name of Pool declared in JDBC Connection Configuration:数据库连接池配置的名称:db1。
② Query Type:sql 语句的类型,这里选择Select Statement。
③ Query:SELECT username,pwd FROM sxo_user LIMIT 5
④ Variable names:保存sql语句返回查询结果字段、用**,**分隔、后面登录设置参数时需用到:sqlusername,sqlpwd。
(3) 查看结果树
5.调试取样器
在开发脚本的时候调试用的:添加调试取样器后在查看结果树中能看到在脚本中所有参数化变量所取的值,这样有利于排错。右击整个线程组,新建【调试取样器】。
调试经历:设置好【JDBC Connection Configuration】与【JDBC Request】后,就可以新建【调试取样器】与【查看结果树】查看执行结果。
(1)新建【调试取样器】
【右击】【添加】【取样器】【Debug Sampler】
(2)【查看结果树】
通过结果总结JMeter读取数据库表中的数据,是通过【变量名_序号=值】的方式依次读取,最后再通过【变量名_#=总数】的方式给出读取的总次数。
6.【HTTP请求默认值】
养成习惯,把多个接口访问同一个服务器地址提取出来,设置http请求默认值。
7.【循环控制器】
(1)新建【循环控制器】
右击【线程组】【添加】【逻辑控制器】【循环控制器】
(2)配置【循环控制器】:
① 循环次数:${sqlusername_#}
由于这次是从数据库表中读取数据,而读取数据的方式是通过【变量名_序号】的形式。而这里还有一个特例,就是【变量名_#】的值统计了总数,所以循环次数是通过【变量名_#】取值获取:${sqlusername_#}。
8.【计数器】
由于是从数据库表中读取数据,且通过【变量名_序号】的形式,所以这里还需要【计数器】来保存【序号】,这个序号是为了【登录】HTTP请求时给参数赋值需要用到。
sqlusername_1=XXX
sqlusername_2=XXX
... ...
sqlusername_#=5(总数)
(1)新建【计数器】
在【循环控制器】层级下【添加】【配置元件】【计数器】
(2)设置【计数器】
① Starting Value:初始值,默认为0,long整型。数据库读取是从序号1开始,这里设置:1。
② 递增:1。
③ Maximum value:同【循环控制器】一样,设置:${sqlusername_#}。
④ 引用名称:自定义一个变量名称,设置:n,后面【登录】HTTP请求会用到。
9.HTTP请求【登录】
(1)新建【HTTP请求】
在【循环控制器】层级下新增【登录】
(2)设置【HTTP请求】
① 名称:登录。
② 请求方法:选择POST。
③ 路径:?s=api/user/login&application=app&application_client_type=weixin。
④ 参数accounts,值:{** **__V(sqlusername_{n}) }。
参数取值方式:一般通过 {变量名}** 的方式就可以参数取值成功,但是这次变量名不同,它是由变量名拼接序号【变量名_序号】的方式而来的变量名,**不能**通过{变量名_序号}的方式取值,需先通过__V()函数把变量名跟序号拼接在一起,然后再通过${}来进行取值**。
第一步【拼接】:__V(变量名_序号) == __V( sqlusername _ ${n} ),拼接的才是变量名的一个整体。注意:这里是**两个下划线_**连在一起__,而不是一个下划线_。
第二步【取值】:{第一步}=={ __V( sqlusername _ ${n} ) }
正确的写法:{__V(固定变量名_{序号})},例如:{__V(sqlusername_{n})}。
错误的写法:{_V(固定变量_{序号})}、{__V(固定变量_序号)}、{V固定变量{序号}}、__V(固定变量_{序号})等等。