Android 机器人测试与 Teamcity 的接口

2024-03-01

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

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


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

使用了以下库:

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

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

然后,您需要将 Android Junit Report 添加到您的项目中,以便能够获取测试结果。为此,请将 Android Junit Report *.jar 库添加到您的 lib 文件夹中,并将其添加到您的构建路径(在 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 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 以监控测试结果。

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

Al_th

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 机器人测试与 Teamcity 的接口 的相关文章

  • 通过硬件按钮启动 Android 应用程序

    我希望构建一个在单击特定硬件按钮时启动的 Android 应用程序 例如 当我按下音量增大按钮 30 秒时 应用程序必须在不增加音量的情况下启动 我想知道这可能吗 你可以定义一个BroadcastReceiver处理ACTION MEDIA
  • 我可以为 Android Activity 分配“默认”OnClickListener() 吗?

    我有一个 Activity 对于布局中的每个小部件 我调用 setOnClickListener 来分配我的 OnClick 处理程序 在我的 OnClick 处理程序中 我使用 switch 语句根据 View 参数的 ID 为每个按钮执
  • Android 堆栈大小

    我如何获取和更改 Android 应用程序的堆栈大小 即使是主线程 主线程堆栈大小是在固件中设置的 无法修改 除非修改您自己手机的固件 正如斯特朗先生指出的那样 对于您分叉的线程 您可以设置自己的堆栈大小
  • phonestateintentreceiver.notifyPhoneCallState 的用途是什么?

    谁能告诉我有什么用phonestateintentreceiver notifyPhoneCallState 我知道现在在这里发布答案为时已晚 可能对将来参考此问题的人有所帮助 如果您的应用程序希望收到有关来电的通知 则必须调用notify
  • 显示葡萄牙语字符 Android

    我正在开发一个 Android 应用程序 当它应该写 n o 或 cabe a 等单词 例如带有 或 的字符 时 它会写 或 我已经检查过源文件编码 它是UTF 8 看起来 UTF8 被解释为 ISO 8859 x 理论上 你可以提供 ja
  • Android中的OpenGL用于视频显示

    是否可以使用 OpenGL 来显示视频并能够在运行时调整视图大小 是的 它的工作原理是通过 glTexSubImage2D 将每个帧作为纹理上传 我已经测试了基于 FFmpeg 的解码器的输出 效果很好
  • Android 3.1 USB 主机 - BroadcastReceiver 未收到 USB_DEVICE_ATTACHED

    我经历过USB 主机的描述和示例位于developer android com http developer android com guide topics usb host html检测连接和分离的 USB 设备 如果我在清单文件中使用
  • Android 操作系统上的 NFC 堆栈

    有人可以帮助我了解 NFC Android 堆栈的当前状态吗 随着OS 2 3发布了小型 NFC 支持 仅限于 NXP 标签读取 后来 Google 增强了 API 所以在OS 2 3 3支持更广泛的标签 并且还可以使用 p2p 我的问题是
  • 在 Android 中完成一项活动?

    我有一些活动 Home Activity gt Activity 1 gt Activity 2 gt Activity 3 gt HomeActivity finish finish finish Home Activity gt Act
  • Room - LiveData 观察器在数据库更新时不会触发

    我试图在下面的代码中找出 为什么在我用新数据填充数据库后 Room 的 LiveData observable 不会给我新的转变 这是放在我的活动的 onCreate 方法中 shiftsViewModel ViewModelProvide
  • 如何在Android项目中使用libffmpeg.so?

    我正在尝试在 Android 中创建一个屏幕录制应用程序 为此 我使用 FFmpeg 我已经创建了 libffmpeg so 文件 现在我想在 Android 项目中使用相同的方法来调用它的本机函数 我怎样才能做到这一点 本教程提供了有关此
  • 为什么大多数 Android 设备不像典型操作系统那样有交换区域?

    现在有 Android 支持交换区域来提高性能吗 出于哪些考虑 大多数 Android 设备放弃了该功能 现在有 Android 支持交换区域吗 Quoting 黛安 哈克伯恩 https groups google com d msg a
  • 如何使用android ndk r9b为Android编译FFMPEG

    我想设计一个Android应用程序 可以通过FFMPEG命令播放和编辑视频 但我不知道如何在Android上使用FFMPEG 我尝试过从Google搜索到的许多方法 但它们太旧了 无法实现 现在 FFMPEG的最新版本是2 1 1 Andr
  • 通过拖动块来选择多个项目

    首先 让我告诉你 我对此感到压力很大 因为我什至不知道概念 方法名称 所以我什至无法在谷歌中搜索它 因为我不知道关键字 但我会尝试我的最好解释一下 请随意修改我的内容和标题 我想要实现的是 我的视图组包含许多子视图 或者它可以是 GridV
  • Android 改造参数化@Headers

    我正在使用 OAuth 每次发出请求时都需要将 OAuth 令牌放入标头中 我看到 Header注释 但是有没有办法让它参数化 以便我可以在运行时传入 这是概念 Header Authorization OAuth var api vers
  • 如何在打开导航抽屉时使背景 Activity 变小?

    我想做我的背景Activity打开时稍微小一点Navigation Drawer 模拟存在的效果Airbnb应用 我想最好的解释是截图 但重点不是让 View 变小 而是让它成为与 Drawer 打开 关闭动画同步的动画 因此 如果您开始打
  • IllegalStateException:无法更改片段的标签,以前是 android:switcher,现在是 android:switcher

    我的活动使用TabLayout ViewPager 这里的选项卡和页面的数量是动态的 具体取决于从服务器获取的数据 崩溃是通过 Crashlytics 报告的 我无法复制它 我的活动代码 Override protected void on
  • Android:如何停止监听电话监听器? [复制]

    这个问题在这里已经有答案了 可能的重复 Android 为什么 PhoneCallListener 在活动完成后仍然存在 https stackoverflow com questions 11666853 android why phon
  • 超慢的表格布局性能

    我遇到了糟糕的 TableLayout 性能 我在这里读过一些帖子 谈论同样的事情 Android 动态创建表 性能不佳 https stackoverflow com questions 9813427 android dynamical
  • Android studio 问题:找不到广告:AdQuality:未指定

    我已经更新了 Android studio 刚刚打开我的项目 我收到以下错误 您能让我知道如何解决这个问题吗 Error A problem occurred configuring project memoryGameCollection

随机推荐

  • Windows服务“自托管”WCF:压缩?

    在 IIS 中使用 WCF 压缩我可以找到文档 但它面向使用 IIS 功能 我可以找到人们谈论他们如何编写自己的压缩处理程序 但这一切看起来都很定制 是否有压缩 WCF 的最佳实践 我们正在使用 http 绑定 编辑 将其设置为维基 没有任
  • Dart 中的字符串文字类型类似物

    我知道在 Dart 中没有字符串文字类型 例如 interface IButtonProps readonly variant primary secondary readonly size small regular big a litt
  • 以编程方式添加来自 Laravel 包的 CSRF 检查的异常

    问题简而言之 我正在寻找一种方法来删除VerifyCsrfToken来自包内的全局中间件管道without用户必须修改App Http Middleware VerifyCsrfToken 这可能吗 用例 我正在开发一个包 可以轻松地将推送
  • 查询 DynamoDB

    我有一个 DynamoDB 表 其中一个字母数字字符串作为哈希键 例如 d4ed6962 3ec2 4312 a480 96ecbb48c9da 我需要根据表中的另一个字段查询表 因此我需要查询来选择所有键 例如我的字段 x 位于 dat
  • 发生托管异常时“无可用源” - WPF Visual Studio 2010

    由于某种原因 我的 Visual Studio 2010 没有在我自己的代码上加载调试符号 我正在使用默认的 WPF 应用程序解决方案 使用我正在开发的示例 WPF 应用程序 并在调试模式下运行 当我进入调试状态时 我可以单步执行我的代码
  • Spark zipWithIndex 并行实现安全吗?

    如果我有一个文件 并且每行做了一个 RDD zipWithIndex row1 id1001 name address 0 row2 id1001 name address 1 row100000 id1001 name address 1
  • 无法从袜子确定袜子版本

    使用代理连接 HTTP 代理 10 3 100 207 端口 8080 使用python请求模块get函数 出现以下错误 无法从socks 10 3 100 207 8080 确定SOCKS版本 Try export all proxy s
  • 上传大文件到ftp C#

    我正在使用此代码将大文件上传到 ftp 站点 Code using FileStream fs new FileStream FileLoc FileMode Open FileAccess Read string ftpUrl strin
  • 升级到jetty-9.3.3后JSP编译错误

    我有一个在嵌入式 Jetty 7 6 8 jdk 6 上运行的 webapp 应用程序 但由于浏览器上的 Diffie Hellman 错误 我们决定迁移到较新版本的 Jetty 因此 我们迁移到 Jetty 9 3 3 由于Jetty 9
  • Hibernate 问题 java.lang.Boolean 无法使用 JDK 1.7 转换为 java.lang.String

    我面临着 Hibernate 的问题 使用 Hibernate 3 2 6 和 JDK 1 7 0 21 这个问题是由于 JDK 与 Hibernate 版本的兼容性造成的吗 这个问题是随机的 我仍然无法找到重现的步骤 2014 07 14
  • 如何为对象集合生成唯一的哈希值,而与它们的顺序无关[重复]

    这个问题在这里已经有答案了 假设我有课 public class MyClass public string Type get set public int Id get set 我有一个集合类 它只是一个强类型列表 public clas
  • 在Naoqi 2.5中的pepper平板电脑上安装Android应用程序

    我想使用 NaoQi 2 5 在 Pepper 上安装 Android 应用程序 为了实现这一点 尝试使用 AlTabletService 的隐藏方法 installApk 我在android studios中构建了一个APK并将其部署在p
  • 以无边框形式绘制夹具

    所以我有一个无边框表单 我需要调整它的大小 通过单击 4 个边或角中的任何一个 澄清一下 我希望我的表单像 Windows 7 中的默认便签一样无边框 通过使用 Julien Lebosquain 在这篇文章中提供的代码 我已经让它可以工作
  • 无法通过 OleDb 读取大小超过 ~1mb 的 xlsx 文件

    我想使用 sql 批量复制来加载数据 xlsx文件到数据库 但是 当文件大小超过大约 1mb 时 我遇到了问题 当我尝试打开时OleDbConnection我收到一个错误 No error message available result
  • MYSQL存储多张图片

    我有一个网页 用户可以在其中上传带有图像的文章 用户可以随文章上传的图像数量没有限制 MySQL 数据库中的每一行代表许多文章中的一篇 存储所有这些图像的最佳方式是什么 我知道我会使用 BLOBS LONGBLOBS 但如果我无法控制用户上
  • 如何在Python中可视化距离矩阵? [复制]

    这个问题在这里已经有答案了 我有一个距离矩阵 作为 DataFrame 如下所示 我想为其创建一个像第二个图一样的图来可视化距离 Python中是否有任何可用的绘图对象可以可视化距离矩阵 尝试以下任一方法 NetworkX http net
  • Docker 运行不工作,它说需要至少 1 个参数

    我正在学习 docker 并尝试运行现有的映像 第一个命令工作正常 command 1 docker run name static site e AUTHOR Mathi1 d P dockersamples static site 但下
  • 保持 Git 功能分支最新的策略

    我喜欢让我的功能分支与开发保持同步 频繁执行 git merge no ffdevelopment 有什么问题吗 然后最后运行 git flow feature finish feature1 这些功能分支是共享的 这意味着其他人可能正在处
  • 我需要在 MVC Razor 中对属性值进行编码吗?

    在 cshtml 文件中 我将一个字符串分配给一个属性 例如
  • Android 机器人测试与 Teamcity 的接口

    由于之前没有回答这个问题 也许我没有找到 我调查了以下问题 如何使用robotium在Android设备上执行自动化功能测试 并将其报告给TeamCity等持续集成服务器 由于我没有找到该具体问题的任何答案 因此我进行了调查 以下是我的调查