不错,受教了。以后遇到需要对元素注入 tap 事件可以这么用。
#7 楼 @cissysnail 额,你前面提到的测试任务触发,测试执行,测试结果收集以及邮件发送用 Jenkins 跑你的测试就能做到了。小公司确实挺难,因为配环境比较麻烦,而且迭代速度快的话自动化测试(按照你的描述应该是用自动化的端到端测试)测试用例维护成本高。
手动测试大部分情况下是端到端测试(测试中包含系统的两端,如服务端和客户端)。基于业务流程的 UI 自动化是可以实现端到端测试。
这个文章的主旨是仅靠端到端测试创造的价值不够高(开发修 bug 时间慢),而且原文是 Google Test Blog 的,所以应该没考虑小公司。不过他的一些思想(指定测试策略时不仅要考虑能否覆盖所有功能,还要考虑修复 bug 的时间成本)小公司其实可以借鉴。
#4 楼 @seveniruby 工作经验多了解层面高很多啊!赞!
确实现状是单测在国内的比例不高,大部分做自动化的都是端到端,Google 的以单测为基础的测试体系在国内很难推动(开发会说影响进度,不干)。
我个人比较赞同文中关于只有 bug fix 才能创造价值的观点。同时我觉得端到端通过监控/完整的日志可以尽可能让开发容易定位问题所在(前提是程序有良好的日志/提供监控的接口)。
从你的 log 看,你的 device name 有错误,所以识别不到你想用哪个设备。你把 desired_caps 的内容都贴出来看看?
#1 楼 @lihuazhang 嗯,我把原文补上了。这句大意就是端到端测试在理论上有合理性和存在意义吧。
你这个问题我的理解其实就是脚本架构设计和编码规范。其实这和开发已经是一个概念的东西了(都是编程序嘛),所以你也可以请教一下你们开发(最好是架构师这个级别的,他们走过很多坑,所以给出的方案一般可行性比较好)
我在这里按照我所知道的回答一下你的两个问题吧:
我想知道大家都是用的什么方式对脚本和数据进行的分离,最好说具体些
我们目前没有做很明确的分离,只是把跨用例的共用的数据放到一些 global 变量中共用。因为我们的项目基本上没多少数据输入的场景。对于登录这类需要用很多种数据来尝试的,我们在登录这个脚本里面单独写(因为其他脚本也用不上,分离出来意义不大)
关于命名规则,什么样的命名方式方便日后维护和阅读,包括类名,方法名,数据名等...
命名规则这个还真说不准,看你的脚本架构是按什么来确定这是一个类/方法的。如果是按照模块,那么类名自然是模块名称,方法名就是用例名称。用例名称能表达这个用例的测试点就可以了。如果你说的是调用的方法的封装,我们采用的是类似 robotframework 的命名方式:带有自校验的用
xxx should be
,进行元素操作的:click element
,get element text
,get element attribute
。
PS:对于数据,正常情况下我不会采用你上面这种用序号结尾的命名方式,因为从名字上完全不知道这个数据是干嘛的,每次使用数据都要去声明文件里查,而且后面改数据也不知道这个数据是干吗用的,应该改哪个数据。
如果是同一用途的数据,我会用个 array 封装起来。如果是不同用途的,我会根据数据的用途来命名。如果数据实在太复杂,我会用表格来保存数据(其实表格保存是最清晰的和容易修改的)。
#4 楼 @gaoxing200851 根据你的描述,应该是你的手机上打开了不止一个 webview ,而你 switch 到的刚好不是你在界面上看到有内容的那个。但你的情况和之前我和恒温研究的有点出入,我们那个是一个 webview 里面开了不止一个 window ,你这个是本来就有多个 webview(webview 里面是否还有多个 window 还不知道)。
看你的代码是用 python ,可以用一个循环切换所有 context ,然后把每个 webview 的 source 都打印出来,看到底哪个是你在手机界面上看到的那个。然后再做进一步操作。
log 和代码请使用代码块。
为了论坛的排版统一,请先更新一下排版,然后我再继续回答你的问题。谢谢。
#2 楼 @gaoxing200851 代码使用代码块就好了,不要全部都放到代码块里面。。。
例如:
代码:
driver.findElementById("abc")
建议花 1~2 分钟学习一下 markdown 语法中 单行代码 和 代码块 部分。
同时参考一下论坛中精华帖的排版。
代码请使用代码块。谢谢。
另外,请把完整脚本附到正文中。
#11 楼 @gaoxing200851 对。上 google 的网站基本都需要 ***。
你在添加 nativeInstrumentsLib
这种方法中有看到这样的 log 吗:
info: [debug] Creating instruments
info: On some xcode 6 platforms, instruments-without-delay does not work. If you experience this, you will need to re-run appium with the --native-instruments-lib flag
info: [debug] Preparing uiauto bootstrap
XCode 6 以上需要用最新的 instruments-without-delay
,估计 appium 1.3.7 还没更新到最新的 instruments-without-delay
。
另外,如果你要使用你自己编译的 instruments ,估计要传 desired_caps['nativeInstrumentsLib'] = True
来让 appium 使用你自己的 instruments 。
对于在 appium 中去掉 delay ,目前 instruments-without-delay
应该是唯一办法。
点击动态键盘这个是测试点吗?是的话估计要 分割按钮 + 图形识别 + 坐标 。
如果不是测试点,想办法直接输入那个框的值就好了。
要找到合适的方法确实比较花时间,大赞!
#5 楼 @dream_tiwan 这么看你的 log 能正常输出啊(别管 log 里有没有 error ,这个工具只是负责把 iOS log 输出到 console 里面而已)。
不过建议你还是参考一下 @luis 的说法,先保证你的应用使用正确的编译方式吧。真机运行限制还是挺多的。
官网文档可以看这里: https://github.com/appium/appium/tree/master/docs/cn/appium-setup
应用闪退查 logcat 啊,看 appium log 不够的。
传送门:
https://github.com/appium/appium/blob/master/docs/cn/writing-running-appium/server-args.cn.md
那些不是 capabilities,是 server 启动参数。
Google 之前请先看官方文档
开发者账号不是这么用的。。。你的 app 没有源码,所以你也不可能改得了它的签名。
从你的 log 来看,你还没走到那一步(必须要 developer 签名的错误信息是instruments Permission to debug com.xxxx.xxxxx was denied , The app must be signed with a devepoment identity (e.g. iOS Developer)
)
你这个错误的原因是运行 ./deviceconsole -u (your phone udid)
这个命令出错。
如果你使用 npm 安装 appium 的,你可以去 /lib/node_modules/appium/build/
下运行 ./deviceconsole -u 8bfe0b4ff5aleac8981524cf50edc6710041ed2a
看看输出结果是什么。
如果是使用 appium.app,你用命令行在 appium.app 这个文件夹里找一下 deviceconsole 在哪里,然后再运行上面那个命令。