本场交流内容大纲:
1.JMeter介绍及安装配置
2.实战脚本编写
3.脚本增强-参数化
4.脚本增强-关联
5.脚本增强-断言
6.脚本增强-思考时间、集合点
7.html报告生成
8.JMeter操作数据库
9.插件使用
JMeter是一款基于Java开发的、开源的跨平台测试工具,使用它可以做接口测试,可以做性能测试,甚至数据库测试,虽然轻量级但功能强大,可以说是麻雀虽小,五脏俱全,对于测试人员来说,甚至不用编码即可完成一些常规测试,对于一些扩展功能,官方提供了插件,若还不能满足我们的需求,我们甚至可以自己去编码写插件集成进去,这样一款工具,对于测试人员,可以说是一款利器。
下面我们一一来看:
Jmeter的安装其实很简单,只需配置好jdk环境变量,然后去官网下载最新版本,解压即可使用,点击jmeterbinjmeter.bat即可运行jmeter,真正的开箱即用。下载地址:请点击这里,另附上jdk8下载地址。
1.脚本实战
Jmeter的组件已经把一些底层的东西做了封装,这使得我们在一部分基础场景下,不需要编码即可完成测试。下面已一个简单的具体实例来完成脚本的编写。
如果有接口文档我们可参考接口文档编写脚本,若无接口文档,我们可通过抓包来写,
如图一:登录接口接口文档
抓包图如下:图二
图 二
通过接口文档或抓包,我们可以掌握以下信息:
Host、接口地址、请求方法、参数字段、header
我们写成脚本,如下图:图三、图四、图五
图 三
图 四
图 五
运行结果如图六:
图 六
脚本写完了,真正的工作时,我们是需要脚本增强的,下面我们通过几个方法来实现。
2.参数化
在实际的测试过程中会发现,就登录来说,我们需要大量账户来进行测试,这时我们总不能把脚本复制百遍千遍,你会发现,脚本逻辑是一样的,只是用户名密码变了。所以我们可以进行参数化。
说到参数化,有些有基础的同学第一反应可能是csv,没错,但这只是其中的一个,其实参数化方式有很多,但总结起来,无非是csv读取,数据库读取,程序生成,还有一个特殊的是关联,关联其实是一种特殊的参数化。
Csv读取比较常用比较简单,适合预先把数据存储起来的时候使用,那数据库读取其实和csv一样,只不过,读取的数据源改为了数据库而已,读取前需要先配置jdbc连接。
至于程序生成就有很多了,比如,订单时间,我们是无法事先生成保存的,只有当订单生成时,才会读取当前服务时间,然后插入,在jmeter中,已经预置了此函数,选项-函数助手对话框中的__time,注意是两个下划线。可生成当前时间,默认是当前时间的时间戳,如图:
图 七
有的同学会想,我们公司订单时间是2019-01-01 0:01:30这种格式啊,没关系,支持时间格式化,想要什么样的格式,自己调就好了,如图:
图 八
函数助手还有很多函数,如生成随机字符串、随机日期、随机数字等等,在不同的场景下有不同的应用,甚至可以自己写一个,比如身份证号,jmeter本身肯定不支持,但是我们可以写一个方法,每次调用返回一个身份证号,这个相信很多做金融相关的小伙伴用到的还是很多的。
参数化的方式有很多,我们需要学会在不同的场景下,使用最适合的方式。
2.关联
关联说白了就是把上一个请求返回的数据保存下来,在后续的请求中使用此数据的一个过程。
说起关联,很多小伙伴就想到了正则表达式提取,图样图森破,jmeter已经不是以前的jmeter了,关联支持的方式多种多样,比如接口中,常用的数据格式是json,那么,当然用json提取器最合适了,效率更高,使用更简洁,下面以一个实例来看一下:
还是刚才的登录接口,登录后,请求个人中心接口,那么,服务端怎么知道是谁请求此接口呢,token
由图二或图六可以看出,登录接口返回了token,个人信息接口,在请求时需要带上此token,服务端方可识别是哪个用户在请求,所以在header中需要带上token,抓包截图为证:
图 九
那,脚本怎么写呢?
我们需要在登录接口返回值中提取token,
如图:
图 十
在个人信息接口请求时的header中带上提取的token即可,就这么简单!
如图:
图 十一
4.断言
很多同学,不加断言,运行脚本,查看结果树一片绿,很开心,觉得没问题
jmeter不加断言的情况下,只要请求发送出去,服务端返回了,且状态码不是4XX,5XX,它就认为是成功的,用张三的账号密码,登进系统,显示是李四的账号信息,jmeter也不会报错的,你认为靠谱么,说两个直白的例子:
导弹发射出去,就认为成功了,打到哪儿不管。。。
送快递,送到手里就算成功,不管快递物品对不对。。。
所以,不加断言,是万万不行的,我们需要一个确认的动作。
断言一般用的最多的是响应断言和json断言,在需要断言的请求上直接添加即可,像一般的接口测试,数据格式是json,一般都用json断言。
5.思考时间
还是以登录为例,我们人类需要输入用户名密码点击登录按钮等一系列操作,这期间至少需要几秒钟,而如果通过工具的话,那可能就是毫秒级了,为了使用工具也可以模拟人类的操作,就有了思考时间设置,在jmeter中,可以通过定时器去实现
6.集合点
像在一些秒杀、抢购等活动时,瞬间并发量会很大,这时怎么用jmeter去模拟呢,有人可能会说线程组啊,设置100个线程,但是,要知道,jmeter中线程是谁先起来谁先运行,是不会等着攒够100个再跑的,而我们要想实现模拟并发,就是要攒够100个,然后再同时发起请求,这时就用到了集合点,jmeter中集合点是通过定时器中的Synchronizing Timer来实现的。
7.操作数据库
jmeter连接数据库和java连接数据库是一样的,以mysql为例:
首先我们需要下载java连接mysql数据库的驱动mysql-connector-java-5.1.46-bin.jar放到jmeter/lib目录下,然后从配置元件里面添加JDBC Connection Configuration,进行主要的配置,需要注意的点已用红框圈选,如图:
图 十二
配置完成后,我们再在取样器中添加JDBC Request,在JDBC Request中写sql进行操作即可,如图:
图 十三
运行查看结果:
图 十四
8.生成HTML报告
Jmeter从3.0开始有了美观的html报告,命令行运行生成,
第一种,运行测试时生成
Jmeter –n –t test.jmx –l test.jtl –e –o ./repot
第二种,先运行测试生成结果文件,再生成报告
Jmeter –n –t test.jmx –l test.jtl
Jmeter –g test.jtl –o ./report
在最新的5.1.1版本中,提供了图形界面生成HTML报告的入口,菜单栏-选项-generate HTML report,如图十五
图 十五
10.插件使用
从4.0开始,提供了界面化的插件管理,再也不用去下载一堆jar包了,首先下载放在目录下,重启jmeter,在菜单栏-选项中就会多一个plugins manager选项,点击即可打开插件管理器,搜索勾选对应插件,点击右下角按钮即会自动下载安装插件,安装后重启jmeter即可。
图 十六
以上就是本次分享的全部内容,偏向于脚本的实战编写增强,使用jmeter,做性能和接口,在脚本编写上相差不多。
最后感谢51testing测试圈提供的平台,感谢各位小伙伴的加入观看,有任何意见建议欢迎交流谢谢。