之前试过将输入数据参数化从cvs读入,然后想到如果改为从数据库读数据呢,或者是连接数据库进行压力测试应该怎么做呢。
一般做服务器压力测试时JMeter是直接在服务器下运行,避免网络环境对响应时间测试结果的影响。考虑到我不能在服务器下乱来。。。所以在自己电脑上弄个数据库来试下。这里使用SQLite,轻量级,比较简单。
一、SQLite3创建数据库,创建表,及测试中需要用到的数据
mac下是自带的,windows下应该也是,在终端输入sqlite3可以查看。输入sqlite3+数据库名字可直接进入该数据库。接着创建表,及等下需要用到的四组数据。
用select from查看数据时,发现这样显示看的超级不方便。可以通过以下红框中命令来更改下查看格式。
二、JMeter连接sqlite
首先要下载sqlite jdbc(Java Data Base Connectivity,java数据库连接)jar包。网上好多jmeter连接数据库的都是用的mysql....这个sqlite的最后终于被我找到了....链接如下:https://bitbucket.org/xerial/sqlite-jdbc/downloads/
下载后放到jmeter/lib目录下就可以了。JMeter中测试计划添加jar包路径(应该是,如果放到jmeter/lib目录下这里就不用添加了~)。
添加JDBC Connection Configuration,对数据库连接进行设置。Database URL那里相当于告诉jmeter去连接哪个数据库。
这里用sqlite创建的数据库是没有username和password的,所以留空。如果用mysql一般会设置一下,填入就好了。
然后添加JDBC Request。Variable Name与JDBC Connection Configuration中保持一致就好。
写下向数据库请求数据的语句:select * from MEASURE。这里MEASURE是之前在数据库test.db下创建的表名。
在Result variable name中设置,数据库返回结果保存在这个对象中。
三、获取数据库返回结果并作为下一个接口的请求参数
这里用到后置处理器BeanShell,代码将数据保存在参数中,见图。
measureObj为上个图中保存数据库数据的对象。
接口中请求参数填写时使用${}格式。
可以看到JDBC请求的返回数据的第一行数据如下。
再看下测试接口请求中的入参。数据一致!说明成功的将数据库获取的数据参数化,并在下一个接口的入参中用到。
四、遗留疑难杂症
这里只将数据库的一行数据参数化了。但是数据库里有4行.......还没弄明白怎么在每一次循环(即每一次测试该业务接口)时,用到数据库获取的不同行的数据......先把这个问题在这MARK下=。=
结束~
加油~