本场交流内容大纲:
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 测试圈提供的平台,感谢各位小伙伴的加入观看,有任何意见建议欢迎交流谢谢。