Instrumentation`会在App启动阶段被初始化,然后作为一个实例变量保存到ActivityThread对象中 。Application的创建,Activity生命周期方法的回调等其他操作,都会经过Instrumentation来完成,会先调用Instrumentation的相应方法 。
Instrumentation框架通过将主程序和测试程序运行在同一个进程来实现这些功能 。可以把Instrumentation理解为没有界面的activity,它具有启动能力和监控能力 。
Appium在说这个之前,先说下Selenium,Selenium是用来进行Web测试的框架,
selenium 本身是一套web自动化测试工具,但其经常被用于爬虫,解决一些复杂爬虫的问题 。
selenium 用于爬虫时,相当于模拟人操作浏览器,之后由此框架发展出了其他的框架
- Robotium
- 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的一部分 。经验总结扩展阅读
- 28 《吐血整理》高级系列教程-吃透Fiddler抓包教程-Fiddler如何抓取Android7.0以上的Https包-下篇
- 五 微软出品自动化神器【Playwright+Java】系列 之常见点击事件操作
- [Android开发学iOS系列] 快速上手UIKit
- [Android开发学iOS系列] ViewController
- [Android开发学iOS系列] iOS写UI的几种方式
- GitLab私有化部署 - CI/CD - 持续集成/交付/部署 - 源代码托管 & 自动化部署
- 实时营销引擎在vivo营销自动化中的实践 | 引擎篇04
- Playwright+Java 微软出品自动化神器Playwright系列(四)之浏览器操作
- Android类加载流程
- androidmanifest.xml 反编译
