UiAutomator 自动化测试中如何兼容多版本 UI——模糊匹配

steven · 2016年12月02日 · 最后由 李腾 回复于 2016年12月07日 · 1407 次阅读

很多人说基于 UI 的自动化就是一个大坑,有时写自动化测试脚本而投入的工时可能比人工测试还多,尤其是软件版本多,迭代快的,脚本的维护工作尤其繁琐。
所以在设计脚本的时候就要考虑到兼容性,不能因为弹个窗口你就挂了,或者开发改了一个字母,你就不匹配了,又要改脚本。

当然,兼容性太强了,也可能把 bug 给放过了,还是把握住用例的检查点,确实的抓住这个点验证功能,而其他情况忽略。
只做功能点检查,是比较适合 UI 自动化的。模糊匹配,主要是在做 UI 搜索时,不使用精确的 equals,而是用 match。
举个例子:(Android,UiAutomator)
在搜索一个字符串的时候,忽略大小写。 java 正则表达式: (?i) abc 表示 abc 都忽略大小写 a(?i) bc 表示 bc 忽略大小写 a((?i) b) c
表示只有 b 忽略大小写 device.findObject(By.text(Pattern.compile(“(?i) ok”)));
这就避免了开发三天两头抽风改字串,一会 Ok,一会 OK,一会 ok;
这只是个简单的例子,但是我发现使用正则表达式,可以让脚本能兼容更多版本,环境,同时代码看起来也更加简洁,不用搞一堆的 if else。
这种模糊匹配,也更符合人的思维,比如 app crash 弹窗下一个 close 按钮,有可能几种文本,“close the app”“close current
app”“Close”。。。什么乱七八糟的都有。人看到这些其实第一反应也不会去读完整个文本,就看到 close 就点了呗。那脚本也不能太傻啊,
只要包含 close 这几个字母就可以了。
那就是 device.findObject(By.text(Pattern.compile(“.(?i) close.”)));
到现在才发现了枯燥的正则表达式原来那么好玩。

共收到 7 条回复 时间 点赞

学习了 之前总是精确的匹配 尤其是字符

—— 来自 TesterHome 官方 安卓客户端

其实严格来讲,楼主所说的 OK,写成 Ok,ok 就是 bug

#2 楼 @xinxjxjxj 你说对,严格来说是的,我觉得 ui 脚本比较适合做功能点检查,ok 还是 OK,如果这个点不是我这条 case 的功能验证点,那我就模糊一点呗。如果这条 case 就是要检查 ok 按钮的字串,那就必须精确对比了

楼主这个方法真心好,正则表达式很强大,UI 自动化要做得跟手工似的 “严丝合缝”,那维护成本真心噩梦

这个想法不错。

其实这类文案对比的测试可以加个开关,打开是精确匹配,关闭是模糊匹配,默认关闭。

不过对于产品验收来说,OK 写成了 Ok 确实是个 bug ,所以可以前期放过,后面加上。

只要用例设计合理就可以了,如果验收要求是 Ok,那就对应要一条用例是检查这两个字母的,就用精确对比。其他用例模糊就好,避免一个按钮大小写引起一堆用例脚本 fail

#6 楼 @steven 嗯,用例设计的思想就体现在这里,验证一个功能点的时候要假设其他功能点是正常的,其他点是否正确是有对应的用例来测试的。即使它错了也不会影响我当前的功能点,没有强依赖的,但是对于有强依赖的就不能这么设计了。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册