什么是数据驱动?
从数据文件中读取测试数据,驱动测试过程的一种测试方法。数据驱动可以理解为更高级的参数化。
特点:测试数据与测试代码分离;数据控制过程
好处:降低开发和维护成本,减少代码量,便于用力修改和维护
Jmeter数据驱动实战
环境
我在本地搭建了数据库【如果不会可以留言,我再出搭数据库的帖子】
新建了两个表
create table movies(id integer primary key, title text, director text, year integer, Length_minutes);
create table boxoffice(movie_id integer primary, rating integer, domestic_sale, international_sales);
然后在jmeter建立数据库的连接
可以看到,我在连接数据库的url上添加了
?useUnicode=true&characterEncoding=utf8
这么一句【myDatabase是我的数据库名】不加这句的话会报编码“255”错误。
然后添加JDBC Request,对movies表进行查询
执行可以看到结果树中输出了数据库查询到的数据
我们做如下需求:如果year>=2016,就说它是新电影,否则就判断为老电影。
分析
这里有多条数据,必然要用到循环控制器
有判断,要加如果控制器
循环的次数就是调试取样器里的rows_#
所以循环控制器里循环次数就写${rows_#}
还要加判断,即如果控制器,即:如果year>=2016,则执行,也就是说我们要先把每一行的year值取出来
所以我们需要加个BeanShell提取器
二获取列名那里不能写死,第一次循环取第0行,第二次循环取第一行,以此类推。
我们加一个计数器,来解决这个问题
然后就可以编辑那个BeanShell脚本了
vars.put("year_loop", vars.getObject("res").get(${count}-1).get("year").toString());
注意:1、js脚本获取数据从0开始,所以要减1;2、结尾必须加toString(),因为这里只能处理字符串类型的变量。
现在就可以写如果控制器了
注意:下面那两个选项都不能勾上,一旦勾上就执行不出结果。
然后我们在控制台输出
执行即可看到控制台输出。
整个过程目录结构
------------------
当然这只是一种办法,还有一种办法就是查询数据库的时候不查全部,只查year这个字段
select year from movies;
这样就不需要获取year的值那个BeanShell脚本来获取了,只需要修改if控制器,但是现在"如果"里判断还是需要一个变量,我们再来看一下调试取样器获得的数据库返回
分析一下就知道,"如果"控制器只要写
把想连接那个写进去点生成,生成了Missing open brace for subscript{count},)},把它放到如果控制器判断里即可
结构目录
执行后就看到
而且在控制台输出了3个
当然除了读数据库数据,数据驱动还可以写Excel读,那就不需要循环控制器了,而且把线程加到应用有线程数。相较而言,多线程执行速度会更快,因为循环控制器,说白了就是for循环,数据是一条一条的执行,而多线程则一次发多个请求。
建议大家如果没有经验可以自己操作一下,我在操作的过程中其实遇到很多问题,其实解决问题的过程就是学习的过程。
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!