Android自动化测试工具调研( 二 )


Instrumentation`会在App启动阶段被初始化,然后作为一个实例变量保存到ActivityThread对象中 。Application的创建,Activity生命周期方法的回调等其他操作,都会经过Instrumentation来完成,会先调用Instrumentation的相应方法 。
Instrumentation框架通过将主程序和测试程序运行在同一个进程来实现这些功能 。可以把Instrumentation理解为没有界面的activity,它具有启动能力和监控能力 。
Appium在说这个之前,先说下Selenium,Selenium是用来进行Web测试的框架,
selenium 本身是一套web自动化测试工具,但其经常被用于爬虫,解决一些复杂爬虫的问题 。
selenium 用于爬虫时,相当于模拟人操作浏览器,之后由此框架发展出了其他的框架

  • Robotium
也是基于Instrumentation的测试框架,目前国内外用的比较多,资料比较多,社区也比较活跃 。缺点是对测试人员来说要有一定的Java基础,了解Android基本组件,不能跨App 。
  • Selendroid基于Instrumentation的测试框架,可以测试Native App、Hybird App、Web App,但是网上资料较少,社区活跃度也不大,可以看做是一个Web版的Robotium,使用入门课参考selendroid 入门 · TesterHome
示例脚本:
AndroidDriver driver = new AndroidDriver(new URL("http://localhost:8080/wd/hub"), getDefaultCapabilities());driver.findElement(By.id("startUserRegistration")).click();WebDriverWait wait = new WebDriverWait(driver, 5);WebElement inputUsername = wait.until(ExpectedConditions.presenceOfElementLocated(By.id("inputUsername")));inputUsername.sendKeys(user.getUsername());Assert.assertEquals(nameInput.getText(), "Mr. Burns");nameInput.clear();nameInput.sendKeys(user.getName());takeScreenShot("User data entered.");driver.findElement(By.id("btnRegisterUser")).click();而Appium也是从Selenium延伸出来的,是目前最主流的移动测试自动化框架,不仅支持 Android 应用,而且适用于 iOS、混合和 Web 应用程序 。
上面说到的3个框架,测试流程原理为:
电脑在指定端口开启一个Web服务,并在手机安装一个对应的客户端APP程序,两者通过Socket协议链接
之后编写脚本里,可以使用Web服务的地址,之后脚本代码传输给Web服务,由Web服务再下发手机,有客户端APP程序执行对应的指令操作(这个APP程序实际上就是没有界面的,可以理解为一个后台进程)
Appium的桌面APP也是提供了一种测试录制功能,可以将测试的流程记录,并转为对应的脚本代码,如点击了什么控件,输入了什么内容等步骤,可以参考Appium的使用方法
它底层完全使用了 Selenium 和 WebDriver 的 API,所以如果你之前有用过 selenium, 几乎不需要额外的学习成本就可以使用 appium 。
Appium 通过 uiautomator(API 级别 16 或更高)和 Seledroid(API 级别低于 16)支持 Android,但是你不需要具体懂这两个框架的具体用法,appium 都已经帮你封装成了统一的使用规则 。
Appium 的优势之一是几乎可以使用任何编程语言(例如 Java、Objective-C、JavaScript、PHP、Ruby、Python 或 C# 等)编写 Appium 脚本 。不需要重新编译或改变应用程序来匹配Appium,Appium有一个非常大而活跃的社区 。
Airtest是网易出品的一款基于图像识别和poco控件识别的一款UI自动化测试套件,由Airtest框架、poco框架、airtestIDE 组成 。是一个跨平台的UI自动化测试框架,适用于游戏和App 。
Airtest的框架是网易团队自己开发的一个图像识别框架,这个框架的祖宗就是一种新颖的图形脚本语言Sikuli 。
Sikuli这个框架的原理是这样的:
计算机用户不需要一行行的去写代码,而是用屏幕截屏的方式,用截出来的图形摆列组合成神器的程序,这是Airtest的一部分 。

经验总结扩展阅读