51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2560|回复: 7
打印 上一主题 下一主题

jmeter 接口自动化测试方案

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2017-6-30 11:02:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 小皮球的故事 于 2017-6-30 11:05 编辑


jmeter是一个非常轻巧好用的性能测试工具,当然也可以做接口自动化测试,这里面我们主要想做一个通用的执行引擎
这么做的好处就是我们不用再关注测试脚本的内容,属于用测试用例的数据去驱动我们执行的走向,这个适合单个接口的测试,但是这个肯定不是很灵活适合代码基础弱一些的同学直接使用,真正的灵活还是要代码去做

一.首先我们要有一个接口测试用例存放的地方,我们这里用EXCEL模板管理,里面包含用例名、协议、入参、预期结果、SQL、数据库预期结果,那么我们想在这里面写完可以马上执行测试用例,并且这个执行引擎是比较通用的

二.接下来创建执行计划,先看下做好的

三.下面是具体的Jmeter设置
1.设置线程,我们要从参数化文件里面读取用例集,并且以用例的数量作为执行结束,所以线程这里面要一致循环

2.设置参数化文件,主要4个参数 文件路径、是否允许循环取值、读取结束是否停止,我们是按照参数化文件用例的数据决定运行多少次,所以不能允许循环取值,读到最后一行停止测试,里面通过一些变量获取参数的值,具体对应关系大家参考用例模板

3.加上协议控制器,具体是哪个协议根据测试用例里面的匹配

4.对于http的请求分为get、post等多个方法,要加上方法控制器,3.1的jmeter应该不用了

5.取样器的设置全部参数化

6.那么需要做一些断言的处理,这里面弄的简单的响应断言,当然也可以根据情况增加其他的断言

7.下面加上数据库的校验,首先要配置数据库连接配置,取样器后面加上SQL后置处理器


8.数据库的断言我们需要用后置处理器的beanshell处理,检查是否校验数据库,校验的话通过测试用例里面的预期结果JSON和数据库实际的结果对比,不一致修改结果,code506是我自己定义的code码,即使断言过了,也会修改当前的结果为false,这里用到了fastjson所以需要导入包
  1. import com.alibaba.fastjson.JSON;   //引入JSON的类
  2. String checkDb=vars.get("checkDb");  //获取是否校验数据库
  3. log.info("checkDb:"+checkDb);    //为了方便调试 我把信息输出了
  4. if(checkDb.equals("true")){   //判断是否检查数据库
  5.     log.info("进入校验数据库"); //为了方便调试
  6.     String preDbMap=vars.get("DbMap"); //拿到预期数据库的值
  7.    int paramSize =bsh.args.length;  //它是一个数组
  8.    if(paramSize>0){       //大于0 说明是有预期结果的
  9.     preDbMap =bsh.args[0];
  10.     }else{
  11.         preDbMap="没有预期数据库结果!!!!!";  //小于0 认为没有预期结果
  12.     }  
  13.     preDbMap =preDbMap.trim();  //把预期结果去掉空格
  14.     log.info("preDbMap:"+preDbMap); //为了方便调试
  15.     List results=vars.getObject("resultList");  //拿到数据库返回的List对象,是查询数据库之后的数据
  16.     log.info("results对象:"+results);    //为了方便调试
  17.     if(null!=results){  //如果results 等于null 说明数据库没有查询到数据,可能是绑定或者插入没有成功
  18.         int size=results.size();     //获取他的长度
  19.         log.info("results的SIZE:"+size); //为了方便调试
  20.         if(size>0){      
  21.             log.info("进入到SIZE了:");
  22.             for(Map m:results){   //因为返回的List对象里面是一个MAP,所以是key和value的形式,可以用MAP的方式遍历循环
  23.                 String dbMap =JSON.toJSONString(m); //拿到第一个对象的Map 进行转JSON字符串
  24.                 dbMap =dbMap.trim(); //去掉空格
  25.                 log.info("数据库JSON:"+dbMap); //为了方便调试
  26.                 if(!preDbMap.equalsIgnoreCase(dbMap)){  //用预期的JSON串和查询到的结果JSON串进行对比
  27.                     //如果不一样的情况下,说明数据库的断言失败,可能是程序的问题
  28.                     String result =prev.getResponseDataAsString();   //拿到实际结果的值,用于存放到返回数据中
  29.                 prev.setResponseCode("506");            //我们自定义了一个CODE码,告诉结果显示的CODE是这个
  30.                     prev.setSuccessful(false);   //设置结果为错误
  31.                     prev.setResponseMessage("接口断言通过,数据库校验未通过");  //设置一个提示信息,大概是说明原因导致的
  32.                     //写入结果返回的结果,还有数据库校验未通过,我们的预期数据库的值是,实际的值是,加上这个是为了方便定位问题
  33.             prev.setResponseData(result+",\n数据库校验未通过,\n预期值:"+preDbMap+",\n实际值:"+dbMap);
  34.                     }      
  35.                 }      
  36.         }else{
  37.             //当SIZE没有大于0的时候,说明也没有查询出来数据,可能没有绑定成功。
  38.             log.info("没有到SIZE了:");
  39.             //设置结果为错误
  40.             prev.setSuccessful(false);
  41.             //设置提示信息
  42.             prev.setResponseData("数据库没有返回信息,接口result:"+result);
  43.         }
  44.     }else{
  45.         log.info("result为null");
  46.             prev.setSuccessful(false);
  47.             prev.setResponseData("数据没有返回信息,接口result:"+result);
  48.         }
  49. }else{
  50.     //当checkDb不等于true的情况下,可能是用户设置了这条用例不需要检查数据库
  51.     log.info("没有进入判断");
  52.     }
复制代码
9.我们通过查看结果树查看报告,大家看左侧的树就是我们的用例名称,具体的响应结果断言是通过的,但是数据库校验没有通过


10.邮件报告,这个邮件用ant 去做的,不过需要修改些东西,下个文章在介绍,给大家先看下效果,邮件有两部分,邮件正文和附件(详细的HTML报告)



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

使用道具 举报

该用户从未签到

2#
发表于 2017-6-30 17:01:43 | 只看该作者
复杂业务场景怎么做,比如需要预置回收的,多条用例依赖的,或者直接多个步骤才组成一条用例的情况,这样断言类型是不是也限定的少了点会
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2017-6-30 17:02:43 | 只看该作者
CSV文件里入参是一个JSON,然后在POST请求时,Body Data直接使用${param},这个不需要提前把JSON处理成key=value的格式吗?
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2017-6-30 17:03:20 | 只看该作者
ant 生成html报告那么完美!!!xml能分享一下吗测试大神
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2017-6-30 17:34:07 | 只看该作者
高手啊。膜拜
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2016-3-25 17:20
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    7#
    发表于 2017-7-10 14:56:49 | 只看该作者
    支持,学习了,很好的帖子
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2017-7-11 14:38
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    8#
    发表于 2017-7-11 14:32:16 | 只看该作者
    ant 的xml 分享一下
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-9-21 11:00 , Processed in 0.070110 second(s), 22 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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