jmeter beanshell断言接口自动化实例
一、JMeter介绍
Apache JMeter是一款优秀的开源性能测试工具,在国外无论是在性能测试还是接口测试领域都有着非常高的使用率,但由于本身没有完善的中文文档以及典型开源工具特点(界面不美观)所以在国内应用并不广泛。先说说为什么要选择JMeter作为接口测试工具,选择它我主要基于以下几个原因:
一、成本低并且对编码要求相对不高。相较针对公司产品特性自主开发一套接口测试自动化框架,用JMeter实现接口测试无需具备非常专业的编码能力(对于像我这样的码渣而言是极好的),并且成本也要低的多,很适合现如今国内各大互联网公司流行的敏捷开发流程。
二、JMeter的扩展性非常好。虽然原生支持的协议有限,但我们可以根据需要制定自己的Sampler并向服务器发送请求。
三、JMeter是开源的。开源不仅意味着免费,更重要的是你可以通过开放的源码了解工具的所有行为,而不会像商业工具那样仅仅只能依靠有限的帮助手册以及网上教程。
二、安装与环境配置
1.首先去Jmeter官网(http://jmeter.apache.org/download_jmeter.cgi)下载安装包,最新版为4.0,本篇使用的是3.0
2.将apache-jmeter-3.0.zip解压至任意位置。
3.添加环境变量:
变量名 | 变量值 |
JMETER_HOME | 填入之前安装包解压的路径。例如E:\apache-jmeter-3.0 |
CLASSPATH | 在尾部添加 ;%JMETER_HOME%\lib\jorphan.jar;%JMETER_HOME%\lib/logkit-2.0.jar; |
Path | 在尾部添加 ;%JMETER_HOME%\bin; |
4.验证配置是否成功:打开CMD命令行窗口,输入jmeter -v,回车,出现下图则代表配置成功。
三、实例练习
【测试对象】TesterHome首页(https://testerhome.com/api/v3/topics.json)
【测试点】
1)断言首页精华帖数量是否大于4。
2)断言主题为"MTSC2018 早鸟票开售..."的帖子是否为精华帖。
【思路】
首先打开TesterHome首页地址利用json格式化工具分析一下返回的json数据,发现是否为精华帖是由excellent这个参数定义的,excellent等于1则是精华帖,等于0则不是,那么接下来要做的就很简单了。
1)获取首页返回的json
2)解析json并计算出excellent为1的帖子数量,以此得出精华帖总数。
3)解析json获取主题为"MTSC2018 早鸟票开售..."帖子对应的excellent值,以此判断是否为精华帖。
【下载json依赖包】
由于要解析json,那么就需要用到json相关的jar依赖包,下载地址: http://download.csdn.net/download/xiaoxiao_renhe/10246640 先下载下来,后面会详细说明如何使用。
【准备工作就绪,开工】
一、首先运行Jmeter(可以直接运行\apache-jmeter-3.0\bin下的jmeter.bat或在CMD直接输入jmeter然后回车)
二、在"测试计划"下依次添加线程组、Sampler-HTTP请求
三、在HTTP请求页面填写请求信息(本例中访问的地址无需设置请求参数),名称随意填写
四、接下来添加BeanShell PostProcessor,用来获取JSONArray对象并赋值给JMeter内置变量。但在此之前我们先添加依赖路径使得JMeter可以正常引用json依赖包,步骤如下:
1.在"...apache-jmeter-3.0\bin"目录下新建dependencies文件夹,并将刚才下载下来的json依赖包(json-20140107.jar)复制进去
2.打开"...apache-jmeter-3.0\bin"目录下的jmeter.properties配置文件,搜索"plugin_dependency_paths=",删除该行的注释并设置为
plugin_dependency_paths=../dependencies,最后保存;至此配置成功,在JMeter的BeanShell PostProcessor里就可以正常引用jar依赖包了。
3.不知道为什么有时候通过上述方法仍无法正常引用外部jar包,那么为了以防万一,强烈建议在测试计划中通过浏览将需要导入的jar包引入
五、右键点击"HTTP请求"->添加->后置处理器->BeanShell PostProcessor,并在脚本添加代码用以获取"topics"下JSONArray对象(请无视这粗鄙的代码结构。。)
import org.json.*;
//设置全局变量
static public int excellent_count = 0;
//获取最后一次请求返回数据 (JMeter内置方法)
String jsonResult = prev.getResponseDataAsString();
//分析:TestHome首页json数据结构为{"topics":[{...},{...}...]},外层JSONObject内层JSONArrary
//获取"topics"下JSONArray对象
JSONObject jsonObject = new JSONObject(jsonResult);
JSONArray jsonArray = jsonObject.getJSONArray("topics");
String string_jsonArray = jsonArray.toString();
vars.put("string_jsonArray",string_jsonArray);
六、添加断言Case01(对应第一条测试点),右键点击"HTTP请求"->添加->断言->BeanShell断言,然后填入以下脚本:从BeanShell PostProcessorh提供的内置变量中获取JSONArray对象,然后通过条件"excellent=1"得出精华帖总数,从而判断精华帖是否>4
import org.json.*;
//设置全局变量用于记录精华帖数量
static public int excellent_count = 0;
//从BeanShell PostProcessor获取jsonArray
var b = vars.get("string_jsonArray");
JSONArray jsonArray = new JSONArray(b);
//计算精华帖数量
for (int i = 0;i < jsonArray.length();i++) {
excellent_result = jsonArray.getJSONObject(i).getInt("excellent");
if (excellent_result == 1){
//循环遍历全部文章的excellent值,若为1则精华帖数量excellent_count+1
excellent_count = excellent_count + 1;
}
}
if (excellent_count >4){
//Failure为false代表断言成功,且结果树不显示该断言
Failure = false;
//日志输出结果
log.error("【Case01】执行成功,精华帖数量为" + excellent_count + "个。");
}else{
//Failure为true则代表断言失败
Failure = true;
//设置FailureMessage为断言失败信息
FailureMessage = "【Case01】执行失败,精华帖数量为" + excellent_count + "个。" ;
log.error("【Case01】执行失败,精华帖数量为" + excellent_count + "个。" );
}
七、添加断言Case02,并填入脚本:获取主题为"MTSC2018 早鸟票开售..."帖子对应的excellent参数值,以此来判断是否为精华帖
import org.json.*;
//设置全局变量excellent_result用于储存excellent值
static public int excellent_result;
//从BeanShell PostProcessor获取jsonArray
var b = vars.get("string_jsonArray");
JSONArray jsonArray = new JSONArray(b);
for (int i = 0;i < jsonArray.length();i++) {
//获取titile值
String title = jsonArray.getJSONObject(i).getString("title");
//当title="2018年TesterHome 全员感恩红包发放"时获取对应excellent值
if ( "MTSC2018 早鸟票开售啦_中国移动互联网测试开发大会".equals(title)){
excellent_result = jsonArray.getJSONObject(i).getInt("excellent");
break;
}else{
continue;
}
}
//校验结果excellent为0则断言成功,若为1则断言失败
if(excellent_result == 0){
Failure = false;
//日志输出结果
log.error("【Case02】执行成功,excellent值为" + excellent_result + ",此帖非精华帖。");
}else{
Failure = true;
FailureMessage = "【Case02】执行失败,excellent值为" +excellent_result ;
log.error("【Case02】执行失败,excellent值为" + excellent_result + ",此帖为精华帖。");
}
八、添加"察看结果树",用来察看断言执行结果。另外由于脚本中部分执行结果由log输出,因此需要将"选项"下的"Log Viewer"选项勾上,这样就可以察看日志信息了。(建议将jmeter.properties配置文件中的log_level.jmeter以及log_level.jmeter.junit分别设置为log_level.jmeter=ERROR、log_level.jmeter.junit=DEBUG,过滤不必要的日志信息)
九、最后保存文件并执行(点击操作栏中绿色三角箭头),查看执行结果
【结论】从右下方的日志窗口可以看到,由于精华帖数量为3因此断言Case01失败,而上方的察看结果树中这条断言也显示为红色代表失败,Case02执行成功,因此不会显示在察看结果树中。
四、总结
至此,一个简易的接口自动化测试框架便搭建完成,基本可以应付一些不太复杂的测试场景。
JMeter就好比一把瑞士军刀,麻雀虽小但五脏俱全,虽不及一些商业测试工具那样能够提供庞大的"套件",却也凭借着自己的灵活性几乎无所不能。
一、JMeter介绍
Apache JMeter是一款优秀的开源性能测试工具,在国外无论是在性能测试还是接口测试领域都有着非常高的使用率,但由于本身没有完善的中文文档以及典型开源工具特点(界面不美观)所以在国内应用并不广泛。先说说为什么要选择JMeter作为接口测试工具,选择它我主要基于以下几个原因:
一、成本低并且对编码要求相对不高。相较针对公司产品特性自主开发一套接口测试自动化框架,用JMeter实现接口测试无需具备非常专业的编码能力(对于像我这样的码渣而言是极好的),并且成本也要低的多,很适合现如今国内各大互联网公司流行的敏捷开发流程。
二、JMeter的扩展性非常好。虽然原生支持的协议有限,但我们可以根据需要制定自己的Sampler并向服务器发送请求。
三、JMeter是开源的。开源不仅意味着免费,更重要的是你可以通过开放的源码了解工具的所有行为,而不会像商业工具那样仅仅只能依靠有限的帮助手册以及网上教程。
二、安装与环境配置
1.首先去Jmeter官网(http://jmeter.apache.org/download_jmeter.cgi)下载安装包,最新版为4.0,本篇使用的是3.0
2.将apache-jmeter-3.0.zip解压至任意位置。
3.添加环境变量:
变量名 | 变量值 |
JMETER_HOME | 填入之前安装包解压的路径。例如E:\apache-jmeter-3.0 |
CLASSPATH | 在尾部添加 ;%JMETER_HOME%\lib\jorphan.jar;%JMETER_HOME%\lib/logkit-2.0.jar; |
Path | 在尾部添加 ;%JMETER_HOME%\bin; |
4.验证配置是否成功:打开CMD命令行窗口,输入jmeter -v,回车,出现下图则代表配置成功。
三、实例练习
【测试对象】TesterHome首页(https://testerhome.com/api/v3/topics.json)
【测试点】
1)断言首页精华帖数量是否大于4。
2)断言主题为"MTSC2018 早鸟票开售..."的帖子是否为精华帖。
【思路】
首先打开TesterHome首页地址利用json格式化工具分析一下返回的json数据,发现是否为精华帖是由excellent这个参数定义的,excellent等于1则是精华帖,等于0则不是,那么接下来要做的就很简单了。
1)获取首页返回的json
2)解析json并计算出excellent为1的帖子数量,以此得出精华帖总数。
3)解析json获取主题为"MTSC2018 早鸟票开售..."帖子对应的excellent值,以此判断是否为精华帖。
【下载json依赖包】
由于要解析json,那么就需要用到json相关的jar依赖包,下载地址: http://download.csdn.net/download/xiaoxiao_renhe/10246640 先下载下来,后面会详细说明如何使用。
【准备工作就绪,开工】
一、首先运行Jmeter(可以直接运行\apache-jmeter-3.0\bin下的jmeter.bat或在CMD直接输入jmeter然后回车)
二、在"测试计划"下依次添加线程组、Sampler-HTTP请求
三、在HTTP请求页面填写请求信息(本例中访问的地址无需设置请求参数),名称随意填写
四、接下来添加BeanShell PostProcessor,用来获取JSONArray对象并赋值给JMeter内置变量。但在此之前我们先添加依赖路径使得JMeter可以正常引用json依赖包,步骤如下:
1.在"...apache-jmeter-3.0\bin"目录下新建dependencies文件夹,并将刚才下载下来的json依赖包(json-20140107.jar)复制进去
2.打开"...apache-jmeter-3.0\bin"目录下的jmeter.properties配置文件,搜索"plugin_dependency_paths=",删除该行的注释并设置为plugin_dependency_paths=../dependencies,最后保存;至此配置成功,在JMeter的BeanShell PostProcessor里就可以正常引用jar依赖包了。
3.不知道为什么有时候通过上述方法仍无法正常引用外部jar包,那么为了以防万一,强烈建议在测试计划中通过浏览将需要导入的jar包引入
五、右键点击"HTTP请求"->添加->后置处理器->BeanShell PostProcessor,并在脚本添加代码用以获取"topics"下JSONArray对象(请无视这粗鄙的代码结构。。。)
import org.json.*;
//设置全局变量
static public int excellent_count = 0;
//获取最后一次请求返回数据 (JMeter内置方法)
String jsonResult = prev.getResponseDataAsString();
//分析:TestHome首页json数据结构为{"topics":[{...},{...}...]},外层JSONObject内层JSONArrary
//获取"topics"下JSONArray对象
JSONObject jsonObject = new JSONObject(jsonResult);
JSONArray jsonArray = jsonObject.getJSONArray("topics");
String string_jsonArray = jsonArray.toString();
vars.put("string_jsonArray",string_jsonArray);
六、添加断言Case01(对应第一条测试点),右键点击"HTTP请求"->添加->断言->BeanShell断言,然后填入以下脚本:从BeanShell PostProcessorh提供的内置变量中获取JSONArray对象,然后通过条件"excellent=1"得出精华帖总数,从而判断精华帖是否>4
import org.json.*;
//设置全局变量用于记录精华帖数量
static public int excellent_count = 0;
//从BeanShell PostProcessor获取jsonArray
var b = vars.get("string_jsonArray");
JSONArray jsonArray = new JSONArray(b);
//计算精华帖数量
for (int i = 0;i < jsonArray.length();i++) {
excellent_result = jsonArray.getJSONObject(i).getInt("excellent");
if (excellent_result == 1){
//循环遍历全部文章的excellent值,若为1则精华帖数量excellent_count+1
excellent_count = excellent_count + 1;
}
}
if (excellent_count >4){
//Failure为false代表断言成功,且结果树不显示该断言
Failure = false;
//日志输出结果
log.error("【Case01】执行成功,精华帖数量为" + excellent_count + "个。");
}else{
//Failure为true则代表断言失败
Failure = true;
//设置FailureMessage为断言失败信息
FailureMessage = "【Case01】执行失败,精华帖数量为" + excellent_count + "个。" ;
log.error("【Case01】执行失败,精华帖数量为" + excellent_count + "个。" );
}
七、添加断言Case02,并填入脚本:获取主题为"MTSC2018 早鸟票开售..."帖子对应的excellent参数值,以此来判断是否为精华帖
import org.json.*;
//设置全局变量excellent_result用于储存excellent值
static public int excellent_result;
//从BeanShell PostProcessor获取jsonArray
var b = vars.get("string_jsonArray");
JSONArray jsonArray = new JSONArray(b);
for (int i = 0;i < jsonArray.length();i++) {
//获取titile值
String title = jsonArray.getJSONObject(i).getString("title");
//当title="2018年TesterHome 全员感恩红包发放"时获取对应excellent值
if ( "MTSC2018 早鸟票开售啦_中国移动互联网测试开发大会".equals(title)){
excellent_result = jsonArray.getJSONObject(i).getInt("excellent");
break;
}else{
continue;
}
}
//校验结果excellent为0则断言成功,若为1则断言失败
if(excellent_result == 0){
Failure = false;
//日志输出结果
log.error("【Case02】执行成功,excellent值为" + excellent_result + ",此帖非精华帖。");
}else{
Failure = true;
FailureMessage = "【Case02】执行失败,excellent值为" +excellent_result ;
log.error("【Case02】执行失败,excellent值为" + excellent_result + ",此帖为精华帖。");
}
八、添加"察看结果树",用来察看断言执行结果。另外由于脚本中部分执行结果由log输出,因此需要将"选项"下的"Log Viewer"选项勾上,这样就可以察看日志信息了。(建议将jmeter.properties配置文件中的log_level.jmeter以及log_level.jmeter.junit分别设置为log_level.jmeter=ERROR、log_level.jmeter.junit=DEBUG,过滤不必要的日志信息)
九、最后保存文件并执行(点击操作栏中绿色三角箭头),查看执行结果
【结论】从右下方的日志窗口可以看到,由于精华帖数量为3因此断言Case01失败,而上方的察看结果树中这条断言也显示为红色代表失败,Case02执行成功,因此不会显示在察看结果树中。
四、总结
至此,一个简易的接口自动化测试框架便搭建完成,基本可以应付一些不太复杂的测试场景。
JMeter就好比一把瑞士军刀,麻雀虽小但五脏俱全,虽不及一些商业测试工具那样能够提供庞大的"套件",却也凭借着自己的灵活性几乎无所不能。
jmeter beanshell断言接口自动化实例的更多相关文章
- (jmeter内置可调用的变量)jmeter beanShell断言
用户可以在jmeter- “beanShell断言”中自定义断言.自由灵活的用脚本实现自己的断言 beanShell断言接口介绍 在beanShell中直接可以调用的变量,无需加前缀. 1.lo ...
- Jmeter+ant+Jenkins接口自动化框架搭建
摘自:https://testerhome.com/topics/13389 一.背景 上一篇讲了Jmeter 接口自动化-脚本数据分离实例,我们知道怎么利用Jmeter去编写接口自动化脚本,但是接 ...
- 接口测试 从 0 到 1,用 Jmeter 搭建 HTTP 接口自动化引擎 1.0 版本
百度网盘地址更新:https://pan.baidu.com/s/13S0WStZpwlbL15IBp_Q-bg 1.已实现功能描述 1.1 框架包含:Jenkins.Ant.Jmeter 1.2 测 ...
- jmeter BeanShell断言(四)
Bean Shell常用内置变量 JMeter在它的BeanShell中内置了变量,用户可以通过这些变量与JMeter进行交互,其中主要的变量及其使用方法如下: log:写入信息到jmeber.log ...
- Jmeter BeanShell断言
这篇文章用来记录编写beanshell断言遇到得问题. 问题1:JSONObject not found in namespace 流程:在beanshell下写代码如下: 1 String resp ...
- jmeter BeanShell断言(一)
原文地址https://blog.csdn.net/lijing742180/article/details/81157947 原文地址https://blog.csdn.net/zailushang ...
- jmeter BeanShell断言(三)数据处理
在做接口测试时,对响应数据的校验是非常重要的部分:在使用Jmeter进行接口测试时,有多种respone校验方式,比如响应断言.BeanShell断言等等,BeanShell断言可以自定义断言,自由灵 ...
- Win10系统Jmeter+maven+Jenkins接口自动化环境搭建(一)
Jmeter+maven+Jenkins实现接口自动化,需要使用idea或eclipse配置maven项目,这里我使用的是idea.具体步骤如下: 1.安装jmeter+jdk jmeter安装之前需 ...
- Jmeter+Ant+Jenkins接口自动化框架
最近应公司要求,搭建一套接口自动化环境.看到通知邮件,没有多想就确定了Jmeter路线.可能有些人会 说,为啥不用python,相对而言高大上一些.因为公司内部现在项目有用到Jmeter,正好可以结合 ...
随机推荐
- bay——巡检RAC日志.txt
-查找超过800M大小文件,并显示查找出来文件的具体大小,可以使用下面命令 find . -type f -size +400M -print0 | xargs -0 du -h --查看当前目录下每 ...
- centos7.6使用openssl生成CA签署的证书个人实验笔记
准备:客户端centos6.10 服务端Centos7.6 实验:客户端生成证书请求,服务端颁发证书,最后吊销其中一个证书 1.先在服务端上的/etc/pki/CA/目录生成rsa的私钥: 2.在服 ...
- 《Linux/UNIX系统编程手册》第56章 SOCKET:介绍
关键词: 1. socket基础 一个典型的客户端/服务器场景中,应用程序使用socket进行通信的方式如下: 各个应用程序创建一个socket.socket是一个允许通信的设备,两个应用程序都需要用 ...
- kettle教程---通过配置表格配置实现数据的批量增量更新(实用)
本文接上篇文章,上面文章讲的是,通过配置文件的全量更新,现在说下增量更新 如上图所示,涉及到1个转换和1个作业. 1-表增量同步(转换) 可以通过读取同步表参数这个excel表格文件,获取表名称和同步 ...
- R基础绘图
本节内容 0:小知识 1:绘图系统散点图的特征 2:基础绘图函数 3:基础绘图参数 4:图形设备 5:案例操作5个图形 0:小知识 summary() ## 对数据框或者向量进行描述性数据 read. ...
- Day5- Python基础5 模块导入、time、datetime、random、os、sys、hashlib、json&pickle
本节目录: 1.模块的分类 2.模块的导入 3.time模块 4.datetime模块 5.random 6.os模块 7.sys模块 8.hashlib 9.json&pickle 一.模块 ...
- acwing 49. 二叉搜索树与双向链表
地址:https://www.acwing.com/problem/content/87/ 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表. 要求不能创建任何新的结点,只能调整树中结点指针 ...
- Eclipse优化之设置不自动弹出控制台和Server
有时候Eclipse启动,控制台console不会自动跳出来,需要手工点击该选项卡才行, 按下面的设置,可以让它自动跳出来(或不跳出来): windows -> preferences ...
- ASP.NET Core 中基于 API Key 对私有 Web API 进行保护
这两天遇到一个应用场景,需要对内网调用的部分 web api 进行安全保护,只允许请求头账户包含指定 key 的客户端进行调用.在网上找到一篇英文博文 ASP.NET Core - Protect y ...
- Dubbo 一些你不一定知道但是很好用的功能
dubbo功能非常完善,很多时候我们不需要重复造轮子,下面列举一些你不一定知道,但是很好用的功能: 直连Provider 在开发及测试环境下,可能需要绕过注册中心,只测试指定服务提供者,这时候可能需要 ...