我目前正在寻找自动测试Android应用程序的解决方案,原生Android应用程序以及混合Cordova / Phonegap应用程序 .
来自谷歌的UI Automator看起来很不错,但无法处理WebViews,这使我无法使用它 . 然后我找到了基于Selenium的有前途的自动化框架Appium,它也应该能够处理混合应用程序,但我无法使用WebViews,它似乎还没有完全实现,因为几个帖子也证明了 .
在尝试Appium之后,我发现了一个Selendroid的提示,这也应该适用于混合应用程序,但它似乎非常多,并且一直在崩溃我的整个计算机 .
那么,有没有人知道使用WebViews测试Android应用程序的工作解决方案?我正在使用Windows 7.非常感谢您提供任何帮助 .
3 回答
通常,使用基于API的方法测试混合应用程序是一项相当大的挑战 . 它可以完成,但通常你需要将UI技术(例如WebView,Native,OpenGL,...)与几个API或某种包装器(如Selendroid)集成 .
在TestObject(我是联合创始人之一),我们创建了一个基于图像的UI测试方法,专门用于混合应用程序,应用程序之间的交互等等 . 这种黑盒方法完全基于捕获屏幕 - 我们不关心底层发生了什么 .
随意尝试使用您的混合Cordova / Phonegap应用程序(http://testobject.com/),让我知道它与UI Automator,Selendroid,Appium相比有何效果 . 如果您遇到任何问题,请告诉我们 .
在第一种情况下,我们需要知道您喜欢哪种类型的测试 . 我想你想在UI上运行功能测试?这是我读完你的问题后我能想到的 .
所以让我们通过给定的环境进行拆分:
原生iOS
单元测试 - >在xCode中执行 . http://www.apple.com
功能测试 - > http://appium.io/
原生Android
单元测试 - > JUnit,http://developer.android.com/tools/testing/testing_android.html
功能测试 - > http://selendroid.io/
本地网络,如phonegap / cordova应用程序
单元测试 - > jsUnit,http://jsunit.berlios.de/
QA测试和检查式 - > jsHint / jsLint,http://www.jshint.com/&http://www.jslint.com/
功能测试 - > http://docs.seleniumhq.org/&https://npmjs.org/package/ripple-
功能测试(E2E) - > https://angular.github.io/protractor/#/或https://github.com/jasmine/jasmine
这是article about JavaScript QA / QS
native X - 适用于所有平台的开箱即用解决方案
基于appium的Gappium使用json编写测试 . 当我得到正确的线程时,它就是目前用Web / iOS测试的 . Android / Win似乎暂时没有集成:
https://github.com/appium/io.appium.gappium.sampleapp
关于phonegap&apache cordova功能测试的注意事项:
可以使用纹波和硒来测试混合应用程序 . 请记住,一些本机函数/插件(混合应用程序上的本机函数......)无法测试或需要以未知方式进行模拟 . 这是当下的镜头 .
对您来说可能很有用Continous Integration Server:
https://github.com/linslin/PHPUnit-selenium-HTMLGallery
我用我们自己的Cordova应用程序(sourceforge.net/p/ustadmobil/codehtml5cordova/ci/master/tree/)面对这一挑战;我需要一种方法将其与Jenkins CI整合 . 我们有Cordova特定代码(例如文件系统访问),所以只使用PhantomJS和Grunt不是一个选项 .
基本上我所做的是在模拟器中使用测试页面作为index.html启动应用程序,运行http服务器,然后让测试页面使用AJAX将结果传回 .
脚本启动包的模拟器
$ / opt / adt / sdk / tools / emulator-x86 -avd $ AVDNAME -qemu -m 2047&
$ EMULATEPID = $!
$ adb wait-for-device #wait for device启动$ adb shell输入keyevent 82 #unlock screen
使用qunit创建一个测试页面,完成后将通过AJAX调用传达测试结果 .
创建一个基本的nodejs服务器脚本,该脚本将侦听该ajax调用并将结果保存到文件中 . 然后,bash脚本可以读取该文件并确定测试是通过还是失败:请参阅http://sourceforge.net/p/ustadmobil/codehtml5cordova/ci/master/tree/setup/node-qunit-server/node-qunit-server.js
在构建脚本中等待结果文件到来,然后终止模拟器和NodeJS服务器 - 请参阅http://sourceforge.net/p/ustadmobil/codehtml5cordova/ci/master/tree/setup/android/unit-test-setup-android.sh
另外值得注意的是:这种方法适用于Cordova的跨平台性质:应该可以采用相同的方法运行iOS,Windows Phone模拟器等(我也使用这种测试方法来对抗我们共享大部分代码的NodeWebKit桌面版本) .
希望这可以帮助,
-麦克风