• JMeter接口自动化发包与示例


    目录

    前言

    JMeter接口自动化发包与示例

    1简介

    2结构

    3代码:

    4运行结果

    5 小结

    结语


    前言

    JMeter接口自动化发包与示例

    近期需要完成对于接口的测试,于是了解并简单做了个测试示例,看了看这款江湖上声名远播的强大的软件-Jmeter靠不靠谱。
    官网:Apache JMeter - Apache JMeter™

    1简介

    • Apache-Jmeter是一个使用java语言编写且开源,可拓展性较强的测试框架,设计初期用于web应用的压力性能测试较多,但现在功能已经非常丰富,不仅是压力,而目前的接口自动化都可以使用该工具完成
    • 本次需求只依据业务,简单设置定时任务,往指定的接口发送接口数据,对接口返回数据做assert断言判断结果,体验一下该软件与postman有何差异。

    2结构

    Jmeter左上角点击文件-新建,即生成一个测试计划,相当于一个project,并创建以下层级结构

    • 聚合报告

      查看该测试计划的执行结果报告,每个执行的接口都统计在这,如果是做压力测试的话,就可以得出很多次执行的一个接口的性能情况。

    • 查看结果树

      查看每个测试接口的执行情况,包括该接口实际发送的包以及接口的响应都可以在这看到。

    • Http信息头管理器

      消息头信息可以在这里定义,没定义就是按照默认的头发包。

    • setUp线程组

      该线程组在整个项目的自动化时,可以将部分鉴权接口、参数生成与配置等放入该模块,以便确保该模块优先执行。

    • 线程组

      • 前置预处理程序

        这里我选择beanshell预处理程序,构造后面接口发的数据,可以看到脚本上边有个tips(scripts variable:ctx vars props prev sampler log),即Jmeter提示在编写脚本的时候可以使用ctx、vars等类去调用相应的API,这些值比如ctx的具体用法可到官网:http://jmeter.apache.org/api/org/apache/jmeter/threads/JMeterContext.html,常见的API:

        1. - ctx - ( [JMeterContext ](http://jmeter.apache.org/api/org/apache/jmeter/threads/JMeterContext.html)) - gives access to the context
        2. - vars - ( [JMeterVariables ](http://jmeter.apache.org/api/org/apache/jmeter/threads/JMeterVariables.html)) - gives read/write access to variables: vars.get(key); vars.put(key,val); vars.putObject("OBJ1",new Object()); vars.getObject("OBJ2");
        3. - props - (JMeterProperties - class java.util.Properties) - e.g. props.get("START.HMS"); props.put("PROP1","1234");
        4. - prev - ( [SampleResult ](http://jmeter.apache.org/api/org/apache/jmeter/samplers/SampleResult.html)) - gives access to the previous SampleResult (if any)
        5. - sampler - (Sampler)- gives access to the current sampler
      • 业务请求代码{单个/多个http请求/循环压测等}

      • 后置预处理程序

        1. //一般来说提取响应内容等打印出来
        2. String statusCode = prev.getResponseCode();
        3. log.info(statusCode);
    • tearDown线程组

      该线程组将是最后处理的线程组,可以将清除测试数据等放在该模块内部执行。

    3代码:

    • 测试计划:增加用户定义变量如下:

      host192.168.3.10
      port50553
      longConPort60443
      devNum1
      projectId1
      Token1
    • beanshell预处理程序中处理需要往接口中带入的一些随机变量,这里需求是要依据主设备的MAC地址等信息,携带子设备的相关信息通过接口上报给服务器,于是需要在预处理脚本中新增易于维护的MAC地址信息,也便于后续压力测试的时候生成百千万个设备数据时候做改写。以下定义一台主设备,31台子设备的MAC地址代码如下:

      1. /**
      2. * 生成的device_mac为00-00-0X-00-00-00,其中X这里定义为了进程号。整个生成规则可自己依据需求定义
      3. * 对应的25个连接中断的MAC地址也可自定义,client_mac为00-00-0X-00-00-01、00-00-0X-00-00-02……00-00-0X-00-00-25
      4. */
      5. pre_mac = "";
      6. //getThreadNum获取当前进程编号,进程号从0开始的,这里结果是1
      7. thread_index = ctx.getThreadNum();
      8. str_index = thread_index + "";
      9. log.info("当前线程编号: " + str_index );
      10. //最后生成六位字符串000001
      11. n = 6 - str_index.length();
      12. for (int i=0; i
      13. pre_mac += "0";
      14. }
      15. pre_mac += str_index;
      16. //正则,每隔两位数字就在后面插入一个“-”,使其符合mac地址的规范,最后pre_mac变成00-00-01,device_mac00-00-01-00-00-0X为mac地址一共12位,
      17. pre_mac = pre_mac.replaceAll("(.{2})", "$1-");
      18. device_mac = pre_mac + "00-00-00";
      19. //将生成的值存入对象vars中,后续在脚本中都可以直接使用//vars.put("client_mac_"+i, client_mac_i)这个参数后面就可以使用${变量名}直接使用;
      20. vars.put("device_mac", device_mac);
      21. for (int i=1; i<10; i++) {
      22. client_mac_i = pre_mac + "00-00-0" + i;
      23. vars.put("client_mac_"+i, client_mac_i);
      24. log.info(client_mac_i);
      25. }
      26. for (int i=10; i<31; i++) {
      27. client_mac_i = pre_mac + "00-00-" + i;
      28. vars.put("client_mac_"+i, client_mac_i);
      29. log.info(client_mac_i);
      30. }
      31. //Token的定义规则,可以用函数生成,也可以在前面的参数中直接加上
      32. deviceToken = "test" + str_index;
      33. vars.put("deviceToken", deviceToken);
    • http请求格式

      依据前面在测试计划中设定的值,在这个页面相应的位置写上引用即可(格式${变量名}),并依据接口文档定义,把需要发的包的数据编辑好附在body中并为该用例添加一个断言即完成一个用例的编写。
       

    • 循环发送
      如下图所示

    4运行结果

    经过上面处理后,下面可以启动测试计划,并观察执行的结果如下图:

    5 小结

    Jmeter做上述简单接口的测试上与postman相差无几,而Jmeter还有很多定时器、监听器等功能还未使用到,后面使用jmeter做一次完整的性能压力测试之后,也许才能真正体会到它的强大。

    下面是一份非常优质的学习资源,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

     

    以上软件测试资料需要的可以私信我都可以免费获取

    这还有一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中资料包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

    学习不要孤军奋战,最好是能抱团取暖,相互成就一起成长,群众效应的效果是非常强大的,大家一起学习,一起打卡,会更有学习动力,也更能坚持下去。

    结语

    欢迎留言,或是关注我的专栏和我交流。

     

  • 相关阅读:
    互联网最全cka真题解析-2022.9.9
    渗透测试-应急响应思路分享
    LeetCode 2578. 最小和分割:贪心(数学)
    深度解读《深度探索C++对象模型》之C++虚函数实现分析(一)
    个性化邮箱:wodMailbox ActiveX 组件-PJ
    Kubernetes(k8s)的Pod资源清单生命周期Lifecycle相关属性详细讲解
    大数据ClickHouse(十二):MergeTree系列表引擎之CollapsingMergeTree
    Java配置39-搭建ELK服务器
    【问题记录】audio标签变更currentTime属性值无效,currentTime变为0
    3年经验,光靠自动化测试基础,你可能连17k的测试岗都找不到,认清现实.....
  • 原文地址:https://blog.csdn.net/m0_70618214/article/details/126130831