UI 自动化投入产出比不是太高。之所以大部分人喜欢用是因为它可以直观地看到执行过程。
从你的描述来看,你的问题在于软件更新太快(特指 UI 层面),导致维护成本高。
对于这种问题,建议你找个可以录制的 UI 测试框架(如 MonkeyTalk)来做半自动化(不是全自动化,要有人在那里看着的,因为录制的结果大多不带有校验,不过你录脚本的时候其实也把测试用例执行完了。。。),达到尽量降低自己的劳动量的目的。
纯 UI 自动化其实和单元测试差不多,只是 UI 自动化只关注 UI,单元测试关注功能实现。目的都是保证版本没被改坏。自动化最大的意义就是以最快速度验证功能的正确性,并以最低成本定位问题代码,就如软件工程里所说,一个 bug 在刚出现的时候被发现的话,修复成本最低,越到后面修复成本越高。
举个例子:
开发提交了代码,然后 CI 上跑一下测试用例,发现这个版本的一些基本功能被改坏了,开发赶紧再去 review 一下刚提交的代码哪里有问题,赶紧 fix。否则一个包含了数十个提交的版本在手工测试的时候发现 bug,然后开发还得从几十个提交中慢慢找是哪次变更导致这个问题出现。
想法很好,但测试必须用到的 SDK 苹果没有开放给 windows 用(估计后面也不大可能开放给 windows),所以目前没有解决方法。
Android 能全平台都能跑是因为他的 SDK 主要用 java 写且支持跨平台。
也许某一天有人能把 SDK 移植到 windows,那时候可能就有戏了。
从 dump 出来的 xml 看到确实有 class 名为android.widget.TextView的元素。而且代码也没看到啥问题。
鉴于你提到之前检测 webview 控件也有问题。建议你:
UISelector能否找到元素基本足够了。我个人有个小问题:不是由button触发call函数的吗?我没看到onClick()是因为截图中没截到?
下次的话软件代码给出关键代码(如配权限代码、call 函数)就好了。我们这个是移动测试论坛,除了软件开发技术,更关注的是对应的测试技术。后面再发帖的话能配套说一下有什么对应的测试代码(单元测试、UI 测试等)需要写、有什么测试点就更好了。
#6 楼 @james88233 我觉得会写代码和走自动化其实是两回事。
作为 IT 行业的一员,会写一些代码应该是基础技能(不要求能做很厉害的代码,但脚本基本应该是能写的)
目前能真正提高工作效率的测试用例基本都不可能使用纯录制(不能加验证是纯录制的最大缺点,而且纯录制复用度比较低)。
我觉得如 @lihuazhang 所说,测试要不往业务走(开发基本不可能精通业务),要不往开发走(不是指测试开发,而是懂得开发、懂得测试的且主要写测试代码的人)。
至于用户体验,那是 PM 和 UI/交互设计主要做的事情,测试提一下也行,不过大多会被忽略(在这方面没有话语权啊)。。。
#7 楼 @monkey 你这个是 waitForElement 这个方法的通用实现,确实和你说的一样,隔一段时间去 find 一下元素,直到超时或符合预期。但用在 toast 上默认 5s 的等待间隔太长了 (long 的 toast 是 3.5s,short 的是 2s)。所以对于 toast 应该有特殊处理,把时间间隔调低。
我觉得思寒想了解的是 selendroid 的 waitForElement 在查找By.partialLinkText("Your Toast message")时是怎么进行查找的,即怎么调低默认时间间隔,findElement怎么做到能支持查找toast的吧。
从这个 API 的 By 属性来看,应该有做什么特殊处理的。否则光靠partialLinkText内容来查找 toast 信息不是很准确,原因是上面 Accessibility Service 返回的 Event 信息除了包含 toast 还包含 Notification,不做进一步判断分不出来。
#5 楼 @seveniruby 好,后面我再详细看看它的实现。
#3 楼 @kasi 是的,我找到她的帖子了:
http://testerhome.com/topics/1483
不过她写的是 robotium 的。我这个主要面向 appium 。我这个文章主旨是通过 appium 那个帖子探究一下能通过什么方式获取到应用 toast 。
嗯。刚查到:
https://github.com/selendroid/selendroid/issues/86
晚些试验一下
基本看懂了你想表达什么。不过既然你想让大家都看明白,麻烦不要直接把结论和代码给出来,附上上下文(代码里的 Intent 是什么、怎么用,从测试的角度分析一下这个简单的应用有哪些测试点)或者源代码(github 地址就好)会好很多。
否则这类学习笔记没必要放到论坛,放在自己博客或者笔记本里就好了。
这帖子干嘛匿名……看到几条重复回复就是为了显示身份的了……
就像前面的人所说,崩溃的话可以做崩溃分析,有很多现成工具的。你用 monkey 的话把 logcat 中对应这个应用的 Log 截下来给开发,基本开发就知道是什么回事了(logcat 一般会包含启动了什么 activity,执行了什么函数,闪退是由于什么 error 等,开发一看基本就知道你到底做过什么操作了)。monkey 自己的操作 log 用处相对来说不是太大。
而且按照你们这样的闪退率,崩溃后自动发送崩溃报告这种功能应该是必须的。
说的不错,质量意识确实是第一位的。
直接在现有用例里面增加一步来调用 adb 删除 apk 的命令满足不了你的需要?
赞!
今晚学习内容就这个了!
具体什么弹出框对象?
我不确定 appium 是否支持使用网络位置作为 app 路径。
你试试用本地绝对路径?
另外,最好把 server 从接到 request(一一>) 到返回 response(<——) 的完整 log 都贴上,更方便看执行了什么步骤
可以看看这里
http://nowherewoman.com/selenium-handle-wait/
我不大清楚 appium 是否实现了 wait,你可以试一下。
好快! 必须赞!
受教了。能坚持 8 年不容易。
我们 testerhome 的微信公众号后面想增加心路历程这类文章,分享一下各位测试人的一些历程和感受。你有兴趣后面继续分享你的历程,然后我们分享到微信公众号中让更多人参考吗?
这和 appium 有什么关系……这是 python 的 unittest 模块的事。。。
找到一个解决方法:http://stackoverflow.com/questions/5387299/python-unittest-testcase-execution-order
最好还是自己写个方法来设置执行顺序。因为 unittest 设计的时候是假设你的用例顺序无关的,上面的解决方法相当于找窍门(毕竟它不是乱序的)。单元测试大部分都是顺序无关的。
#8 楼 @wangcityboy Oh,软件冲突这个确实比较麻烦。
有可能是 ifuse 的依赖库和 fruitstrap 有什么冲突。。。
#6 楼 @wangcityboy 这就奇怪了,我目前没遇见过。
你指定device_id能装上吗(fruitstrap -b <app> [device_id])
实在不行用ios-deploy来装吧。
#4 楼 @wangcityboy 你的 udid 是什么?你用xcodebuild -showsdks看看输出结果里有没有你插上的设备?