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

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

网上查了很多资料,都说 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 条回复 时间 点赞

哈哈,有机会多多交流

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

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

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

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

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

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

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

感谢楼主的分享👏 👏

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

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

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