jmeter脚本编写

需求背景:由于公司大多是集成非常多的项目,有算法组,c开发组,平台开发组,智能应用开发组等,每个组开发的功能,集成为最终的项目,本人项目组主要负责小程序的接口开发,在实际操作中经常出现接口挂掉,由此想到做个监控接口的东西。

作为一个java开发,本能想用java自己搭建一个平台,将接口录入到表中,同时将每次请求的参数和返回结果也保存到数据库表中,做一个纯java版的监控平台,有利于扩展,因为涉及到java,我就有的放矢了。但由于时间关系,决定先用jmeter开发一版。第一次看到jmeter是见测试人员压力测试用,经过搜集资料,发现它的功能蛮多的,能满足项目需求。在学习过程中,发现了非常好用的事务控制器,beanshell而且它很好的支持了java语言,让我喜出望外,自定义变量等好用的功能组件。

接下来,看一个我写好的例子,

开发步骤是这样的:新建测试计划->新建线程组->新建一个全局的beanshell取样器"环境与变量设置",放置全局变量,注意要放到最上面,因为jmeter是自上往下运行的->设置两个事务控制器“大脑”,“面舌诊”,这样每个事务控制器的请求是一个事务内的。->HTTP Request Defaults,这样就不需要每次http请求都写域名和端口号了,同时注意,http默认是80端口,而https默认是443端口->http请求->beanshell 后置处理器->beanshell断言->查看结果树(可以没有,但是运行后不能直观的看到结果,可以单独每个http请求加结果树,也可以在所有的请求外面加一个)。

  • 有文件上传的http请求

要勾选对post请求使用multipart/form-data选项,同时在文件选项卡里配置文件的路径和类型

  • 变量定义,上图中的“环境及变量设置”内容
import java.util.UUID;

//uuid生成

UUID uuid = UUID.randomUUID();

vars.put("faceCheckId",(uuid.toString()).toUpperCase().replaceAll("-",""));

UUID uuid2 = UUID.randomUUID();

vars.put("tongueCheckId",(uuid2.toString()).toUpperCase().replaceAll("-",""));

//设置环境 qa 测试环境 pro 生产环境

String version = "qa";

if(version.equals("qa")){

vars.put("OHHttp","https");

vars.put("FTDWHttp","http");

vars.put("OHServerName","xxx.com.cn");

//小程序userid变量

vars.put("userId","123");

}else if(version.equals("pro")){

vars.put("OHHttp","https");

vars.put("FTDWHttp","https");

vars.put("OHServerName","xxx.com.cn");

//userid变量

vars.put("userId","890");

}

//email收件人邮箱

String[] emailArray={"zhonghuahuizi@126.com","1214348669@qq.com"};

vars.putObject("email",emailArray);

其中高亮的vars是jmeter内部的全局存储,类似于java的request的作用域。因为beanshell支持java,所以,脚本里可以引入UUID。最下面的email收件人邮箱是,我用于接口报错触发发送邮件给相关负责人的收件人数组,可给多人发送邮件

  • 引入jar

在测试计划引入jar,为什么要引入jar包呢,因为项目接口返回的内容是json格式的,我就想用fastjson来处理json值来断言,虽然接口正常调用但是返回的内容不对,我就要用json得到的值,在断言里判断。还有一个用途是我想接口报错触发发送邮件,我将发送邮件的代码写在java项目里,将java项目打包为jar,jmeter引入,在断言里直接import我的类,调用即可。

  • BeanShell PostProcessor后置处理器
import com.alibaba.fastjson.JSONObject;

String response_data = prev.getResponseDataAsString();

JSONObject jsonObject = JSONObject.parseObject(response_data);

String errCode_3 = jsonObject.get("errCode").toString();

String fileId_3 = jsonObject.get("fileId").toString();

String downloadUrl_3 = jsonObject.get("downloadUrl").toString();

vars.put("errCode_3",errCode_3);

vars.put("fileId_3",fileId_3);

vars.put("downloadUrl_3",downloadUrl_3);

prev.getResponseDataAsString()是jmeter内置的,取得返回的数据,然后用fastjson解析得到里面的值。

  • BeanShell断言
import com.example.heimaobookshop.common.JavaMail;

//使用vars.get()方法获取变量的值

String code_5= vars.get("code_5");

String message_5= vars.get("message_5");

if("10000".equals(code_5) && "success".equals(message_5)) {

FailureMessage = "规则解析成功";

}else{

Failure = true;

FailureMessage = "[问诊列表]调用接口失败";

new JavaMail().sendMail(vars.getObject("email"), FailureMessage,FailureMessage);

}

其中vars.get(string name)是jmeter取得字符串变量的用法,vars.getObject(String name)是jmeter取得对象变量的用法

vars.put(String name, String value)是jmeter添加字符串变量的用法,vars.putObject(String name, Object value)是jmeter添加对象变量的用法。

FailureMessage和Failure 是jmeter内置的,来决定请求是否按照自己的规则请求成功。

后续可以自己设置定时器运行脚本

转载于:https://my.oschina.net/zhonghuahuizi/blog/2998194

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值