文章目录
- 1. 前置准备
- 2. 项目环境设置
- 3. 创建接口
- 3.1 创建接口API
- 3.2 测试接口API
- 3.3 设置接口case
- 4. 场景接口自动化
- 4.1 创建自动化场景
- 4.2 场景化操作说明
- 4.2.1 设置脚本场景变量
- 4.2.2 接口列表导入
- 4.2.3 场景导入
- 4.2.4 自定义请求
- 4.2.5 事务控制器
- 4.2.6 等待控制器
- 4.2.7 循环控制器
- 4.2.8 条件控制器
- 5. 操作说明
- 5.1 前置操作
- 5.2 后置操作
- 5.3 断言规则
- 6. 编写脚本
- 6.1 脚本规则
- 6.2 选择编译语言
- 6.3 代码模板
- 6.4 脚本代码细节说明
- 7. 设置测试计划
1. 前置准备
MeterSphere 是基于JMeter核心引擎实现的开源持续测试平台,全面兼容 JMeter、Selenium 等主流开源标准,能够进行接口测试、UI测试、性能测试等
MeterSphere官网:https://metersphere.io
下载及安装教程:https://metersphere.io/docs/v3.x/installation/offline_installation/#41
当前所使用的版本是V2.10
2. 项目环境设置
- 新建项目环境
先对测试环境进行配置
- 配置环境—HTTP配置
在HTTP配置中配置域名或IP,设置请求头的参数,比如Authorization对应的值设置为 ${Authorization},变量${Authorization}的结果是从登录脚本中获得,在登录后,从响应结果中提取token的值,赋值给Authorization变量
- 配置环境—通用配置
将登录的账号和密码设置为全局变量,其它的自动化脚本都可以引用这个账号和密码,灵活性更好。后续若要调整系统登录的账号和密码直接修改这两个变量即可
在登录接口的后置操作中,添加提取参数,选择JSONPath,提取响应中的token,设置变量名为Authorization
3. 创建接口
创建接口:接口创建完毕后,可以在接口自动化时直接引用或复制已经写好的API或CASE,提高编写自动化脚本的效率,更加方便的维护接口
3.1 创建接口API
- 创建模块
选择左侧接口测试,点击创建模块及子模块
- 创建接口
选择创建的模块,点击创建接口
- 接口信息配置
输入下面这些信息:名称、模块、状态、请求类型、请求URL、请求头、请求体等
选择运行环境,点击保存
3.2 测试接口API
选择test,测试创建的API,可以设置断言,对接口响应进行校验
- 控制台:如果设置的前置脚本或后置脚本,脚本中有打印的日志的操作(log.info()),就可以在控制台中查看打印内容
- 提取:如果在后置操作中设置提取参数,那么就可以在提取这里查看参数的值
- 请求内容:在这里可以查看一个完整的请求信息,包括请求类型、URL、请求提、身份信息等
3.3 设置接口case
接口中传参是有必填和选填的,参数组合的情况不同,导致接口适用的场景也不同,所以就可以设置给接口传入不同参数的case
设置接口case 的目的:后面在做场景接口自动化时,可以直接引用case,这样更方便
- 点击添加case
- 修改case参数
设置用例名称,设置请求体参数,加上后置操作,断言等,再点击执行
最后点击保存case
4. 场景接口自动化
4.1 创建自动化场景
- 创建场景模块和子模块
- 设置场景信息
a. 填写脚本名称、选择模块、选择状态、责任人、用例登记
b. 点击右下角的+号,有这几种操作选取
c. 选择接口列表导入
接口导入弹窗中,先选择要使用的是哪个模块的API或CASE,在列表中勾选对应CASE,点击复制/引用
复制:就是把这个API或CASE直接复制过来,复制过来后,就可以对API或CASE进行修改参数等其他操作,这里的修改操作不影响原本的API或CASE
引用:只能使用API或CASE,不能进行修改操作,这个引用操作的好处就是,在接口定义中修改这个API或CASE时,这里引用就会同步修改
d. 选择运行环境,点击保存
在这里选择前面配置的项目环境后,点击保存,点击调试,运行脚本
4.2 场景化操作说明
场景化脚本一般有这几种操作方式:接口列表导入、场景导入、自定义请求、场景断言、等待控制器、事务控制器、循环控制器、条件控制器、自定义脚本
4.2.1 设置脚本场景变量
设置场景变量,这个变量的作用域就是这个脚本
场景变量当前使用频率比较高的就是常量和随机数
设置变量后,如果要使用这个变量那么就可以这样${user_name}来使用,非常的方便
a. 常量:比如要随机生成一个用户名,那么可以设置变量名和值,这个值一般写的是函数去随机获取值
点击下面这个,里面有很多常用的函数,比如取随机数,获取当前时间等
b. 随机数:按照对应操作输入数即可
4.2.2 接口列表导入
接口列表导入其实就是把前面在接口定义中写的API或CASE在这里来选择使用
选择要导入的哪个API或CASE,然后选择复制或引用
选择CASE和复制,在脚本步骤中也会体现出来
4.2.3 场景导入
场景导入就是将其它场景化脚本拿过来使用,当前场景导入主要用来导入账号登录
如下例子,登录场景的导入选择的是引用,这样好处是:
后面比如要修改所有脚本中登录的账号和密码,那么不用一个一个去修改,只需要修改这一个登录的脚本即可,维护性更好
4.2.4 自定义请求
自定义请求这个一般用于临时只用一次的接口请求(如果是后面会多次用到,还是建议在接口定义中创建API或CASE),当前自定义请求使用频繁不高
填写这个请求的信息后点击保存即可
4.2.5 事务控制器
事务控制器适用的情况是,如果脚本中许多步骤都是为了某一步骤来服务的,那么这里就建议使用事务控制器,好处是脚本步骤条理更加清晰、并且维护性更好
如下例子,添加新用户这个脚本,主要就是为了验证添加3个不同的角色是否能添加成功,但是添加完成后为了保证系统数据不会冗余,就要删除添加的这个新用户,所以这里使用事务控制器,将对这个一个角色的账号操作放在一起,使结构更加清晰
4.2.6 等待控制器
等待控制器适用的情况是,某些接口不能频繁请求或执行该接口后等几秒才会有数据,所以需要使用等待控制器
如下例子,从列表中提取xxx_id,因为有时候数据会等待几秒才生成完毕,需要等待几秒才可以。(强制等待)
也可以使用循环控制器来实现软等待,就是设置比如每1秒请求一次,直到获取到数据才结束等待。
4.2.7 循环控制器
循环控制器适用的场景就是,在满足某些条件后,循环执行该步骤多少次
循环控制器有3种使用方式:次数循环、ForEach循环、While循环
次数循环就是固定的设置某个步骤执行多少次
While循环就是在满足某个条件后,循环执行多少次,但是注意设置超时时间
如下例子,While循环,必须满足${xx_num}值小于100时,才循环执行,直到${xxx_num}为100时,结束循环
4.2.8 条件控制器
条件控制器适用的情况是,某些步骤执行需要满足一些条件,所以这里用条件控制器来判断,保证条件满足后才执行该步骤,否则不执行
如下例子,查询数据列表,提取xxx_id,只有当xxx_id非空有值的时候,下面的下面的步骤才可以执行,否则就不执行
5. 操作说明
5.1 前置操作
前置操作:执行该接口之前要执行的操作
前置操作分为3种:前置脚本、前置SQL、等待控制器
前置操作主要使用前置脚本和等待控制器,后面会在目录6中详细介绍脚本编写
5.2 后置操作
后置操作:执行步骤后,需要执行的操作
后置操作分为3种:后置脚本、后置SQL、提取参数
后置脚本和前置脚本类似,这里说明一下提取参数
提取参数主要有这三种,当前接口响应主要是JSON格式的,所以一般选择JSONPath
要提取参数,需要先运行该步骤,也就是需要先有响应结果,才能提取值
5.3 断言规则
场景化脚本每一步执行完成后,需要添加断言,这是为了验证接口的响应结果是否为预期结果
脚本断言一般分为7种:文本、正则、JSONPath、Xpath、响应时间、脚本、文档结构校验
当前断言一般会用到:JSONPath、文本、脚本
JSONPath适用的情况是,只有当接口响应为JSON体是才可以
脚本是比较通用的,不论哪种情况都可以用写脚本来断言
文本就比较局限了,下面会进行说明
- JSONPath断言(使用频率最高)
只要接口响应是JSON格式,那么一般选JSONPath断言,
MS平台,提供了非常便捷的JSON断言功能,可以直接从响应结果中选取需要断言的内容
还有一种情况就是需要断言的值是变量,或者是从其他接口响应中提取出来的,那么下面就可以使用这种方式进行获取${xxxx}
这里的值${xxx},一般有这几种获取途径
(1)从场景变量中获取
(2)从当前接口的后置操作中获取
(3)从其他响应结果的后置操作(提取变量)中获取
(4)从整个项目的环境配置变量中获取
- 脚本断言(使用频率一般)
脚本断言虽相比与JSONPath方式断言较麻烦,但是好处是通用性更好,任何情况都可以用脚本断言完成
比如断言筛选24小时内的数据,但是直接用JSONPath就不能断言这种情况了,所以需要用脚本来实现时间的校验
- 文本断言(使用频率低)
文本断言主要分为3种:
确定断言内容后,选择断言条件,输入断言的值
比如断言接口响应的code等于200,或者断言请求头中是否包含application/octet-stream的情况
6. 编写脚本
编写脚本主要出现在这几种情况,前置操作脚本、后置操作脚本、断言规则脚本、场景化自定义脚本
脚本的编写方法是通用的,下面介绍如何快速编写脚本
6.1 脚本规则
只有断言脚本和其他脚本有所不同,这里多了变量名称和值,这是MS为了方便生成断言脚本提供的功能,输入变量名称选择等于或其他选项,输入预期值,然后MS就可以自动生成对应代码
变量名称和值不是必须要填写,也可以直接编写代码
6.2 选择编译语言
脚本的编译语言有4种:beanshell、python、groovy、javascript
使用python时,需要注意的是MS V2.10中内置的Python解释器是2.7的版本,而2.7版本是不支持中文的,所以在出现或使用中文的时候需要指定 utf-8"
6.3 代码模板
脚本中提供了一些比较会经常用到的代码模板
下面简单介绍几种使用频率比较高的模板,这个不区分编程语言,是通用的
- 在控制台打印信息:log.info(“xxx”)
- 设置环境参数
第一步提取token
第二步设置环境变量(全局):vars.put(${__metersphere_env_id}+“key”,“value”);
- 设置变量:vars.put(“variable_name”, “variable_value”)
下面看一下这个例子
提取用户id,在脚本中通过${id}方式使用提取的值,下面通过log.info(auth)在控制台打印获取的auth值,通过vars.put(“auth”, auth),设置变量auth,后面的所有步骤都可以提取到auth的值,通过${auth}使用上面设置的变量
- 插入自定义代码片段
设置经常会用到的代码模板,每次点击“插入自定义代码片段”使用设置的好的代码模板
a. 项目设置,点击自定义代码片段
b. 创建代码片段
c. 输入代码片段的名称,选择编程语言,编写脚本后保存
d. 在场景化中使用前面设置的代码片段模板,切换编程语言
注意这里只有切换到前面编写脚本使用到的编程语言后,这个代码片段中才会出现对应模板
e. 选取代码片段模板
6.4 脚本代码细节说明
下面这个代码片段中用if判断,当条件不满足时会执行if里面代码,需要注意的是,下面这个代码在断言脚本中必须出现,这个是断言脚本执行不通过时,会提示的信息,一般这三行代码中,我们只需要修改msg里面的内容即可
7. 设置测试计划
创建测试计划,将编写的所有场景化脚本都添加进去,可以一键执行,同时一键执行也可以暴露出脚本编写的一些问题,比如多个脚本之间是否会冲突导致执行失败,参数是否设置不合理等等
进入刚刚创建的计划,点击左侧场景用例,关联接口测试用例,设置完成后
点击一键执行,在报告中查看执行的结果