• #2 楼 @snake 直接把你的解决方案贴到正文里把。
    Jenkins 调用的 shell 确实和我们平时用的 shell 不一样,坑不少。

  • 不错,受教了。以后遇到需要对元素注入 tap 事件可以这么用。

  • #6 楼 @sunrise 求 Log 。。。
    你可以先试试用 log_source 把页面元素打印出来,然后看看里面是否确实有你需要的信息。
    Selendroid 和 appium 不一样,它不是使用 uiautomator 的。

  • #7 楼 @cissysnail 额,你前面提到的测试任务触发,测试执行,测试结果收集以及邮件发送用 Jenkins 跑你的测试就能做到了。小公司确实挺难,因为配环境比较麻烦,而且迭代速度快的话自动化测试(按照你的描述应该是用自动化的端到端测试)测试用例维护成本高。

    手动测试大部分情况下是端到端测试(测试中包含系统的两端,如服务端和客户端)。基于业务流程的 UI 自动化是可以实现端到端测试。

    这个文章的主旨是仅靠端到端测试创造的价值不够高(开发修 bug 时间慢),而且原文是 Google Test Blog 的,所以应该没考虑小公司。不过他的一些思想(指定测试策略时不仅要考虑能否覆盖所有功能,还要考虑修复 bug 的时间成本)小公司其实可以借鉴。

  • #4 楼 @seveniruby 工作经验多了解层面高很多啊!赞!
    确实现状是单测在国内的比例不高,大部分做自动化的都是端到端,Google 的以单测为基础的测试体系在国内很难推动(开发会说影响进度,不干)。
    我个人比较赞同文中关于只有 bug fix 才能创造价值的观点。同时我觉得端到端通过监控/完整的日志可以尽可能让开发容易定位问题所在(前提是程序有良好的日志/提供监控的接口)。

  • 从你的 log 看,你的 device name 有错误,所以识别不到你想用哪个设备。你把 desired_caps 的内容都贴出来看看?

  • #1 楼 @lihuazhang 嗯,我把原文补上了。这句大意就是端到端测试在理论上有合理性和存在意义吧。

  • #5 楼 @emily 对。
    #9 楼 @emily 你太抬举我了。我的经验和各个大牛比还是太少了。

  • 你这个问题我的理解其实就是脚本架构设计和编码规范。其实这和开发已经是一个概念的东西了(都是编程序嘛),所以你也可以请教一下你们开发(最好是架构师这个级别的,他们走过很多坑,所以给出的方案一般可行性比较好)

    我在这里按照我所知道的回答一下你的两个问题吧:

    我想知道大家都是用的什么方式对脚本和数据进行的分离,最好说具体些

    我们目前没有做很明确的分离,只是把跨用例的共用的数据放到一些 global 变量中共用。因为我们的项目基本上没多少数据输入的场景。对于登录这类需要用很多种数据来尝试的,我们在登录这个脚本里面单独写(因为其他脚本也用不上,分离出来意义不大)

    关于命名规则,什么样的命名方式方便日后维护和阅读,包括类名,方法名,数据名等...

    命名规则这个还真说不准,看你的脚本架构是按什么来确定这是一个类/方法的。如果是按照模块,那么类名自然是模块名称,方法名就是用例名称。用例名称能表达这个用例的测试点就可以了。如果你说的是调用的方法的封装,我们采用的是类似 robotframework 的命名方式:带有自校验的用 xxx should be,进行元素操作的:click elementget element textget 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 应该是唯一办法。

  • 点击动态键盘这个是测试点吗?是的话估计要 分割按钮 + 图形识别 + 坐标 。
    如果不是测试点,想办法直接输入那个框的值就好了。

  • 要找到合适的方法确实比较花时间,大赞!

  • appium iOS 真机问题 at 2015年04月27日

    #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 之前请先看官方文档

  • appium iOS 真机问题 at 2015年04月24日

    开发者账号不是这么用的。。。你的 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 在哪里,然后再运行上面那个命令。