接口测试相关知识(十)用ant生成测试报告和JMeter的组件介绍
1、利用ant生成测试报告
1.1什么是Ant?
首先,Ant翻译过来是蚂蚁的意思,在我们做接口测试的时候,是可以用来做JMeter接口测试生成测试报告的工具,(原理有点类似于postman生成测试报告用newman生成测试报告类型)
Ant是隶属于Apache旗下的一个最优秀的java构建工具,其任务是驱动构建文件中描述为相互依赖的目标和扩展点的进程。
Ant的主要已知用途是构建java应用程序。Ant提供了许多内置任务,允许编译,组装,测试
和运行java应用程序。Ant还可以有效的构建于非java应用程序,例如C或C++应用程序
更多的说,Ant可以用于实验任何类型的过程,这些过程可以用目标和任务来描述。
用最直白的话来说就是,就是JMeter整合ant可以生成HTM;的测试报告
1.1ant的下载和安装
下载地址:https://ant.apache.org/bindownload.cgi
点击下载地址 即可 解压在相关目录就可以 如下图所示
1.2Ant的环境搭建
因为ant是一个java库的命令行工具,所以我们在运用ant的时候是需要进行在本地设置环境变量的
如下图所示
点击环境变量
在系统变量中选择Path点击编辑
找到ant下的bin目录 添加到环境变量中,点击确定
1.3验证Ant环境是否正确搭建
在cmd控制台当中 输入ant
出现上述提示 即为ant环境已经搭建成功
1.4关于build.xml
我们需要把build.xml放到指定的目录内 如下图所示
1.5关于JMeter的目录结构
我们需要在JMeter文件里创建一个新的文件夹 命名为tests 如下图所示
tests 文件夹:是用来存放测试中所有的资料
在tests文件夹内 创建两个新的文件夹 命名为report和script
report文件夹:存放测试报告,里面再创建html和jtl
script文件夹:是用来存放测试的脚本
在report文件夹内创建两个新的文件夹 分别为html和jtl文件夹 如下图所示
这个时候我们就把所有文件给创建成功
在我们以后的工作中 把JMeter保存的测试文件都放到script文件夹内即可 如图所示
1.6自动发送邮件插件的安装
我们需要用到三个插件 分别为
activation.jar
commons-email-1.2.jar
mail.jar
将三个文件放在ant的lib目录下即可
因为我们创建了新的目录结构 所以我们前面的build.xml文件需要调整
将build.xml文件放在JMeter文件的tests文件夹内 如下图所示
1.7关于Ant生成测试报告前的前置条件
我们需要改一下配置文件 才可以让Ant工具正常的运行
我们先找到JMeter的bin目录下的jmeter.properties文件 如下图所示
以记事本的方式打开,
Ctrl+F搜索jmeter.save.saveservice.output_format=csv关键字
将前面的注释解除 后面改成xml的数据格式 如下图所示
1.7.1 关于build.xml的内部详解 需要更改的配置
最后一步
这样我们所有的配置都已经更改好了
可以进行接下来的生成测试报告工作了
1.8利用Ant生成HTML测试报告
在cmd控制台当中输入ant 即可生成测试报告,如下图所示
在生成完成后 我们可以看到在JMeter文件夹内的test的report的html文件夹内 生成了一份测试报告 如下图所示
打开后如下图所示
这样我们就完成了ant生成HTML测试报告了
在我们和上级领导汇报测试报告的时候要写的数据如下
总测试用例个数 | 18 |
成功率 | 90% |
失败率 | 10% |
失败原因 | 自己代码写的不对,导致测试测试失败 |
覆盖的场景 | 登录,产品管理,地址管理 |
结论 |
本次自动化测试完整的覆盖了登录业务,产品管理业务,地址管理业务,所有的测试场景测试通过 |
在配上生成的HTML测试图就可以了
2、JMeter的组件介绍
在我们了解JMeter的组件前我们先要了解什么事JMeter执行原理是什么
JMeter是通过线程组来驱动多个(也可以理解成LR工具里面的虚拟用户),运行测试脚本目标服务器发起大量的网络请求,在每个客户端上可以运行多个线程组,也就是说一个测试计划里面可以包含N个线程组
测试计划:
在JMeter的测试工具中,把测试计划可以理解成为是一个工程的目录,也就是说每一个脚本都可以说是一个测试计划,在里面包含了很多的线程组来执行,测试计划也是JMeter脚本的根节点
2.1用户自定义变量
2.1.1用户自定义变量介绍
用户自定义变量组件其实用到的也是数据驱动的思想,即为把公共的单独分离出来,定义成变量,在后面直接调用,
举例说明:例如登录的用户名和密码
2.1.2我们怎么去添加该组件?
在我们创建的线程组内 右键添加 配置原件里面的用户定义变量
2.1.3我们应该怎么用该组件
创建好后 放在线程组的下一个层级内 ,将需要的值写入到该组件内
这样在其他测试用例想要调用该变量的话直接使用${被调用的名称}即可,如下图所示
2.2延时等待组件
2.2.1延时等待组件介绍
因本人在学接口测试前 学习过python的ui自动化测试
在python自动化测试中有time库 其中time.sleep()即为固定等待
那么在JMeter中延时等待组件的意思一样 意为每自动进行一个测试用例 都会固定等待XXms
2.2.2我们怎么添加该组件?
在线程组处右键,选择添加定时器当中的固定定时器
固定定时器的延迟为毫秒(ms) 1秒(s)=1000毫秒(ms)
这样在我们运行自动化测试的时候,就会每个测试用例之间等待一秒,防止接口因运行太快导致错误
2.3正则表达式提取器
2.3.1正则表达式提取器介绍
在我们要处理动态的参数的时候 我们有两种处理方式 分别为
1、json提取器(直接获取动态参数)
2、正则表达式提取器(本次介绍的方法)
在处理正则表达式提取时候 响应数据可以放到以下网址 可以更好的看到层级关系
测试地址:https://tool.oschina.net/regex
2.3.2我们怎么添加该组件?
对请求右键选择添加后置处理器的正则表达式提取器
2.3.3正则表达式提取器内部参数含义
引用名称:即为我们定义的变量
正则表达式:里面需要写入的是 我们要获取的动态id 其中"token":"(.*?)"
.*代表的是全部值 加个?代表的是在响应数据里面 匹配到第一个token即为停止
模板:用$$引用,如果在正则表达式中有多个正则表达式,则可以是$2$,等 表示解析第几个值给user_id.
举例:$1$表示匹配到第一个值
匹配数字:0代表随机取值,-1代表所有值,此时提取结果是一个数组,其余正整数代表第几个匹配的内容提取出来 。
缺省值:正则匹配失败时取得值
2.4用户参数组件
2.4.1用户参数组件介绍
用户参数组件其实运用的原理就是参数化的思想,那么什么是参数化呢?
参数化可以简单的理解为:我们一个测试点,需要多次操作,并且每次操作的数据都是不一样的测试步骤一致,但是测试数据每次不一样
即为相同的测试步骤 每次输入的值不一样 我们通过参数化来解决
2.4.2我们该怎么添加?
对线程组右键 选择添加前置处理器里面的用户参数即可
2.4.3用户参数组件的参数说明
我们可以看到 用户参数组件里有名称和用户
在名称下面写入变量 在其他地方需要调用的时候输入${}即可 用户那里写我们要输入的值
例如我们这里需要输入手机号进行登录 重复两次 用不同的手机号 即为
用户1:1XXXXXXXXXXX
用户2:1XXXXXXXXXXX
我们需要注意的是 因为我们输入了两个参数 所以我们在执行测试用例的时候
需要在线程组里的参数进行修改 如下图所示
2.5CSV数据文件设置组件
2.5.1CSV数据文件设置组件介绍
CSV数据文件设置组件 也用到的是数据驱动的思想 将同样的步骤 所需要输入不同的值 将这些值分离出来
2.5.2我们该怎么添加该组件?
对线程组右键选择配置原件里的CSV Data Set Config
2.5.3CSV数据文件设置组件的参数介绍
文件名:即为我们要导入的数据文件路径
我们这里以csv和txt的文件来进行模拟操作
1XXXXXXXXXX | , | 123456498 | ||
1XXXXXXXXXX | , | 12345698915 | ||
记事本的方式如上文本进行写入
文件编码:UTF-8 中文编码
变量名称(西文逗号间隔),指的是我们要对文件内的值进行赋值变量 这里赋值给的是username和password 所以需要书写username,password
分隔符:,指的是用什么将变量分开
2.6线程组组件
2.6.1线程组组件的介绍
线程组可以说是JMeter最重要的核心的部分 没有线程组 就无法形成一个真正的测试用例 它是JMeter的灵魂
在一个测试计划(最高层级)里面可以新增线程组,线程组可以把它理解成为:模拟虚拟用户的发起点,在线程组里面可以设置线程组,运行时间以及运行次数
2.6.2我们怎么添加该组件?
在测试计划右键 选择添加线程(用户)里面的线程组
2.6.3线程组组件的参数介绍
继续:
如果有一个请求错误,其他的请求会继续,不会因为有一个错误请求的导致其他请求终止。
启动下一个进程循环:
如果请求出现问题,同一脚本的其他请求就都不在执行,直接执行下一个进程的信息,如登录下一个请求是查看个人主页,因为查看个人主页跟登录有依赖关系,则下个接口查看个人主页也不会被执行
停止线程:
如果请求失败,就会停止当前线程执行,不再继续执行,如果线程数很多的,那么导致的结果是停止的线程会很多,处于真正运行的线程会很少,最后导致服务器的负载不够,一般不建议勾选该选项
停止测试:
如果请求失败,那么会停止所有的线程执行,也可以理解为停止整个测试
立即停止测试:
如果请求失败,立即停止整个测试场景的执行
线程属性:
线程数
一个线程可以裂解为对应一个模拟用户,所以线程数越多,那么也就认为可以模拟的用户数越多。
Ramp-Up时间(秒):
该属性指的是所有线程从启动到开始运行的时间间隔,单位是秒,也就是说所有线程在多场时间内开始,如线程数设置50,设置的秒数为5秒 则计算公式为
每秒执行线程=线程数/Ramp-Up 具体为: 如果设置的线程数为50,Ram-Up的时间为10 那么也就是说开始执行后,每秒会启动5个线程 如果Ramp-Up设置为0,那么开始执行后,50个线程会立刻启动。
循环次数:
循环次数可以理解为,请求的重复次数,如果选择永远,那么请求将一直进行,不建议这样操作
延迟创建线程直到需要:
如50个线程数,RampUp时间是10秒,执行后线程是全部就绪的,那么就是每隔一秒启动5个线程数
调度器:
思维调度器可以理解为设置何时开始运行。
持续时间:
测试计划持续多长时间
启动延迟:
从当前时间延迟多长时间开始运行测试,也就是说点击执行后,仅仅是做初始化的场景,不会执行测试,等待延迟到达后开始运行测试,执行的时间为持续时间设置的时间
2.7JMeter监听器当中的聚合报告组件
2.7.1聚合报告组件的介绍
聚合报告是以表格的形式来显示取样器的结果信息,如果不同的取样器拥有相同的名字,那么在聚合报告会显示在一行里面,那么一般来说,聚合报告都是根据取样器来显示每个取样器的执行结果信息。
2.7.2我们该怎么添加该组件?
2.7.3聚合报告组件的参数介绍
聚合报告的信息具体如下:
2.8查看结果树组件
2.8.1查看结果树组件介绍
结果树能够很清晰的显示每个取样器执行的结果,以及每个取样器的网络请求信息,
可以理解成 查看测试结果
2.8.2我们怎么添加该组件?
对测试计划右键 选择添加监听器里的查看结果树
2.8.3查看结果树组件的参数介绍
在红框处可以看到取样器结果 请求数据以及响应数据
包括协议状态码 等等所有数据
2.9HTTP信息头管理器组件
2.9.1HTTP信息头管理器组件介绍
每个HTTP的请求都是需要请求头信息的,那么把可以请求头的信息添加到HTTP信息头管理器,然后需要把它放在取样器的前面
2.9.2我们怎么添加该组件?
在线程组处右键选择添加配置元件当中的HTTP信息头管理器
2.9.3HTTP信息头管理器组件的参数介绍
在HTTP信息头管理器组件当中 需要填写的东西往往是根据产品后端给的代码进行添加
如web产品 我们可以根据浏览器右键检查当中的network 查询到请求头 如下图所示
2.10HTTP信息头管理器组件
2.10.1HTTP信息头管理器组件介绍
在系统登录成功后需要访问系统中的其他网络请求,但是需要记住用户登录成功后的sessionID的信息,那么使用HTTP Cookie管理器就可以自动记录下这些信息
2.10.2我们怎么添加该组件?
对线程组右键 选择配置原件当中的Cookie管理器
2.10.3HTTP Cookie管理器组件的参数介绍
由于HTTP Cookie管理器组件不需要在内部写入任何东西 需放在 线程组的下一个层级
那么我们在进行登录等相关操作时候 就会自动记录cookie的数据
2.11用户定义的变量组件
2.11.1用户定义的变量组件介绍
在测试中,如果某些请求参数存在变化,比如是用户名和密码,那么久可以单独的独立出来,用户定义的变量可以很轻松的来解决这部分问题。
2.12.2我们怎么添加该组件?
在线程组右键选择添加配置元件当中的用户定义变量
2.12.3用户定义的变量参数含义
在其他请求当中如果需要调用的话需要用到${}来调用 用户定义的变量参数值
2.13HTTP请求默认值组件
2.13.1HTTP请求默认值组件含义
每个取样器发送网络请求的时候都是需要IP地址等信息,但是使用HTTP请求默认值可以很轻松地把请求的地址独立出来
2.13.2我们怎么添加该组件?
在线程组处右键添加配置元件的HTTP请求默认值
2.13.3HTTP请求默认值的参数含义
其实该组件用到的也是数据驱动的思想 将IP分离到HTTP请求默认值 这样在执行测试用例时候前面会默认添加IP
2.14简单控制器组件
2.14.1简单控制器组件的介绍
简单控制器是主要控制JMeter的执行顺序,它的存在使整体的测试的灵活度更高,比如接口A执行完成后得到的结果信息,经过逻辑控制器判断之后,再执行接口B或者是接口C 一般性的而言,简单控制器使用的最多,但是也看具体的场景进行设置
2.14.2我们怎么添加该插件?
在线程组处右键添加逻辑控制器当中的简单控制器
2.14.3简单控制器组件的使用方法
他可以用在 将测试场景一一分离开 具体方式如下
2.15三种断言组件
2.15.1三种断言组件的介绍
在做JMeter的接口测试时候 我们需要用到的是组件分别为
1、JSON/YAML断言
2、JSON断言
3、响应断言
2.15.2三个断言组件的区别
1、JSON/YAML断言插件属于是第三方的组件 是需要我们额外下载的 具体下载方式可参照 接口测试相关知识(九)里面有介绍 是可以处理JSON数据类型和 YAML数据类型的数据
2、JSON断言是JMeter源生的断言组件 只可以处理JSON数据类型
3、响应断言也是JMeter源生的断言组件 可以理解成模糊匹配关键字 应用的场景
2.16定时器组件
2.16.1定时器组件的介绍
定时器主要用来测试计划执行的过程中,定时器用来缓减线程运行,比如可以的等待三秒后再执行下一个请求的信息
2.16.2我们怎么安装该组件?
对线程组右键添加定时器里的固定定时器
2.16.3定时器组件的参数含义
因为固定定时器需要延迟的时间为ms 1S=1000MS 按照该方法设置 则每测试一个用例会固定等待1秒