51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2013|回复: 1
打印 上一主题 下一主题

jmeter脚本编写

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-1-24 17:11:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

需求背景:由于公司大多是集成非常多的项目,有算法组,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选项,同时在文件选项卡里配置文件的路径和类型



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

  2. //uuid生成

  3. UUID uuid = UUID.randomUUID();

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

  5. UUID uuid2 = UUID.randomUUID();

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

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

  8. String version = "qa";

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

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

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

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

  13. //小程序userid变量

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

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

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

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

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

  19. //userid变量

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

  21. }

  22. //email收件人邮箱

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

  24. 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后置处理器
  1. import com.alibaba.fastjson.JSONObject;

  2. String response_data = prev.getResponseDataAsString();

  3. JSONObject jsonObject = JSONObject.parseObject(response_data);

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

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

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

  7. vars.put("errCode_3",errCode_3);

  8. vars.put("fileId_3",fileId_3);

  9. vars.put("downloadUrl_3",downloadUrl_3);
复制代码

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

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

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

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

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

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

  6. FailureMessage = "规则解析成功";

  7. }else{

  8. Failure = true;

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

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

  11. }
复制代码

其中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内置的,来决定请求是否按照自己的规则请求成功。

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




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2
回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-26 04:56 , Processed in 0.063200 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表