by Ruiming.Lv
1 自动化测试
1.1 自动化测试简介
自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程。从广义上来讲,一切通过工具(程序)的方式来代替或辅助手工测试的行为都可以看做自动化测试。从狭义上来讲,自动化测试就是通过工具记录或编写脚本的方式模拟手工测试的过程,通过回放或运行脚本来执行测试用例,从而代替人工对系统的功能进行验证。
1.2 自动化测试的优点
1)提高效率:通过运行自动化测试脚本,就可以在夜间、午休等时间进行测试用例回归,实现无人值守测试,大大提高了测试效率。
2)避免重复工作:每发布一个新的版本,其中大部分功能和界面都和上一个版本相似或完全相同,这部分功能就可以用自动化测试,避免人工重复劳动。
3)避免人为出错:例如忘了执行某些用例,用例执行步骤出错,输入数据出错等。
4)保证每次测试的一致性和可重复性:由于每次自动化测试运行的脚本是相同的,所以每次执行的测试具有一致性,这一点手工测试是很难做到的;而且,由于自动化测试的一致性,很容易发现被测软件的任何改变。
5)节省人力资源:减少人工,降低成本。
6)克服手工测试的局限性:许多死锁、资源冲突、多线程等有关的问题 ,通过手工测试很难捕捉到;系统压力、性能测试,以及需要模拟大数据或大并发用户等各种测试场景,很难通过手工测试执行;系统可靠性测试,需要模拟系统长时间运行,以验证系统能否稳定运行,难以通过手工测试执行。
1.3 哪些测试需要用自动化测试解决
并不是所有项目都适合自动化测试,适合自动化测试的项目一般具有如下特点:首先项目周期要长,需求不会频繁变更;其次系统中多数对象要可以被识别。
你不能指望自动化测试去帮你发现新的bug,自动化测试本身是不具备想象力的(相对于手工测试)。它的优势在于反复迭代,它的价值产出在于长期的回归测试,以保证被测产品在版本更新时的稳定性。
一般来说,具备如下特点的测试可以考虑使用自动化测试:
Ø 大量机械的、重复性的回归测试;
Ø 结果的正确性不依赖主观判断的测试;
Ø 需要模拟大量数据、大量并发量的测试;
Ø 需要不间断执行的测试;
Ø 需要短时间内完成的大量测试用例执行(比如完整的功能回归测试);
测试趋势应该就是往自动化测试去发展,这个方向是对的,但现实中往往会因为自动化框架的限制等原因,造成问题的漏测,因此适当的进行手工测试也是很有必要的。
2 自动化测试工具
2.1 移动端自动化测试工具的比较
比较流行的移动应用自动化测试工具的比较:
|
Appium |
Robotium |
UIAutomator |
是否支持跨进程 |
是 |
否 |
是 |
是否支持跨平台(Android、iOS) |
是 |
否 |
否 |
是否支持脚本录制 |
是(Appium的Mac版本有此功能) |
是(需付费) |
否 |
是否支持无源码的APK |
是 |
是 |
是 |
支持的编程语言 |
主流的编程语言都支持 |
Java |
Java |
支持的应用类型 |
Native apps、hybrid apps、mobile web apps |
Native apps、hybrid apps、web apps |
Native apps、hybrid apps |
注:
Native apps(原生应用):仅使用Android或iOS的标准SDK编写的应用;
Web apps(移动浏览器应用):用移动平台的浏览器访问的应用;
Hybrid apps(混合应用):把一个基于webview实现的功能进行包装的应用。
3 Appium
3.1 Appium简介
Appium是一个开源的自动化测试工具,其支持iOS和Android平台上的原生应用、基于移动浏览器的应用以及混合应用的测试。
1)Appium的设计理念
1. Appium使用的是移动平台供应商(iOS的UIAutomation和Android的Instrumentation及UIAutomator)提供的标准自动化测试框架,这就使得你不需要重新编译或者修改你的app;
2. Appium将不同的移动平台供应商的自动化测试框架进行一次更高层次的封装,做成一套统一的API(WebDriverAPI)提供出来,使得你不需要使用一门特定的语言和一个特定的框架去实现和运行你的测试;
3. Appium是开源的;
2)Appium原理框架图(网上图片)
从上图可以看出:
Appium的核心是基于C/S架构的网络服务器。它接受客户端(测试用例实现端)过来的连接,监听(客户端发送过来的)命令,在移动设备上运行命令,然后把包含命令运行结果的HTTP响应包发送回客户端。
Appium使用C/S的架构事实上为我们打开了很多可能性:我们可以在任何支持http 客户端API的语言上面实现我们的测试代码;我们可以把服务器端放在跟我们的测试运行机器完全不一样机器上(例如实现云端测试)。
3)相关组件解释
Ø Appium client:
使用WebDriver库或者基于WebDriver的扩展库(统称Appium客户端库)编写的测试用例。
Ø Appium server:
它是个http服务器,它专门接收从Appium client发送过来的命令,同时,它也是bootstrap客户端。它接收到客户端的命令后,需要把这些命令发送给目标机器的bootstrap,bootrap接收到命令并转换为UIAtuomator可以执行的命令。
Ø Selenium driver:
即WebDriver,WebDriver是一个用来进行web自动化测试的工具,但是它没有和任何测试框架进行绑定。它提供了一系列的API对web应用的中界面元素进行定位、模拟用户操作的API,底层利用JOSN通过HTTP与服务器进行交互。Appium扩展了WebDriver API,使它更适用于移动应用程序的测试。
Ø Bootstrap:
Bootstrap是Appium运行在安卓目标测试机器上的一个UiAutomator测试脚本,该脚本所做的事情是在目标机器开启一个socket服务器来把Appium从PC端过来的命令发送给UiAutomator来执行处理。
3.2 Appium测试环境搭建(Windows)
Appium测试环境的搭建步骤:
1)下载并安装nodejs