接口测试之jmeter
1、接口测试技术栈
(1)HTTP的协议;
(2)执行:工具有PostMan、JMeter;
(3)代码:框架
(4)思想:MockServer
2、jmeter的安装
2.1jmeter的概述
jmeter是100%的java语言开发的,他是免费开源的软件,是非常优秀的性能测试工具和接口测试工具,支持主流协议的测试。
2.1.1jmeter的应用场景
(1)可以做功能测试;
(2)可以做接口测试;
eter的优点
(1)开源:JMeter是一款免费的开源软件,使用它你不需要支付任何费用,因为它的开源性,你也可以根据自己的需求,扩展他的功能;
(2)小巧:占用的资源非常非常少;
(3)功能强化,JMeter设计之初就是做一个简单的web性能测试工具,经过不断的更新拓展,现在可以完成数据库等方面的测试。
2.2jmeter的安装
2.2.1jmeter环境的搭建(java环境搭建)
(1)下载JDK在本地储存盘,并安装;
(2)鼠标右键点击此电脑,进入属性,找到高级系统设置;
(3)点击高级系统设置,找到环境变量,点击进入;
(4)点击系统变量的新建,变量名:JAVA_HOME;变量值:C:\Program Files\Java\jdk1.8.0_162(这里的变量值为JDK的安装路径,这里以你自己的安装路径为准);
(5)点击系统变量的新建,变量名:CLASSPATH;变量值为:.;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar;
(6)点击系统变量,找到变量名为path的,然后点击编辑新建变量值:%JAVA_HOME%\bin。
(7)验证环境,打开控制台,输入javac;再输入java -version,查看版本。
2.2.2、jmeter的下载
(1)下载地址:https://jmeter.apache.org/download_jmeter.cgi,选择选择apache-jmeter-5.4.3.zip进行下载,然后进入本地进行解压即可。
(2)打开本地解压的文件,进入到bin目录下,windows系统点击jmeter.bat;linux&mac系统点击jmeter.sh即可启动并进入jmeter。JMeter最新版本:5.4.3, 我们使用的版本是:5.4.1。
2.3jmeter的基本设置
2.3.1语言的设置
2.3.2字体的设置
2.3.3主题设置
3、jmeter的初始用
3.1保存测试文件
(1)测试计划可以理解为一个项目的顶级目录,可以为根目录,那么在一个测试计划的里面可以有很多的线程组。
3.2添加线程组
线程组可以理解为postman测试工具中的collection,那么在一个线程组里面可以存放很多的测试用例(test case)。如添加查询手机号码归属地的线程组。
3.3添加测试用例 (HTTP)
(1)填写请求参数时,填写方式如下:
post/put请求:请求参数的数据格式是xml/json数据格式时,请求参数在消息体数据中填写;当请求参数的数据格式是表单的数据格式时请求参数在参数中填写;jmeter中的请求文件上传在文件上传中操作。
(2)HTTP信息头管理器是填写请求头的地方,它在配置件的组件里面,一般将HTTP信息头管理器放在HTTP请求的前面。请求头添加方式如下:
(3)查看测试结果使用的是:监听器中的“查看结果树”;查看断言结果使用的是监听器中的“断言结果”,断言结果可以选择查看通过断言和不通过断言。
3.4添加简单控制器
简单控制器时Jmeter中最简单的一个控制器,具有分组的功能,可以将同一个请求的请求头、测试用例等放在同一组中,统一管理 ,可以防止各个测试用例之间的冲突,但它不具有逻辑控制的功能。
3.5添加断言
一个测试用例必须得有断言,断言可以理解为实际结果与期望结果的对比。
3.5.1jmeter-plugins-manager-1.6.jar的安装
(1)下载jmeter-plugins-manager-1.6.jar插件,将其放到apache-jmeter-5.4.1文件夹的lib目录里的ext目录下;
安装插件的步骤:
一、在选项中点击插件管理;
二、在available plugins中,搜索需要安装的插件,然后勾选;
三、点击Apply Changes and Restart JMeter;
四、安装成功后,JMeter就会重新启动,那么安装成功的插件就会显示在installed plugins。
(2)打开jmeter,点击选项进入plugins-manager,勾选所需的断言插件【JSON/YAML Plugins(deprecated)】,然后点击Apply changes and Restart JMeter即可。
3.5.2添加断言
3.6添加请求默认值(即postman的数据驱动)
HTTP请求默认值:我们在请求同一个项目的接口时,往往这些接口的部分参数是相同的。这时候,如果接口数量巨大,我们可以通过设置【HTTP请求默认值】来将这些相同的参数值抽取出来统
一设置,而在单个接口中就可以将这些配置空置,jmeter会在执行请求时去读取【HTTP请求默认值】中的参数值。它是在配置元件里面,它的主要价值是,我们可以把请求地址填写在HTTP请求
默认值里面,那么后面的接口就不需要填写请求地址了,它是全局的。
3.7内容编码
请求参数里面如果有中文,那么在“内容编码”里面填写:utf-8 ,具体如下:
3.8动态参数的处理案例
动态参数有两种处理方式:
(1)使用后置处理器中的正则表达式提取器;后置处理器指的是测试用例执行结束后,专门来处理执行后的事情。
(2)使用后置处理器中的JSON提取器。
如图书管理系统中bookID是变量,在postman中,调用变量的方法是:{{变量}};而在JMeter中,调用变量的方法时:${变量}。
4、postman与jmeter的区别
4.1使用方面
(1)公司不管是开发,测试,架构师,大家调试以及验证接口,都是使用的是postman。
4.2结果
(1)postman统计结果是按添加的断言个数为统计结果的,如一个case,10个断言,那么执行统计是10;
(2)jmeter是按测试用例的个数来统计结果的,如一个case,10个断言,那么执行统计是1。
4.3插件方面
(1)jmeter有很丰富的插件,可以对很多的协议进行测试,也可以和很多的主流监控软件进行合并;
(2)jmeter可以组织以及管理上千的测试用例。
4.4动态参数的处理方式
前提条件:假设有一个管理系统,可以增加修改删除查看,每次增加返回的ID都是不一样的,后面查看修改删除都会使用到这个ID
4.4.1PostMan描述
(1)我们先在postman的测试工具里面添加一个测试用例;
(2)测试用例添加成功后,发送请求,在响应数据中获取它的动态参数,获取的方式具体为:
A、在postman的tests里面首先通过var 变量=JSON.parse(responseBody)获取响应数据;
B、获取响应数据成功后,使用pm.environment.set来定义一个全局变量,变量的值就是获取到的动态参数;
3、在后续的查看修改删除中,使用到这个动态参数的ID,通过调用变量的方式,具体为:{{变量名称}}。
4.4.2JMeter工具的描述
(1)我们先在jmeter的测试工具里面加一个添加的测试用例;
(2)测试用例添加成功后,发送请求,在响应数据中获取它的动态参数,获取的方式具体为:
A、在该测试用例中,右键添加后置处理器中的JSON提取器或者是正则表达式提取器;
B、就以JSON提取器为例,定义一个变量,来获取动态参数的值;
(3)在后续的查看修改删除中,使用到这个动态参数的ID,通过调用变量的方式,具体为:${变量的值}。
5、jmeter中的session请求流程
在JMeter中,如果一个网站使用的是session来实现的,但是jmeter无法获取登录成功后的sessionid,那么也就导致登录后的请求,都会重定向到登录的页面,也就是说无法验证我是谁,其实在
jmeter中,有一个解决方案,具体方案是:配置元件中的HTTP Cookie管理器 :它内部会记住所有网络请求的cookie信息,并且会让所有的网络请求间的cookie共享。因此只需要在登录成功后,
添加一个HTTP Cookie管理器就可以了。