新手区 TesterHome 新秀群成员-xiang2743,2014年9月 学习总结 1

mike · 2014年10月11日 · 最后由 恒温 回复于 2014年10月13日 · 3030 次阅读

环境
appium 版本:1.2.1
系统 :android 4.4.2
设备 :Android Emulator(Intel HAXM)

背景
------之前一直采用 robotium 对公司的产品进行 UI 的自动化测试。发觉 robotium 真心不错,测试应用和被测应用作为同一个进程的两个不同线程,测试线程能够访问被测应用的属性并进行设置,如 setText 等。做了以下工作:

------a) 我在 solo 类的基础上进行了简单的封装,采用面向对象的思想,加入操作后截图和延时等待的机制
------b) 结合 jenkins 进行用例的管理以及 junit 报告的展示,通过 bat 脚本进行控制,对失败用例进行重跑 (网易公司的 Orange 框架也实现了这个功能:http://qa.blog.163.com/blog/static/19014700220126254558638/)

:main

    set className=%1
    set functionName=%2

    set /a b=b+1
    echo %b%
    adb shell am instrument -e class %className%#%functionName% -w packageName/com.zutubi.android.junitreport.JUnitReportTestRunner
    adb pull /data/data/com.eg.android.packageName/files/junit-report.xml ./%functionName%.xml

    findstr "AssertionFailedError" %functionName%.xml > nul && echo "try it again" || set b=0

    if %b%==0 (
        echo "testcase is ok"
        goto :eof
    ) else (
        if %b%==3 (
            goto :eof
        ) else (
            goto :main
        )
    )

-----但 robotium 的硬伤在于不能跨进程测试,而且如果没有被测试应用的签名,可能会有些用例(涉及到签名校验)无法验证。
-----随着公司对产品安全性要求的提高,产品在签名这一块有了更多的校验,这样会导致更多的用例无法校验。因此考虑其它的测试框架

appium 的学习
----a) Appium 是基于 UIAutomator 框架实现的
----b) Appium 测试进程与目标应用进程是分开的
----c) 对 webview 的测试

final Set<String> contextNames = driver.getContextHandles();
for (final String  contextName : contextNames) { 
   System.out.println(contextName); 
} 
driver.context("WEBVIEW");

----d) 判断页面元素是否存在

public boolean elementExist(final By Locator) {
    try {
      driver.findElement(Locator);
      return true;
    } catch (final org.openqa.selenium.NoSuchElementException ex) {
      return false;
    }
  }

----e) 滑动手势

final TouchAction gesture = new TouchAction(driver).press(startX, stratY)
    .moveTo(startX, stratY + height)
    .moveTo(startX, stratY + height + height)
    .moveTo(startX + width, stratY + height + height).release();
gesture.perform();

待完成的问题 (路过的大侠,请指教一下)

1、应用的遍历测试。难点在于有些点击操作不会发生跳转,有些会,还没搞明白,要怎么处理
2、设置 DesiredCapabilities 时,如果有 apps,会识情况重装应用(即使已经安装好了),到底什么情况会重装应用,还没搞明白
3、设置 DesiredCapabilities 时,如果没有 apps,从日志来看,也不会清理目标机器上目标应用的运行环境,因为没有看到 pm clear

共收到 8 条回复 时间 点赞

1、具体情况具体分析
2、如果你带了路径,那么 appium 默认会帮你把系统中的该应用清除掉然后重新安装。如果不需要这个把步骤,把这行代码注释了就可以了
3、同 2

稍微更正下,appium 是驱动 Android 的 uiautomator 框架~iOS 同理~不是基于哈。

赞~虽然看不懂。

另外,请设置下头像~

目前还没有遇到过 Robotium 的签名问题 0.0,原来如此难搞……看来也要着手学习 Appium 了

mike #5 · 2014年10月11日 Author

#4 楼 @minminlee 其实签名不是主要问题,如果是测试第三方 apk,可以重签名下。主要是要搞跨进程测试,才转到 appium

启动 appium server 加上--no-reset 参数,不会重新安装应用(会 pm clear)

见 6、7 楼

#6 楼 @sanlengjingvv 错,默认就不会重装,只做 pm clear。 --no reset 就不会 pm clear

#7 楼
试了下,windowGUI-Develop Settings 的 Enable 有问题,没勾参数也生效了

默认:不重装,pm clear
--no-reset:不重装,不 pm clear
--full-reset:重装

官方文档貌似不对,写的是 “Android: don’t uninstall app before new session)”

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