从不同的代码库执行业务测试时,我必须获得应用程序的代码覆盖率。
我使用: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%
在会话链接中,未加载应用程序类。屏幕截图:
有人可以帮我吗?
我能够解决以下问题
将应用程序类复制到检测文件夹中。
使用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已更新)
jacoco-coverage.exec
执行蚂蚁报告目标。指向更新的jacoco-coverage.exec并复制了应用程序类文件夹。
感谢@ jens-schauder指出要我将其发布为答案。