在 iOS 上使用 UI 自动化测试屏幕跟踪
Posted
技术标签:
【中文标题】在 iOS 上使用 UI 自动化测试屏幕跟踪【英文标题】:Testing screen tracking with UI automation on iOS 【发布时间】:2014-04-07 11:52:13 【问题描述】:所以我有了这个想法,即使用 UI 自动化在我的应用上测试我的屏幕跟踪(使用 Google Analytics)的实现。
最初的想法是构建一个 UI 脚本来遍历屏幕,同时检查是否相应地发送了跟踪事件。我需要这个,因为有时我无法从视图控制器中组合所有内容,或者事件未按预期顺序转发。无论如何,我也应该测试我的应用程序的这方面,我认为 UI 自动化就是答案。
我已经使用 UI 自动化工具实现了一个脚本来浏览屏幕,并且它工作正常。我什至使用tuneup js 来使代码更加精简和易于理解。 我期待有类似的东西(一般来说,语法只是一种简化):
Being on screen X
Tap button A
Expect screen Y and tracking event for the screen Y
但是,据我所知,通过 UI 自动化测试屏幕跟踪是不可能的。 还是我错过了什么?
我想创建一个不可见的视图,它位于所有视图层次结构的顶部,并在每次加载新屏幕时更改其名称,以便我使用 UI 自动化对其进行测试,但这个想法听起来有点过头了.. .
你们有什么建议?寻找另一个 UI 自动化工具?用单元测试代替吗?
提前感谢您的帮助
【问题讨论】:
是否可以对 Google Analytics 进行手动测试?也许您可以分别测试三个不同的三个设备;我和我的搭档的方法是分析前一两天下载的数据,然后询问朋友他们访问过哪些页面。 可以在模拟器中使用GoogleAnalytics的参考:***.com/a/19934264/1546710 我想让它自动化,这样我就可以在服务器上运行它作为回归测试。我想将此包含在一种工作流测试中,以检查是否没有任何问题。 您能用您希望完成的任务更新问题吗? IE。你的成功标准是什么? (我猜“当我点击 X 时,事件 X 被发送到 GA”)。 @quellish,没错。我已经更新了我的问题。 【参考方案1】:您可以使用 UIAlertView 并检查这些警报。您可以弹出警报,而不是发送分析事件,以便您可以在 UIAutomation 中检查它。
像AnalyticsKit 这样的分析抽象框架提供了一种更改分析提供程序的简单方法。 AnalyticsKit 甚至有一个例子(看看 AnalyticsKitDebugProvider 类)。因此,对生产代码的更改很少。
您可以使用构建配置来设置构建变量来控制分析的初始化
id<AnalyticsKitProvider> provider
#ifdef USE_UI_AUTOMATION_ANALYTICS
provider = [[TestAutomationProvider alloc] init];
#else
provider = [[RealProvider alloc] initWithApiKey:API_KEY];
#endif
[AnalyticsKit initializeLoggers:@[provider]];
在 UIAutomation 中,您可以测试即将出现的警报。你可以利用 tuneup.js 包中的 assertions.js 来编写这样的函数
function checkForAlert()
var alert = null;
retry( function()
log("wait until alert appaers");
alert = UIATarget.localTarget().frontMostApp().alert();
assertNotNull(alert, "No alert found");
assertTrue("The name you can choose for the alert" == alert.name());
, 5, 1.0);
return alert;
;
这结合了等待警报和测试它是否最终出现。如果未出现警报,则测试将失败。
在您的测试中,您可以通过以下方式使用它:
var analyticAlert = checkForAlert() // if alert appears it will be in the var, otherwise the test fails at this point.
analyticAlert.buttons()["OK"].tap(); // dismiss the alert
要完成这项工作,您还需要设置一个 onAlert 处理程序。否则 UIAutomation 将尝试立即关闭您的警报。这必须在您的测试代码之前完成。 UIAutomation 文档中解释了警报处理。
function MyOnAlertHandler(alert)
if("The name you choose"==alert.name()) // filter all alerts created by analytics provider
return true; // handle alert in your test
return false // automaticly dismiss all other
UIATarget.onAlert = MyOnAlertHandler; // set the alert handler
【讨论】:
感谢您的回答和建议 AnalyticsKit,这似乎很有趣,但缺少一些文档。稍后必须再次检查他们的cmets。拥有 UIAlertView 的想法与我的拥有隐藏视图的想法非常相似,并且可能看起来比我的更有趣且更容易实现。但是,我必须区分这些警报和我用来向用户传达故障或信息的警报。你能权衡一下吗? 我试图更详细地概述您的测试的外观。 HTH以上是关于在 iOS 上使用 UI 自动化测试屏幕跟踪的主要内容,如果未能解决你的问题,请参考以下文章