android - 将 Android 机器人测试与 Teamcity 连接起来

标签 android automated-tests teamcity robotium

由于之前没有回答(也许我没有找到),我调查了以下问题:

如何使用robotium在Android设备上执行自动化功能测试,并将它们报告给像TeamCity这样的持续集成服务器?

最佳答案

由于我没有找到有关该特定问题的任何答案,因此我进行了调查。这是我的调查结果和快速操作方法,以帮助人们使用机器人对 Android 应用程序执行自动化功能测试,然后将结果报告给像 TeamCity 这样的持续集成服务器。请注意,这可能不是最好的解决方案,但我觉得人们可能和我的情况相同。所以在这里!

使用了以下库:

  • Robotium ( https://code.google.com/p/robotium/ ) :这是一个 Android 测试自动化框架。它可以帮助您执行自动化测试,例如单击按钮、自动填充文本以及许多其他事情。
  • Android Junit 报告
    ( http://zutubi.com/source/projects/android-junit-report/ ) :这个库对于将测试结果发布为可利用的 xml 格式非常有用。如果你想通过 Eclipse 运行你的测试,你会在旅途中看到你的测试结果,但是为了导出它们,这个库非常有用


  • 假设您有一个 Android 项目要测试,请创建一个 Android 测试项目(Eclipse 确实有一个很好的工作流程可以为您创建它)并将其设置为与 Robotium 一起使用。可以在此处找到有关如何操作的非常清晰的详细说明:https://code.google.com/p/robotium/wiki/Getting_Started

    然后,您需要将 Android Junit 报告添加到您的项目中,以便能够获取您的测试结果。为此,在您的 lib 文件夹中添加 Android Junit Report *.jar 库并将其添加到您的构建路径(在 Eclipse 中:项目 -> 属性 -> Java 构建路径 -> 库 -> 添加外部 Jar)。

    您还必须更改项目的测试运行程序。在您的测试项目的 AndroidManifest.xml 中添加以下内容:
    <instrumentation
          android:name="com.zutubi.android.junitreport.JUnitReportTestRunner"
          android:targetPackage="<insert your package ex:com.alth.myproject" />
    

    完成此操作后,您应该能够正确运行测试。测试结果应该在您的设备中可用(在以下文件夹/data/data//files/junit-report.xml 中)

    下一步是配置您的 TeamCity 构建步骤,以执行运行测试所需的所有不同操作。请注意,我的解决方案可能不是最佳解决方案!
  • 构建步骤 1:清理 - 命令行运行程序 - 此构建步骤可能是可选的,具体取决于您决定如何创建 build.xml 文件和此类构建决策。
    rm -rf <report folder>
    rm -rf <Project build.xml>
    rm -rf <Test project build.xml>
    android update project -p <Path to your project>
    android update test-projecct -m <Path to your project, relative to the test project> -p <Path to your test project>
    
  • 构建步骤 2:启动 AVD - 命令行运行程序 - 此构建步骤将启动 android 虚拟设备。如果您决定在实际设备上运行测试,则此步骤可能是可选的。
    emulator -avd <nameOfYourAvd> -no-boot-anim &
    sleep 45
    

    & 避免构建被虚拟设备启动中断(这是基本的 shell 命令)。 sleep 命令用于尝试让 AVD 为下一个构建步骤做好准备
  • 构建步骤 3:测试应用发布 - Ant runner:构建测试项目,将其安装在虚拟设备上
    Path to build xml file : <Path to your test project>/build.xml
    Additional Ant command line parameters : -f <Path to your test project>/build.xml clean debug install -Dsdk.dir=<Path to your android sdk>
    
  • 构建步骤 4:AVD 解锁 - 命令行运行程序:解锁 AVD 屏幕以进行测试
     bash avdUnlock.sh
    

    avdUnlock.sh 的主体在这里:( http://pastie.org/7919761 )。此脚本在常规 AVD 端口上发送信息以解锁屏幕。这可以通过仅将命令发送到特定端口并更改构建步骤 2 以将特定端口添加到模拟器启动来改进。然而,这并不是此操作指南的真正组成部分
  • 构建步骤 5:启动测试 - 命令行运行程序:启动测试
     adb shell pm list instrumentation
     adb shell am instrument -w <insert your test package ex:com.alth.myproject.test>/com.zutubi.android.junitreport.JUnitReportTestRunner
    

    可以删除第一个 adb 命令。这仅用于调试目的,以便查看设备上安装了哪些工具。
  • 构建步骤 6:获取测试 - 命令行运行程序:从设备检索测试报告
     adb pull /data/data/<insert your project package ex:com.alth.myproject>/files/junit-report.xml <report folder>/junit-report.xml
    
  • 构建第 7 步:最终模拟器杀死 - 命令行运行程序:杀死正在运行的 android 虚拟设备
     adb emu kill
    
  • 附加构建功能:XML 报告处理 - 报告类型:Ant JUnit
     Monitoring rules : <report folder>/*.xml
    


  • 此操作方法显然不是最佳选择,但可以回答原始问题。这样做,可以获取 android 功能测试报告并将其提供给 teamcity 以监控测试结果。

    我希望这会对某人有所帮助,如果您有问题,我会尝试回答您的问题。

    数量

    关于android - 将 Android 机器人测试与 Teamcity 连接起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16606080/

    相关文章:

    android - 设备管理器找不到 Android 调试 USB 连接

    android - 为什么线程不停止?

    java - 如何设计/组织与CMS中的创建/读取/更新/删除操作相关的测试? ( Selenium )

    automated-tests - 有没有办法匹配 RequestHook 中的 onRequest/onResponse 调用

    android - 删除项目后 RecyclerView 不更新

    java - onContextItemSelected 中奇怪的 int 比较错误

    node.js - 在执行期间访问 Allure 报告的参数/参数?

    selenium - 无法在 teamcity 的 Saucelabs 上启动 Protractor 测试

    Maven 与 Teamcity 集成

    TeamCity——是否可以将超时值与特定构建步骤相关联?