Appium 分享一个基于 appium 的 UI 自动化测试,想知道大家的 UI 自动化都是怎么做的

李远洪 · 2016年12月04日 · 最后由 李远洪 回复于 2017年01月02日 · 2480 次阅读

网上查了很多资料,都说 UI 自动化不好做,并且很难维护

最主要是无法理解 UI 自动化的优势,自身感觉维护起来也很困难,对于移动变化多端的移动测试起不了什么作用

同时对 UI 自动化非常的迷茫,是否有做下去或研究下去的必要

希望在这里能得到一些建议,同时也了解一下大家的 UI 自动化是怎么做的

最近也是在尝试用 appium 来实现公司 app 某些比较稳定的功能和页面的自动化测试

项目地址:https://github.com/liyuanhong/miaopaiTest

项目截图如下:



其中主要的目录和文件为:

/MPTestCases ----------- 存放测试用例

/errorScreenShot ------------ 用例执行失败生成的错误截图

startTest.py ----------- 配置了要执行的测试用例

start.cmd ----------- 用于双击启动测试(windows 下)

startTest.py 代码如下:

python
import unittest
import sys
import os

curDir = sys.path[0]

#windows下的写法
sys.path.append(curDir + '\\MPTestCases\\login')
sys.path.append(curDir + '\\MPTestCases\\shoot')
sys.path.append(curDir + '\\MPTestCases\\settingPage')
sys.path.append(curDir + '\\MPTestCases\\hotPage')
sys.path.append(curDir + '\\MPTestCases\\myPage')
sys.path.append(curDir + '\\MPTestCases\\detailPage')

#mac下的写法
sys.path.append(curDir + '/MPTestCases/login')
sys.path.append(curDir + '/MPTestCases/shoot')
sys.path.append(curDir + '/MPTestCases/settingPage')
sys.path.append(curDir + '/MPTestCases/hotPage')
sys.path.append(curDir + '/MPTestCases/myPage')
sys.path.append(curDir + '/MPTestCases/detailPage')


import MPlogin
import MPshoot
import MPsetting
import MPHotpage
import MPHotpageBanner
import MPmypage
import MPdetailPage
import MPmypageSetUserInfo


#MPlogin.suite("0")
#MPshoot.suite("0")
#MPsetting.suite("0")
#MPHotpage.suite("0")
#MPHotpageBanner.suite("0")
#MPmypage.suite("0")
#MPdetailPage.suite("0")
MPmypageSetUserInfo.suite("0")

我把测试用例都放在了 MPTestCases 目录下,一个大功能的测试用例都新建一个目录来存放测试用例

MPTestCases 目录下有一个 common 目录,用来存放测试用例中会用到的公共模块,例如初始化用例,或开屏广告,登录、退出登录等模块;用例里面需要用到的时候就直接调用;并且如果该功能有改动,只需要改一个地方就好了。

执行用例会生成一些错误截图,能够抓取到崩溃的截图;原理是每一个用例都用 try ... except ... 包起来;一旦发生异常用例就会被判断执行失败;然后就在改执行失败的界面截图一张截图,截图的名字与用例的方法名相同;因此看截图就可以知道是哪个测试用例的那个方法发生了异常。如果程序崩溃了会有两种截图(1、带有 xxx 已停止运行的对话框截图 或者 2、截取到的图片为白屏或系统桌面)

同时用例执行完会生成一个 log 文件,对比错误截图和 log 文件即可定位到用例执行失败的原因

主要作用就是用来回归测试,验证 UI 或稳定的公共是否有异常

不知道大家的 UI 自动化是怎么做的,希望多多交流

共收到 11 条回复 时间 点赞

楼主好,你写到的 “程序崩溃了会有两种截图”,这个我也遇到了,是从一个 app 跳转到另一个 app 的时候,两张截图不一致,只是有的电脑上会出现这个问题,请问这个问题有办法解决没?

没有明白,一个 app 跳转到另一个 app 会有两张截图。
因为 android 手机,有的发生崩溃后会弹 XXX 程序无响应,有的是 app 直接闪退,这个应该是由 android 系统决定的。
而由于程序闪退后。appium 在当前界面找不到控件,发生异常,于是就取到了两种不一样的截图

感谢楼主的分享👏 👏

你好,你们的脚本是不是专门给安卓写的啊 全部都是用的 find_element_by_id 方法找节点 ios 上面是怎么做的呢 😁

是呀,只是针对 android 写的,还在探索更好的方法;才做自动化不久,有更好的方法很乐意多多交流😀

#5 楼 @liyuanhong 嗯哪 我也是刚接触 😅 我是 ios 开发的 老大安排让接入这个试试 其实之前 1.5.3 可以了 然后要支持 xcode8 ios10 就升级了到了 appium1.6.3 结果被坑惨了 xpath 要完全搞一遍不说 有些函数和配置也没作用了(send_keys 还有 autoAcceptAlerts) 不知道怎么搞了 😭 。 你们为啥没搞 ios 啊 appium 的初衷不就是想让两端可以共用一套脚本吗 😀

同样的 app,android 和 ios 的控件 id 都不一样,页面的结构也不一样;同一套脚本适用两个平台应该不现实吧;我不太了解 ios 这边,也许 android 和 ios 写两套脚本比写一套脚本更好维护一点;选择 appium 的原因也是因为他兼容 android 和 ios;配置一个环境就可以做两个平台的自动化测试;不过我现在觉得,做 UI 的自动化测试真是一件很费事的事情呢😅 ;如果手工做的化会更快,效率上还高一点;至少我目前测试的应用是这样的;目前移动应用的自动化测试还在探索,感觉我这边还用不上😁 ...

#7 楼 @liyuanhong 恩恩 这水有点深啊 😪 继续踩坑去了 😹

能补充些界面出来吗,那样更直观😀

haha 跟你的差不多,我大部分比较固定的按键做成全局变量也放进公共模块里

哈哈,有机会多多交流

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