• #7 楼 @601068603 对。接下来的考验的就是持久力了。

  • 想先问一下,你一开始那个错误出现的时候 session 是开着的吗?

  • #2 楼 @weamylady 嗯,电脑问题的话即使你找到原因花费时间也会很长。一般查 log 都查不到的问题都可以直接换电脑试试了。

  • #4 楼 @aubrey 你这个和帖子内容有啥关系。。。

    查到一个小错,优先级为 trival: 语言(Android) 应该是 Java

  • 。。。别把我当大神了。。。
    你这个情况我目前没遇到过,但我遇到过 adb 死活起不来的情况(输入后一直卡在那里,只有 ctrl+z 能强制退出),虽然已经弄到能把 log 打出来了,但通过 log 还是看不出具体原因。
    后面时间紧,直接换台电脑解决了。

    按照我目前理解,Appium 在这一部分应该只是调用了 adb,不过你提到的版本我没用过,我也不是很清楚。先 Mark 下,我晚些看看这两个版本的调用 adb 源码是怎样的。

  • #4 楼 @lovelorn0327 提醒一下,如果 adb server 没开的话,直接输入 adb devices 会有开 server 的信息,你要过滤掉开 server 的信息。

  • 有具体 Log 吗?

  • 对于你目前的需求,这个应该就够了。没必要纠结写得好不好,能用、好用最重要。

  • 这个开源团队搭源码环境的时候很多人遇到过,原因是 appium 一个依赖包(你图中的是 utf-8-validate)在 windows 上运行需要使用 VCBuild.exe 来编译。
    如果只是使用的话,直接用封装成 exe 版本的 appium 最方便,而且还能很方便地切换不同 appium 版本。
    这个严格来说也不算 appium 的问题,它只是依赖了一个对 windows 不大友好的包而已。。。

  • 有个小问题,你滑动的坐标是centreY +- 30,这里的 30 应该可以通过计算得到(比如通过控件高度来计算滑动一个元素所需要滑动的距离),而不需要作为固定值写在方法里吧?
    当然,如果你只有这个控件需要用到这个方法,写在里面问题应该也不大。

  • Python behave in BDD at 2015年03月26日

    #2 楼 @lucasluo 不客气。我也通过帖子学到不少。

  • Python behave in BDD at 2015年03月26日

    贴个文中用到的第三方库链接:http://pythonhosted.org/behave/
    看完后发现没找到里面用的库的链接(我觉得这种规范性的东西应该会有第三方库实现),然后搜了一下,应该就是文中用的那个库了。

  • appium 入门建议先把这里的文档看一下:
    https://github.com/testerhome/appium/tree/master/docs/cn
    看完后你就对 appium 有一定了解了。
    至于脚本的语法,你可以先学学 webdriver api,网上有很多教程的。

    不懂的地方先看官方文档,这样效率最高。

  • 从 log 看到是在这个位置开始出错的:

    info: [IOS_SYSLOG_ROW ] Mar 26 11:50:55 A050002673-iPhone6 ReportCrash[2216] <Notice>: MS:Notice: Injecting: (null) ReportCrash
    
    info: [IOS_SYSLOG_ROW ] Mar 26 11:50:55 A050002673-iPhone6 ReportCrash[2216] <Error>: task_set_exception_ports(B07, 400, F03, 0, 0) failed with error (4: (os/kern) invalid argument)
    info: [IOS_SYSLOG_ROW ] Mar 26 11:50:55 A050002673-iPhone6 ReportCrash[2216] <Notice>: ReportCrash acting against PID 2205
    
    info: [IOS_SYSLOG_ROW ] Mar 26 11:50:55 A050002673-iPhone6 diagnosticd[705] <Error>: error evaluating process info - pid: 2205, punique: 2205
    
    info: [IOS_SYSLOG_ROW ] Mar 26 11:50:55 A050002673-iPhone6 ReportCrash[2216] <Notice>: Formulating crash report for process ScriptAgent[2205]
    
    info: [IOS_SYSLOG_ROW ] Mar 26 11:50:55 A050002673-iPhone6 backboardd[74] <Notice>: ALS: SetDisplayFactor: factor=1.0000
    
    info: [debug] [INST STDERR] 2015-03-26 11:50:53.978 instruments[37140:6307] Automation Instrument ran into an exception while trying to run the script. UIAScriptAgentSignaledException
    

    Automation Instrument ran into an exception while trying to run the script. UIAScriptAgentSignaledException搜索,在 github 找到个类似的 issue:
    https://github.com/appium/appium/issues/3687
    你是不是没有打开开发者选项的Enable UI Automation?(我不大记得中文叫什么了)?

  • #18 楼 @uncle_mm 能解决就好!其实我之前也只知道>>><这种重定向第一次玩。。。

  • sample code 在另一个地方:https://github.com/appium/sample-code
    建议你先读文档,有个大概了解(特别是可能出现的问题和解决方案),再去跑 sample code。
    否则直接跑 sample code 你会遇到很多问题不知道怎么解决。

  • 你说得对,刚刚试了一下,就算 adb 断开了,monkey 还是会继续执行。应该它本来就是 daemon 模式执行的吧。

    另外关于你之前提到的adb shell < cmd.txt,试验了一下,确实可以用。
    给个简单例子你参考:

    test.bat

    adb shell < cmd.sh
    pause
    

    cmd.sh

    monkey 10 > /sdcard/monkey.log
    exit
    
    两个文件都放在电脑里的同一文件夹,记得cmd.sh最后一行是空行,否则会停在出现了exit命令但没执行的地方。
    cmd.sh里面就能像写shell脚本那样任意写命令了。
    
  • #7 楼 @uncle_mm 有一点不是很明白,你说 adb 连接不稳定,那么如果 adb 断开,你通过 adb 连到手机 shell 的连接也会断开啊。断开后 monkey 就会自动停止啦(除非另外搞个 daemon 来跑 monkey)。那么你的日志放电脑和放手机有啥区别?

  • #38 楼 @james88233 我又升级了。。。你看完文档后自己参考 sample code 写一写简单的脚本,你对怎么用 Appium 应该就大致了解了。
    webdriver 已经封装好很多方法,你直接拿来用就好了,方法名称和用法还是挺直观的。

  • @uncle_mm 你的 cmd.txt 里面写的是什么?
    另外,你要的是什么报告,需要先进入 shell 命令行才能得到?

  • #36 楼 @james88233 额,我这是个比喻。。。这个 “server”(实际上不一定是个 server)没有执行命令时和你平时把一个应用放在后台的压力差不多,不会把手机拖慢的。而且你没有运行 appium 脚本时,这个 server 什么都不会做。
    另外,自动化测试有分很多种,Appium 主要是 UI 自动化。而压力测试是另一种自动化,性能测试又是另一种自动化。UI 自动化的目的主要是保证功能的正确性(在 UI 层面),至于是否完全模拟用户操作取决于你的 “完全” 定义是什么。如果说和用户实际操作顺序/动作基本一样,这个是没问题的,如果你说连输入方式都一样(例如输入中文还能通过拼音 + 选字/手写来输入)这个不行。
    自动化不是万能的,至少不能完全替代手工测试。但用在适当的地方会很有用(例如需要重复执行的、基本不会再变化用例,如回归测试的用例)。

  • #2 楼 @monkey 他的意思应该是先通过 adb shell 进入手机的 shell,然后在这个 shell 里面调用 monkey 命令。他想把整个过程写成一个 bat 文件,双击就能执行。

  • 个人建议你看看 Appium 的一些文档:
    https://github.com/testerhome/appium/tree/master/docs/cn/
    这些文档都看完的话,你对 appium 基本有个整体了解了。

  • #33 楼 @james88233 额,先澄清一下,我不是老师,我也在学习中。。。
    Appium 的运行原理是通过 appium server 操作 Android UIAutomator(Android 4.3 以上)/Selendroid(Android 4.3 以下,2.3 以上)/UIAutomation(iOS),这些操作通过网络通讯进行控制(你可以理解为在手机上另外开了一个小的 server),而不是简单的翻译成其他其他语言的脚本。
    原封不动地跑起来这个可能性不大。因为界面是不可能完全一模一样的。即使你看起来是一模一样,但页面实际布局方式、控件的 id 等基本不会一样,所以元素的定位方式会不一样。但如果把元素定位分离出来做成独立的存储库(如 excel),脚本可重用性会高很多。
    简单的说,一个元素的 click 方法在 Android 和 iOS 都能用,效果都一样。不同的是你查找元素的方法有很大可能会不一样(毕竟源码不可能一样)。

    单种语言实现跨平台操作这个听起来很高大上,实际上就是通过网络通讯实现嘛。网络通讯用来发命令(语言无关,如使用 json 格式),接收方(Android 用 Java,iOS 用类 javascript)只要能识别这个命令并执行操作就好了。