Java 获取jmeter功能测试代码覆盖率

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

我正在尝试使用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>

com.lazerycode.jmeter
jmetermaven插件
2.1.0 
jmeter测试
验证
性能测试
真的
${jmeter测试结果}
${jmeter testhost}
${jmeter testport}
${jmeter测试结果}
真的
真的

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

  • 从本地下载jacoco项目,并在本地进行摘录,例如C:/jacoco。它将在lib文件夹中包含jacocagent.jar和jacoccli.jar

  • 打开GitBash(也可以使用简单的命令行)

    export MAVEN_OPTS=“-javaagent:C:\jacoco\lib\jacoagent.jar=output=tcpserver”
    mvn exec:java-Dexec.mainClass=“主类的完整包名”

上面的命令将在服务器启动期间将jacocoagent注入maven jvm,以便它能够读取和捕获执行流,并将taht存储在tcpserver上。我使用tcpserver作为输出,通过使用文件模式,我需要优雅地关闭jvm以获取执行数据。 服务器启动后,执行

mvn验证

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

java-jar C:/jacoco/lib/jacoccli.jar dump--destfile“您的本地路径/jacoco.exec”

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

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

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


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

  • 从本地下载jacoco项目,并在本地进行摘录,例如C:/jacoco。它将在lib文件夹中包含jacocagent.jar和jacoccli.jar

  • 打开GitBash(也可以使用简单的命令行)

    export MAVEN_OPTS=“-javaagent:C:\jacoco\lib\jacoagent.jar=output=tcpserver”
    mvn exec:java-Dexec.mainClass=“主类的完整包名”

上面的命令将在服务器启动期间将jacocoagent注入maven jvm,以便它能够读取和捕获执行流,并将taht存储在tcpserver上。我使用tcpserver作为输出,通过使用文件模式,我需要优雅地关闭jvm以获取执行数据。 服务器启动后,执行

mvn验证

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

java-jar C:/jacoco/lib/jacoccli.jar dump--destfile“您的本地路径/jacoco.exec”

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

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

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


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