Jmeter基础知识(二)

6.Jmeter数据驱动

Jmeter里参数化一般分为①从文件里读数据,②从数据库里读数据,③用后置处理器从响应里读数据(第五节中就是从后置处理器中进行数据读取)

数据驱动的目标就是,我们在单独的一个Execl里来维护数据,而不是在请求里面硬编码

(1)添加配置元素-CSV Data Set Config

数据驱动csv文件:

设置线程数2,运行后结果查看:

CSV数据文件设置字段说明:

① 变量名称(Variable Names):需要输入文本里各列都叫什么名字

② 分隔符(Delimiter):用英文的逗号隔开

③遇到文件结束符再次循环?(Recycle on EOF?):数据再循环,例如设置为True,我们的CSV中共有7条数据,但是我们有10个用户,那么第8个用户就会就会从第一条数据开始,再次循环取值

④遇到文件结束符停止线程?(Stop thread on EOF?):例如是true,执行了文件,则停止运行,如果是False,执行了文件,不停止线程,当Recycle on EOF设置为True时,此项设置无效。

注意点:

①文件一定要保存.csv格式

当csv文件在jmeter的bin目录或脚本目录时,只需给出文件名即可

(2)用函数助手参数化-从csv文件取数据

依然使用(1)中的csv文件

点击生成后,就拷贝到粘贴板上,直接去粘贴就可以了

(3)计数器

在CSV里读数据,不管是用CSV Date Set Config还是用函数助手,那些数据都可能重复,我们都是手动的把它设置成不一样,如果我们不想一直去修改csv的数据,那么可以使用计数器,这样我们只需要修改计数器的起始点,最大值等,就能通过csv里的测试数据和计数器使得测试数据不重复

来看下计数器的定义:允许用户在线程组中任何位置创建引用的计数器。 计数器配置允许用户配置起始点,最大值和增量。 计数器将从开始循环到最大,然后从开始重新开始,继续进行,直到测试结束。

我们以函数助手参数化为实例(CSV Data Set Config同理)来实战一下

①设置计数器

a. Staring value:开始值,比如设置为1

b. 递增(Increment) :递增值,比如设置为2,那么从1开始,下一个数就是3,是两个两个递增的

c. Maximum value: 最大值,比如设置10,就是涨到10就不涨了

d. 数字格式(Number format): 什么格式的,比如我写00,则是01,02,03一直到10,如果写的是000,则是001,002,003这种

e. 引用名称(Exported Variable Name):变量名,比如就叫num

②设置csv文件

③函数助手设置

④根据计数器和函数助手设置接口变量

⑤运行查看结果(此处实例中用了循环控制器,一个线程,但设置新增项目进度接口循环五次),查看结果

⑥计数器的定义中提到: 计数器将从开始循环到最大,然后从开始重新开始,继续进行,直到测试结束

这个是指,如果我循环的次数(或者是线程数)多于开始到最大的总数,那么会从开始的值继续执行,知道我们设置的循环次数(或者是线程数)执行完毕,例如设置开始数字1,递增是2,最大值是10,而我们设置的循环次数或者是线程数是 7,则num 分别为1,3,5,7,9,1

⑦与每个用户独立的跟踪计数器(Track counter independently for each user):若勾选这一项,则代表每个用户(线程)是独立计数的,我们可以设置线程数是2,循环次数是3,来看下效果

7.JDBC Request

要用这个JDBC Request,需要配置下数据库链接 添加(Add)-->配置与案件(Config Element) -->JDBC链接配置(JDBC Connection Configuration)

网站:https://www.soapui.org/jdbc/reference/jdbc-drivers/ 可以下载JDBC的Driver,还可以找到不同数据库的链接地址,不同的数据库,有不同的链接地址和数据库驱动

(1)配置

①下载数据库驱动

按照提示进行下载,下载解压后,将文件夹中的两个jar包中的一个,拷贝到Jmeter的lib目录下

为了方便大家下载,此处提供mysql driver的网盘下载地址:https://pan.baidu.com/s/1rSz0cEvAhAElPC9WPO44mw  密码:pxuv

