demo1----------------jmeter自动化测试------------------基础
1.1jmeter 框架搭建
第一步:在测试计划里面创建线程组:创建结果如下:
第二步:创建用户自定义的变量:
第三步:创建HTTP请求
第四步:创建结果树
总体的框架搭建如下:
jmeter界面常见功能介绍:
1.2用例数据参数化
测试用例参数化的意义:
是为了更好的复用,提高测试的效率。参数化技术为了进行数据驱动。
参数化原理
类似于DDT ,进行数据驱动。数据用例:假设有10测试数据,每一条的数据都不一样,我们需要对数据进行参数化处理。
使用场景
登录接口不做参数化处理,会出现outline 的错误的字样。
登录接口:
注册接口(唯一标识的,例如身份证,手机号)
1.3 框架中功能的作用
用户自定义变量:
我们通过接口测试文档,不变的常量封装到一个全局变量里面。在jmeter 就是用户自定义变量。使用${变量名称}进行调用
HTTP请求默认值
将每次访问的不变的常量封装到默认值里里面,在后续的http 请求中不需要继续填写。
HTTP消息请求头信息
注意:如果不进行消息请求头配置,会出现状态码415 错误。需要配置请求头信息:查看消息请求头方式有三种:
第一种:直接查看接口文档
第二种: 基于抓包工具
第三种: 基于F12 开发者工具
下图基于抓包工具,个人习惯而已,jmeter 搭配着抓包工具使用
将请求头信息写到jmeter 中
执行然后查看监听器的结果树
1.4参数化实战
操作的流程:
1 确定需要进行参数化地数据 —name pwd
2 获取测试数据,数据源
3 将常量改变为变量
4 加密接口处理
我们需要基于csv 配置文件实现数据参数化。
导入csv/txt文件做好不要使用绝对路径,使用绝对路之后的项目不利于他人去使用
我们这里采用相对路径
注意:写相对路径最好写在bin 目录下去
在消息体数据中,将常量改为变量
注意:写文件时候,分隔符统一使用英文分割符,不然文件读不进来。
设置线程组数为2
结果树会出现两次结果
注意:在响应结果数据取不到,会出现密码错误。我们需要进行加密接口处理。
注意我们需要了解一些加密方法:
MD5系列方法
MD5 加盐/MD5 加双重盐
hash 加密/RSA 加密/AES加密
自定义加密的方法。项目自己自定义的加密方法。
处理方法:加密的规则/加密的文件 jar/js 两种文件
使用MD5 加密时候,直接使用函数助手。如果没有MD5 函数助手,请自行安装jmeter 插件。
1.5 MD5 安装插件:
1、首先访问以下地址,下载jmeter插件
https://jmeter-plugins.org/install/Install/
2、将下载的jar包放在,jmeter的lib/ext目录下(此处以我的路径为例)
//D:\apache-jmeter-5.0\lib\ext
3、重启jmeter
4、重启完成后点击选项此时多了一个插件
点击插件选择,Available Plugins中勾选Custom JMeter Functions,点击右下角Apply Changes and Restart JMeter(下载完毕窗口会自动重启jmeter)
安装好了MD5 插件之后:我们需要进行参数化。
对登录的name, 以及password参数化,常量改为变量,目的是为了数据驱表格中的数据。
查看结果树:可以实现多个用例的测试。
1.6 接口断言
1.6.1断言的目的:
通过断言来判断实际结果和预期结果是否一致。在jmeter中有一个元件叫断言,他的作用和loadrunner的检查点类似。
检查测试得到的响应数据是否符合预期,用以保证性能测试环境中的数据交互与预期结果是否一致。
注意:在request 返回层面增加了一层判断机制,因为request 成功了,并不是代表结果一定正确。
只有是预期结果和实际结果一致,才是通过的状态。在jmeter 里面有很多的断言操作。每种断言都有自己的含义。
1.6.2 断言的分类
BeanShell断言
BeanShell之前关于定时器的随笔中有介绍过,是一种松散类型的脚本语言(这点和JS类似),一种完全符合java语法的java脚本语言,并且又有自己的一些语法和方法;
BSF断言
BSF(Bean Scripting Framework)之前也介绍过,是一个支持在Java应用程序内调用脚本语言 (Script),并且支持脚本语言直接访问Java对象和方法的一个开源项目;
作用对象:针对sampler中的BSF sampler而使用的断言
比较断言(compare assertion)
这是一种比较特殊的断言元件,针对断言进行字符串替换时使用;
作用对象:需要替换的字符串
HTML断言
对响应类为XML类型的文件进行断言;
作用对象:针对sampler中的SOAP/XML-RPC Request而使用的断言
JSR223断言
JSR223即Java 规范请求,是指向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求;
作用对象:针对sampler中的JSR223 sampler而使用的断言
MD5Hex断言
MD5是一种消息摘要算法,用以提供消息的完整性保护;
作用对象:针对参数类型为MD5Hex加密的参数的断言
Size断言
用于判断返回内容的大小;
作用对象:返回信息,响应报文
SMIME断言
SMIME是一种多用途网际邮件扩充协议,相比于之前的SMAP邮件传输协议,增加了安全性,对邮件主题进行保护;
作用对象:针对采用了该种邮件传输协议的信息
XML概要断言
亦可以称为XML模型断言/XML数据类型断言;XML Schema 定义了两种主要的数据类型:①xml document schema 文档架构 ;② 文档架构xml-schema xml模式
作用对象:返回结果为XML概要断言的2中数据类型的消息
XML断言
XML(可扩展标记语言) 提供一种描述结构化数据的方法。与主要用于控制数据的显示和外观的 HTML 标记不同,XML 标记用于定义数据本身的结构和数据类型;
作用对象:判断返回结果是否和xml的格式即<></>成对出现
XPath断言
XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言。XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。
作用对象:针对返回信息为XPAth的数据类型进行断言
响应断言
判断返回内容中的内容
作用对象:响应报文中的所有对象
断言持续时间
用于判断服务器的响应时间
作用对象:服务器
json 断言
用于返回json格式
作用对象:响应报文中的所有json 格式对象
1.6.3响应断言的使用
在框架中加入响应断言:
加入响应断言之后,在运行结果树,不符合的预期结果的的测试用例不会通过
!](https://img-blog.csdnimg.cn/66d3440c7e724aaa90375b231a9edd9d.png)
json 断言
注意:一个事项:就是作用域的问题。只有写在全局变量里面的才可以被子菜单引用。
前置处理器和后置处理器操作。要理解前置处理器和后置处理器。
展示结果具体化带编号
采用函数助手count实现编号,采用参数化调用,实现具体化。
查看结果树,得到以下的结果。
1.7多接口关联操作
我们在已经存在的登录操作完成的情况下增加留言模块。获取留言的接口我们采用抓包的形式。基于fidddler 抓包
对于不同模块的操作问题,我们采用跨域线程组的操作。就需要充分理解作用域的问题。实现多接口的关联问题。
注意:在jmeter 里面现线程组是部分顺序的。如果想要对需要的线程组运行,对线程组进行设置。
添加了独立运行每个线程组,jmeter 才会运行每一个线程组。
我们在项目中留言模块,需要使用token值。这一个问题后面回解决,在解决这个问题之前,需要理解以下初始化环境。
由于在留言模块进行接口测试,需要完成的登录操作,我们需要在初始化环境中完成的登录的初始化操作。
我们需要进行初始化操作:setup 线程组:做测试之前需要的进行初始化环境配置。如何进行环境初始化。
环境初始化与数据清除
环境初始化流程:
第一步:在测试计划中添加setup线程组
第二步:配置预置的操作
多接口关联操作的概念:在一个线程组中,B请求需要使用A请求返回的数据。这个就是接口关联。
提取分类器:
json 提取器
正则表达式提取器
beanshell 提取器
获取token 值:
通过调试取样器获取调试结果,判断token 值是否取到。
有个小技巧:在不同作用域中,如何调用跨域进行变量获取?
基于上图,我们想要从留言模块线程组中获取setup线程组中的token值?流程步骤如下:
在登录初始化操作中加入beanshell 后置处理程序。
在beanshell 设置:
通过这个脚本程序将token 变成全局变量。就可以在不同的线程组跨域使用。
可以从函数助手中设置该脚本的程序。
在留言模块的线程组中添加请求头信息管理器
使用${__P(变量名,)} 去调用全局里面的token值,从而实现了token 值的调用。
查看结果树:token 值就会被拿到了。