本文首发于: 行者AI
自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程。通常,在设计了测试用例并通过评审之后,由测试人员根据测试用例中描述的规程一步步执行测试,得到实际结果与期望结果的比较。在此过程中,为了节省人力、时间或硬件资源,提高测试效率,便引入了自动化测试的概念。
1. 前提条件
1.1 需求变动不频繁
测试脚本的稳定性决定了自动化测试的维护成本。如果软件需求变动过于频繁,测试人员需要根据变动的需求来更新测试用例以及相关的测试脚本,而脚本的维护本身就是一个代码开发的过程,需要修改、调试,必要的时候还要修改自动化测试的框架,如果所花费的成本不低于利用其节省测试成本,那么自动化测试便是失败的。项目中的某些模块相对稳定,而某些模块需求变动性很大。我们便可对相对稳定的模块进行自动化测试,而变动较大的仍是用手工测试。
1.2 项目周期够长
自动化测试需求的确定、自动化测试框架的设计、测试脚本的编写与调试均需要相当长的时间来完成,这样的过程本身就是一个测试软件的开发过程,需要较长的时间来完成。如果项目的周期比较短,没有足够的时间去支持这样一个过程,那么自动化测试便成为笑谈。
1.3 自动化测试脚本可重复使用
如果费尽心思开发了一套近乎完美的自动化测试脚本,但是脚本的重复使用率很低,致使其间所耗费的成本大于所创造的经济价值,自动化测试便成为了测试人员的练手之作,而并非是真正可产生效益的测试手段了。另外,在手工测试无法完成,需要投入大量时间与人力时也需要考虑引入自动化测试。比如性能测试、配置测试、大数据量输入测试等。
2. 使用场合
通常适合于软件测试自动化的场合:
(1)回归测试,重复单一的数据录入或是击键等测试操作造成了不必要的时间浪费和人力浪费;
(2)测试人员对程序的理解和对设计文档的验证通常也要借助于测试自动化工具;
(3)采用自动化测试工具有利于测试报告文档的生成和版本的连贯性;
(4)自动化工具能够确定测试用例的覆盖路径,确定测试用例集对程序逻辑流程和控制流程的覆盖。
3. 实用工具
目前适合初学者接触的自动化测试软件便是Airtest IDE。 AirtestIDE 是一个跨平台的UI自动化测试编辑器,适用于游戏和App。自动化脚本录制、一键回放、报告查看,轻而易举实现自动化测试流程支持基于图像识别的 Airtest 框架,适用于所有Android和Windows游戏支持基于UI控件搜索的 Poco 框架,适用于Unity3d,Cocos2d与Android App,能够运行在Windows和MacOS上。
启动Android模拟器或者用PC连接一台手机。通过adb命令检查移动设备。
>adb devices
List of devices attached
emulator-5554 device
在Android模拟器中操作时,Airtest IDE右侧的界面是同步的,这一点比很多移动测试工具做的优秀,例如,appium desktop必须手动刷新才能获取最新的界面。
Airtest IDE支持Airtest脚本的录制,用法非常简单,你甚至可以先不用看它的API,通过录制来熟悉它的API。右侧Airtest窗口以及API,点击右上角录制按钮,然后,就可以在映射的Android模拟器界面上点点点了。
这种脚本更适合游戏,因为游戏界面很难定位,图片识别(截图)的方式确实是不错的选择。
下面将介绍一下常用控件函数:
(1)touch 这个函数是一个进行点击的函数,可以设置自己需要点击的图片,次数,长按时间和右键点击。
(2)wait 这个函数的意思就是等待,按照一定条件等待某样东西。这里可以设置等待时间,等待时间中的每次匹配间隔,图片没找到时可以调用的函数以及本身函数返回的值。
(3)swipe 这个函数是一个进行滑动的函数,从图片1滑动到图片2,我们需要设定好两张图片来进行滑动。在swipe函数中有一个值为duration,该值决定了滑动的时长,有的滑动操作对滑动的速度有一定的要求,快和慢会有不同的结果。在实际使用swipe函数时,设置多少个插值点,想要多快的滑动就成了这个函数使用的调试重点。
(4)exists 这个函数是一个判断存在的函数,判断一个图片是否存在,返回一个布尔值,方便判断的一个函数。
(5)keyevent 这个函数是一个进行手机控件点击的函数,例如手机上的“home”、“back”、“power”。
(6)text 这个函数是进行文本输入的函数,可以在被打开的输入框内输入文字。
(7)snapshot 这个函数是进行截图作用的函数。
(8)sleep 这个函数是进行延迟进行设置的函数。
(9)assert_exists 断言截图是否存在于当前页面,理解为如果这个截图内容存在,让他再测试报告中生成出什么文案。
(10)assert_not_exists 断言截图是否不存在于当前界面,理解为如果这个截图内容不存在,让他再测试报告中生成出什么文案。
(11)assert_equal 断言当前页面中是否包含设置好的文案,如果包含就通过。
(12)assert_not_equal 断言当前页面中是否不包含设置好的文案,如果不包含就通过。