②复制数据库连接地址(这个也可以直接问开发要)

复制链接地址到 Database URL里,并在图中红框之后维护你的数据库的地址和端口号,后面的用户名和密码可以删除,因为Jmeter后面可以直接维护

③JDBC Driver class(mysql的固定写法是 com.mysql.jdbc.Driver)

完成数据库链接配置,并设置Variable Name for created pool(为了在JDBC Request中被引用)

(2)Jmeter中数据库操作

①Query Type :Select Statement (查询)

察看结果树:

来验证下,看看数据库里数据是否和查出来的一致

②Query Type :Update Statement (更新)

大家可以在尝试下delete

数据已被删除

③按照以上的测试配置,仅能执行一条sql语句,若想执行多条,需在 JDBC Connection Configuration中设置的Database URL中设置allowMultiQueries=true

5种Query Type 总结(以是否设置allowMultiQueries=true来分类):

Query Type

已设置(基本前提为语句正确)

未设置

Select Statement

Prepared Select Statement

不管填写1条还是多条,仅执行第1条语句,且第1条语句必须为select,否则会报错

仅能填写1条sql语句,且必须为select语句,否则会报错

Update Statement

Prepared Update Statement

不管设置1条还是多条,只要第一条为非select语句,则能正确运行,且会忽略所有select语句,若第一条是select语句,则会报错

仅能填写1条sql语句,且必须为非select语句,否则会报错

Callable Statement

可执行多条sql语句

仅能填写一条sql语句,否则会报错

④若在测试过程中,执行成功,却未得到对应的结果,可能是因为编码的问题,jmeter识别不了,那么此时,我们需要在 JDBC Connection Configuration的Database URL加上useUnicode=true&characterEncoding=utf8来对他进行编码

⑤接下来我们来看下Select Statement与Prepared Select Statement,Update Statement与Prepared Update Statement的区别

Select Statement:静态select语句

Update Statement: 静态DML(insert、update、delete)

Prepared Select Statement:动态select语句,参数化select语句

Prepared Update Statement:动态DML语句,参数化DML语句

Prepared Select Statement和Prepared Update Statement是可以防sql注入的

 

一般我们测试insert的时候会使用Prepared Update Statement而不是Update Statement

上一次安全培训的时候,有提到关于防止sql注入的问题,一个很有效的方式,就是采用预编译的方式组装sql, "?"就是占位符,我们温习下:

【预编译占位符为什么能防止sql注入】

a. 使用占位符:select * from table where name = ?

b. 那么你传进来的参数 sql会解析成 select * from table where name = '张三 or  1=1'

这个就不会有注入的风险了,sql会把传进来的是一个参数字符串,而不是语法

⑥JDBC Request本身也是可以将返回值取出给到定义好的变量

我们以select查询返回后的结果为例

运行后的结果

调试取样器查看取值情况

(3)JDBC Request 结合后置处理器-正则表达式提取器

通过JDBC Request获取数据库的数据,用正则表达式提取器进行提取后,给到其他接口使用

假设此处我们需要取出这边的登录账号 admin

添加调试取样器,我们来查看结果(调试取样器直接用${username}命名),可以看到是可以正确取到值的

注意:正则表达式中 空白用\s ,换行用 \n

8.函数助手

在第6节中,我们有简单讲到过一个函数助手,用CSVRead实现数据驱动,不管是使用什么函数,使用方法都是类似的,就是我们选择某个函数,并且按要求为其参数设定值,不同的函数要求的参数也不同,然后生成函数字符串,供脚本使用,后续时间充裕会将常用的Jmeter函数做下总结,这边我们就先拿__Random函数取了例子,主要演示下函数生成和使用

__Random函数:返回指定最大值和最小值之间的随机数

来来来~~~一起打怪升级吧

公众号

 

个人微信 --> 添加请注明来意 

posted @ 2022-03-02 17:33  会花钱的水晶晶  阅读(118)  评论(0编辑  收藏  举报