基于 JMeter 的接口用例,报告自定义

Posted 酔清风

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于 JMeter 的接口用例,报告自定义相关的知识,希望对你有一定的参考价值。

前言

针对接口测试,选择 JMeter 作为工具,会遇到的问题是,没有合适的分层结构,没有通用的报告模板。
对此,我们的解决方案是:
1、人为定义 JMeter 的层级结构,根据特定结构生成报告。

弊端

1、编辑繁琐,需要了解具体结构。
2、勉强能用。

优点

1、JMeter 都会用,通用性强。
2、统一格式方便管理,报告输出合理。

JMeter 用例设计概念

demo
│  
├─config                        //配置中心,存放数据库配置,项目全局变量
│      配置中心.jmx
├─doc                             //项目相关文档留存
│      项目文档.md 
├─lib                               //项目依赖的Jar包
│      fastjson-1.2.62.jar
├─resources                 //项目引用的外部文件
│  ├─csv
│  └─img
├─testcase                 //用例层
│      用例1.jmx
│      用例2.jmx 
├─teststep                //步骤层
│      步骤1.jmx
│      步骤2.jmx
└─testsuite              //场景层,最后可执行的 JMX 文件
        模块场景用例.jmx

Tips:
1、JMX 里面引用其他 JMX 可使用 Include Controller,被引用的 JMX 必须是 Test Fragment 。
2、引用的图片,csv,可以使用相对路径,以 JMeter 的 bin 目录为根目录。
3、testSuite 里面的 JMX 才是可以执行的,报告会根据该 JMX 的 名称来解析为模块名称,匹配类型为 ".场景用例.

执行情况

在 GUI 里面执行,模块场景用例.jmx,可在查看结果树中进行 jtl 数据写入,需要打开对应配置(Configure 全部勾选即可),记录详细数据。

非 GUI 模式,可使用 -Jjmeter.save.saveservice.label=true

public void setJmeterOutputFormat() 
    Properties jmeterProps = JMeterUtils.getJMeterProperties();
    jmeterProps.put("jmeter.save.saveservice.label", "true");
    jmeterProps.put("jmeter.save.saveservice.response_data", "true");
    jmeterProps.put("jmeter.save.saveservice.response_data.on_error", "true");
    jmeterProps.put("jmeter.save.saveservice.response_message", "true");
    jmeterProps.put("jmeter.save.saveservice.successful", "true");
    jmeterProps.put("jmeter.save.saveservice.thread_name", "true");
    jmeterProps.put("jmeter.save.saveservice.time", "true");
    jmeterProps.put("jmeter.save.saveservice.subresults", "true");
    jmeterProps.put("jmeter.save.saveservice.assertions", "true");
    jmeterProps.put("jmeter.save.saveservice.latency", "true");
    jmeterProps.put("jmeter.save.saveservice.connect_time", "true");
    jmeterProps.put("jmeter.save.saveservice.samplerData", "true");
    jmeterProps.put("jmeter.save.saveservice.responseHeaders", "true");
    jmeterProps.put("jmeter.save.saveservice.requestHeaders", "true");
    jmeterProps.put("jmeter.save.saveservice.encoding", "true");
    jmeterProps.put("jmeter.save.saveservice.bytes", "true");
    jmeterProps.put("jmeter.save.saveservice.url", "true");
    jmeterProps.put("jmeter.save.saveservice.filename", "true");
    jmeterProps.put("jmeter.save.saveservice.hostname", "true");
    jmeterProps.put("jmeter.save.saveservice.thread_counts", "true");
    jmeterProps.put("jmeter.save.saveservice.sample_count", "true");
    jmeterProps.put("jmeter.save.saveservice.idle_time", "true");

生成的 jtl 的 xml 节点数有三层,最外层都是 testResults,里面包含 2 个 Transaction Controller,并且 都勾选 Generate parent samper

// 大概结构如下
<testResults>
    <sample TrC>
        <sample TrC>
            <httpSample>

根据具体结构,就可以自己提取需要的信息。来生成报告模板(报告也是论坛上开源的基础上改了一些)。


  "testStepNum": 32,
  "caseFailNum": 0,
  "caseSucessNum": 2,
  "stepFailNum": 0,
  "testCaseNum": 2,
  "stepSucessNum": 32,
  "executeTime": 0,
  "testModule": 
    "模块名称": 
      "testCases": [
        
          "moduleName": "",
          "stepNum": 16,
          "caseName": "用例名称", //模块名称
          "time": 5357,
          "type": "场景", //用例类型
          "steps": [  // 步骤列表
            
              "cookie": "",
              "method": "POST",
              "rspSize": 315,
              "responseHeader": "",
              "responseData": "",
              "queryString": "",
              "url": "",
              "stepName": "", 步骤名称
              "assertList": [  //断言结果
                
                  "failure": false,
                  "name": "断言响应状态码为200",
                  "error": false
                
              ],
              "requestHeader": "",
              "time": 81,
              "status": 0
            
          ],
          "status": "成功" //用例状态,成功或者失败
        
      ],
      "moduleName": "" //模块名称
    
  

源码

https://github.com/Laimf1995/JMeter-Report

福利

福利大放送,从入门到实战,从电子书到面试真题,这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你。

如果需要这份学习资料,可以微信扫描下方CSDN官方认证公众号【100%免费获取】。

 

以上是关于基于 JMeter 的接口用例,报告自定义的主要内容,如果未能解决你的问题,请参考以下文章

接口测试自动化:基于Ant+Jmeter+Jenkins

基于 Jmeter 的 web 端接口自动化测试平台

jemter-自定义测试报告

基于jmeter+ant实现的接口自动化测试

从0开始Jmeter接口测试实战

JMeter-接口测试之数据驱动