2010-02-01 61 views
13

我想在Hudson持续集成服务器上为Android应用程序自动生成html格式的单元测试报告。如何在HTML中自动生成Android测试报告

因此,我尝试先运行测试用例,然后以xml格式收集测试结果文件。然后,我使用JUnitReport Task将XML结果文件转换为HTML格式。

我通过Android工具框架运行测试用例。但是,它只提供详细的输出信息,而不是标准的JUnit XML格式。我不知道如何在没有JUnit XML结果文件的情况下生成HTML单元测试报告。

如果我使用Eclipse运行测试用例,它可以将结果导出到XML文件中,并且每个测试用例的消耗时间信息。这些XML文件可以通过JUnitReport任务正确地转换为HTML。因此,似乎有可能收集带有耗时信息的测试结果。

在Android仪器框架上运行测试用例后,是否有任何方法可以自动获取标准JUnit XML结果文件?

回答

9

我们在公司也有类似的问题。我们检查了所有可用的开源解决方案,但它们都不是十全十美的。所以我们开发了一个开源解决方案。我仍然不会说“终极”,但肯定比雅典娜或蟒蛇记者或任何测试后分析都要好。你可以在这里找到它: http://code.google.com/p/the-missing-android-xml-junit-test-runner/

它规定:每包装

  • 单独的XML文件涉及
  • XML文件在设备上生成(需要先试验后,亚行pull'ed)
  • 测试的
  • 时机完全支持
  • 我们有充分的堆栈跟踪报告故障/错误情况

除了分析java源代码(如athena)或分析输出(python脚本)之外,我们扩展了android instrumentation runner。因此,我们可以获得使用标准命令行选项进行测试选择,覆盖范围启用等的所有优势 - 全部描述如下:http://developer.android.com/guide/developing/testing/testing_otheride.html#RunTestsCommand

我们能够使用标准测试规则成功运行代码,其覆盖率由emma分析,所有报告均在Jenkins中很好地报告。

+0

刚刚尝试过你的解决方案,它几乎与詹金斯一起工作,谢谢! – 2011-05-06 09:59:52

+0

酷:)。乐意效劳。 – 2011-05-08 21:54:07

+2

刚刚找到类似的解决方案:https://github.com/jsankey/android-junit-report – 2011-05-09 08:37:15

1

我不认为这是可能的,因此您需要创建一个实用程序,将Android测试运行器输出转换为JUnit格式的XML文件。

但是,您将无法获得每次测试的时间值,因为Android测试运行器似乎没有输出该信息。

+0

感谢您的回答。我添加了一个段落作为回应。 – papalagi 2010-02-02 02:16:35

+0

有趣;我已经看到了Android测试运行器的输出,并查看了以前的源代码,但没有看到关于输出时间的任何信息。所以我想知道它在Eclipse中的工作原理。我想看看ADT插件是为了... – 2010-02-02 08:45:44

+0

我看着跑步者的来源,也没有发现任何东西。但是我发现在“/ development/testrunner”和“/ development/tools/ddms”路径中分别用Java和Python编写了两个测试运行器输出解析器。他们帮助解析测试运行者的详细输出。令人惊讶的是,他们都使用“性能”作为获取时间信息的关键。此外,路径“/ development/testrunner/tests”中输出解析器的测试用例包含性能测试数据。所以我认为应该有一种方法来打开性能输出。 – papalagi 2010-02-06 18:53:20

4

我刚刚看到DroidDudes的Dan Watling使用了一个名为Athena的工具,它看起来与您想要的类似。

你可以在那里找到它:http://droiddudes.com/

0

我觉得雅典娜做法是免得不好受,你可以简单地安装在系统上的雅典娜jar文件,并添加以下Ant目标

<property name="junit.dir" value="${basedir}/junit-results"/> 
<property name="athena.jar" value="/home/cruise/athena/athena-1.1.2.jar"/> 

<target name="prepare" description="Setup needed directories"> 
    <mkdir dir="${junit.dir}"/> 
</target> 

<!-- This target will compile/install tested project as well as test project to ensure tests are executed against latest code --> 
<target name="athena" depends="prepare, -install-tested-project, install" description="Run tests and convert result to xml using athena"> 
    <exec executable="java" os="Linux" failonerror="true"> 
    <arg value="-cp"/> 
    <arg value="${athena.jar}"/> 
    <arg value="com.synaptik.athena.Athena"/> 
    <arg value="${basedir}"/> 
    <arg value="${junit.dir}/TEST-result.xml"/> 
    </exec> 
</target> 

从命令行则然后只需运行的问题蚂蚁雅典娜,你有在xml的测试结果。这也将成为CruiseControl脚本应触发的目标。