【问题标题】:Get jmeter functional test code coverage获取 jmeter 功能测试代码覆盖率
【发布时间】:2018-03-24 11:23:04
【问题描述】:

我正在尝试使用 maven 插件提取关于我的 jmeter 功能测试执行的代码覆盖率报告。我尝试使用 jacoco 插件将其配置为生成代码覆盖率报告,但它似乎只能通过单元和集成测试进行配置,这些测试采用 java 类的格式,例如*IT.java 或 *Test.java。但在我的情况下,功能测试执行是通过使用 jmeter 插件的 Jmeter .jmx 文件进行的。我知道获得功能测试的代码覆盖率很少见,但如果有人做过类似的事情,请分享一些细节。下面是我用于执行 Jmeter 测试的插件。

<plugin>
               <groupId>com.lazerycode.jmeter</groupId>
                   <artifactId>jmeter-maven-plugin</artifactId>
                   <version>2.1.0</version> 
                   <executions>
                     <execution>
                              <id>jmeter-tests</id>
                              <phase>verify</phase>
                              <goals>
                                <goal>jmeter</goal>
                              </goals>
                         </execution>
                  </executions> 
                  <configuration>
                    <ignoreResultFailures>true</ignoreResultFailures>
                    <resultsDirectory>${jmeter-testresults}</resultsDirectory>
                        <propertiesUser> 
                              <hostname>${jmeter-testhost}</hostname>
                              <hostport>${jmeter-testport}</hostport>
                              <testresults>${jmeter-testresults}</testresults>
                    </propertiesUser> 
                       <propertiesJMeter>
                              <jmeter.save.saveservice.url>true</jmeter.save.saveservice.url>
                              <jmeter.save.saveservice.samplerData>true</jmeter.save.saveservice.samplerData>
                       </propertiesJMeter> 
              </configuration>
            </plugin>

【问题讨论】:

  • 使用 JMeter 进行功能测试也很不寻常。 JMeter 不是世界上最方便使用的工具,至少对于性能测试你别无选择,但为什么要使用它来进行功能测试呢?特别是如果代码覆盖率是一个目标。为什么不使用普通的测试框架——junit、testng 等,并在该框架中简单地编写功能测试?那里的代码覆盖率真的很容易......
  • 这里 Jmeter 测试更多地被用作微服务的 API 测试。因此,在执行 jmeter 测试时,我需要正在测试的 API 的代码覆盖率报告。截至目前,我有报告说没有 API 被覆盖,也没有 API 未被覆盖。我需要扩展结果以在执行 API 时覆盖代码库,以获取有关缺失案例的更多深度信息。
  • 由于 JMeter 对源代码的可见性为零,我不知道您将如何从 JMeter 端完成它。我认为唯一的方法是在 JMeter 运行时在微服务本身上使用一些分析工具。

标签: java jmeter code-coverage maven-plugin jacoco-maven-plugin


【解决方案1】:

我可以使用 git bash 命令行获取代码覆盖率。以下是步骤。

  • http://www.eclemma.org/jacoco/ 下载 jacoco 项目并提取到本地,例如C:/雅可可。它将在 lib 文件夹中包含 jacocoagent.jar 和 jacococli.jar。

  • 打开 Git bash(你也可以使用简单的命令行)。

    导出 MAVEN_OPTS="-javaagent:C:\jacoco\lib\jacocoagent.jar=output=tcpserver"
    mvn exec:java -Dexec.mainClass="主类的完整包名"

上面的命令会在服务器启动的时候将jacocoagent注入到maven jvm中,这样它就可以读取并捕获执行流并将taht存储在tcpserver上。我使用 tcpserver 作为输出,通过使用文件模式,我需要优雅地关闭 jvm 以获取执行数据。 服务器启动后,执行

mvn 验证

验证命令与我的 pom xml 中的 Jmeter 执行插件集成。所以验证命令将触发我的 Jmeter 测试执行。 现在由于执行数据驻留在 tcp 服务器上,我们需要将其转储到 jacoco 文件中以获取报告。执行以下命令将执行数据转储到 jacoco.exec 文件中

java -jar C:/jacoco/lib/jacococli.jar dump --destfile "你的本地路径/jacoco.exec"

现在您应该会看到在上述路径中生成的 jacoco.exec 文件。但是,此数据不是人类可读的格式。要生成可读的 html 格式的报告,请执行以下命令。

java -jar C:/jacoco/lib/jacococli.jar 报告“jacoco 文件/jacoco.exec 的路径”--classfiles “项目类文件的路径”--html “存储报告的路径\jacoco-report” --name myReport --sourcefiles "源文件路径"

现在您应该能够看到在给定路径生成的 html 格式的报告。

Reference

【讨论】:

  • 目前解决方案是手动过程。您是否也与 Maven 集成以自动执行此操作。如果是,那么请也发布您的答案。
猜你喜欢
  • 2017-10-09
  • 2017-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-04
  • 1970-01-01
  • 1970-01-01
  • 2011-08-02
相关资源
最近更新 更多