我必须从不同的代码库执行业务测试时获取应用程序的代码覆盖率。
我使用:Maven作为我的构建 Jbehave作为我的测试框架。 测试用java编写。
我的应用程序是在tomcat上部署的一组war文件。
应用程序代码库与测试代码库分开。
在获得报道时,我遵循以下步骤。
1使用maven编译测试代码。
2将应用程序类从它构建的地方($ {app.code.dir} / target / classes)复制到$ {test.code.dir} / target / classes
[3]通过maven运行测试和jacoco报告
mvn构建:我保留了
<profile>
<id>coverage</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.6.3.201306030806</version>
<executions>
<execution>
<id>default-prepare-agent</id>
<phase>process-resources</phase>
<goals>
<goal>prepare-agent</goal>
</goals>
<configuration>
<skip>false</skip>
<destFile>${basedir}/target/jacoco-coverage.exec</destFile>
</configuration>
</execution>
<execution>
<id>default-report</id>
<phase>post-integration-test</phase>
<goals>
<goal>report</goal>
</goals>
<configuration>
<!-- <skip>true</skip> -->
<excludes>
<exclude>com/mytest/bdt/**</exclude><!-- test classes -->
<exclude>com/mytest/bdd/**</exclude><!-- test classes -->
</excludes>
<dataFile>${basedir}/target/jacoco-coverage.exec</dataFile>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
jbehave测试使用:
执行 <plugin>
<groupId>org.jbehave</groupId>
<artifactId>jbehave-maven-plugin</artifactId>
<version>${jbehave.core.version}</version>
<dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
</dependency>
</dependencies>
<executions>
<execution>
<id>unpack-view-resources</id>
<phase>process-resources</phase>
<goals>
<goal>unpack-view-resources</goal>
</goals>
</execution>
<execution>
<id>embeddable-stories</id>
<phase>test</phase>
<configuration>
<includes>
<include>${embeddables5}</include><!-- TestSuite.java -->
</includes>
<excludes />
<ignoreFailureInStories>true</ignoreFailureInStories>
<ignoreFailureInView>true</ignoreFailureInView>
<threads>1</threads>
<metaFilters>
<metaFilter>${meta.filter}</metaFilter>
<metaFilter>-skip *</metaFilter>
<metaFilter>+run</metaFilter>
</metaFilters>
</configuration>
<goals>
<goal>run-stories-as-embeddables</goal>
</goals>
</execution>
</executions>
</plugin>
当我执行mvn mvn install -Pcoverage
时执行如下。
[INFO] --- maven-resources-plugin:2.5:resources (default-resources) @ test-bdd-testsuite ---
[INFO] --- jbehave-maven-plugin:3.7.5:unpack-view-resources (unpack-view-resources) @ test-bdd-testsuite ---
[INFO] --- jacoco-maven-plugin:0.6.3.201306030806:prepare-agent (default-prepare-agent) @ test-bdd-testsuite ---
[INFO] argLine set to -javaagent:/home/testUser/.m2/repository/org/jacoco/org.jacoco.agent/0.6.3.201306030806/org.jacoco.agent-0.6.3.201306030806-runtime.jar=destfile=/home/testUser/testProj/trunk/target/jacoco-coverage.exec
[INFO]
[INFO] --- maven-compiler-plugin:2.1:compile (default-compile) @ test-bdd-testsuite ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.5:testResources (default-testResources) @ test-bdd-testsuite ---
[debug] execute contextualize
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /home/testUser/testProj/trunk/src/test/resources
[INFO]
[INFO] --- maven-compiler-plugin:2.1:testCompile (default-testCompile) @ test-bdd-testsuite ---
[INFO] No sources to compile
[INFO]
[INFO] --- maven-surefire-plugin:2.10:test (default-test) @ test-bdd-testsuite ---
[INFO] No tests to run.
[INFO] Surefire report directory: /home/testUser/testProj/trunk/target/surefire-reports
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Results :
Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO] --- jbehave-maven-plugin:3.7.5:run-stories-as-embeddables (embeddable-stories) @ test-bdd-testsuite ---
[INFO] Running stories as embeddables using embedder Embedder[ .....
.....
.....
Test execution log comes here .......
.....
.....
[INFO] Reports view generated with 1 stories (of which 0 pending) containing 25 scenarios (of which 0 pending)
[INFO] Meta filters excluded 0 stories and 24 scenarios
[WARNING] Failures in reports view: 0 scenarios failed
[INFO]
[INFO] --- maven-jar-plugin:2.3.2:jar (default-jar) @ test-bdd-testsuite ---
[INFO] Building jar: /home/testUser/testProj/trunk/target/test-bdd-testsuite-1.0.jar
[INFO]
[INFO] --- jacoco-maven-plugin:0.6.3.201306030806:report (default-report) @ test-bdd-testsuite ---
[INFO]
[INFO] --- maven-install-plugin:2.3.1:install (default-install) @ test-bdd-testsuite ---
[INFO] Installing /home/testUser/testProj/trunk/target/test-bdd-testsuite-1.0.jar to /home/testUser/.m2/repository/com/testCode/bdd/test-bdd-testsuite/1.0/test-bdd-testsuite-1.0.jar
[INFO] Installing /home/testUser/testProj/trunk/pom.xml to /home/testUser/.m2/repository/com/testCode/bdd/test-bdd-testsuite/1.0/test-bdd-testsuite-1.0.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 21.134s
[INFO] Finished at: Tue Nov 26 19:18:28 IST 2013
[INFO] Final Memory: 14M/309M
[INFO] ------------------------------------------------------------------------
有了这个,我得到了一个用应用程序包生成的覆盖率报告。但覆盖范围显示为0%
在会话链接中,未加载应用程序类。 屏幕截图:
有人可以帮助我吗?
答案 0 :(得分:2)
我能够按如下方式解决此问题
将应用程序类复制到检测文件夹中。
使用Java参数
启动应用服务器(mycase中的tomcat)-javaagent:$WORKSPACE/target/lib/jacoco-agent-0.6.3.2.jar=includes=*,destfile=$TOMCAT_HOME/jacoco-coverage.exec,append=false
(我在布局中将jacoco-agent jar复制到我的项目中)
执行测试(可以是自动或手动)
停止tomcat服务器(此时jacoco-coverage.exec
已更新)
执行ant报告目标。指向更新的jacoco-coverage.exec和复制的应用程序类文件夹。
感谢@ jens-schauder指示我发布这个作为答案。