1、功能自动化测试实现三要点 陈大卫2022年3月5日目录目录 自动化测试思想 脚本语言在测试中的优越性 自动化测试实现的工具无关性 功能自动化测试实现三要点自动化测试思想自动化测试思想 自动化测试中,是自动的做事,而不是自动的思考和创造; 自动化测试与测试本身都体现了借助外力往往是解决问题非常有效的途径; 人应该学会脚本/程序的“精确” ,而让我们的脚本/程序学会人的“模糊” ; 自动化测试无需追求完全自动化(100%都采用自动化),手动与自动相结合通常是测试实践中最佳选择;脚本语言在测试中的优越性脚本语言在测试中的优越性 脚本语言为胶着而设计,它是建立在已有的一套强大的系统之上的,虽然自身并不
2、适合直接编写高效、复杂的功能,但是它有着与其它语言编写的程序组件之间强大通信功能。脚本语言以牺牲执行速度来提高开发速度。 自动化测试实现的工具无关性自动化测试实现的工具无关性 工具虽各有不同,但关键在于哪款更适合你; 相信工具试用时的感觉; 利用日常自动化测试任务检验工具的有效性; 关注工具的灵活性与可扩展性; 工具的普及度与资料的齐备性; 版权和费用问题 功能自动化测试实现三要点功能自动化测试实现三要点 自动执行 状态识别 逻辑处理 自动执行自动执行 直接控件操作 模拟键盘鼠标操作 通过开放接口操作 收发网络消息实现交互直接控件操作直接控件操作 对被测控件进行操作容易掌控; 脚本执行的可靠性
3、和效率较高; 对于无法识别的控件需要学习或人为编程实现; 经常会用到控件抓取工具,例如SPY+等;模拟键盘鼠标操作模拟键盘鼠标操作 最原始,也是最普遍适用的方法; 为了提高模拟执行的可靠性,一般需要借助窗口定位与激活之类的函数初始化执行环境; 尽量采用相对坐标替换绝对坐标; 延缓操作,适时增加延时语句可有效提高脚本运行的稳定性;通过开放接口操作通过开放接口操作 可以脱离界面实现而直接测试功能逻辑; 需要开发人员与测试配合,提供完整的接口文档说明; 需要脚本工具支持调用其他开发语言或者动态库等的能力;收发网络消息实现交互收发网络消息实现交互 针对网络应用的自动测试实现,具有更好的通用性、效率、可
4、靠性; 可后台运行,也能够同时运行多个测试脚本; 不利于客户端的测试实现;状态识别状态识别 不进行状态识别(默认初始状态) 被测软件的状态识别 进行状态的内部推算 通过屏幕的像素扫描 直接读取内存数据 程序后门不进行状态识别不进行状态识别 顺序执行在回归测试中被广泛应用; 多数知名功能自动化测试工具,都支持顺序执行脚本的录制生成模式; 单纯录制的顺序执行脚本的实用价值和可靠程度不高一般都需要后期加强;被测软件的状态识别被测软件的状态识别 直接获取所需状态信息; 若无法直接获得,可通过状态伴随表现间接识别; 状态识别脚本的实现难易程度与工具所提供的支持函数范围,以及脚本编写人员对其熟悉程度有着直
5、接的关系;进行状态的内部推算进行状态的内部推算 将执行顺序从脚本中剥离出来,其目的类似于数据池,单一脚本实现多条测试用例; 内部推算适用于逻辑规则性强的被测试软件; 确保脚本与被测试软件的同步,必须严格控制好被测试软件的初始状态;通过屏幕的像素扫描通过屏幕的像素扫描 像素并不直接告诉脚本被测软件的状态,需要我们对其进行解释和转换,才能得到最终需要的信息。 屏幕的像素扫描效率比较低,图像识别难度又高,但是在很多特定场合下,仍然能有不错的收效。直接读取内存数据直接读取内存数据 测试脚本可以读取内存数据,但是一般不建议改写内存数据; 找到信息在内存中的位置,是该方法能否成功的关键因素;程序后门程序后
6、门 程序留有后门,一般多见于游戏项目的测试; 一般程序执行过程中可能有日志输出,也可以用于获取程序状态信息; 后门的预留需要在项目初期就明确提出,否则开发人员很少会愿意中途增加此功能,因为既费力,风险又高;逻辑处理逻辑处理 不进行逻辑处理(顺序执行) 使用简单算法完成常规处理 利用计算机优势得到较优解 借助外力,利用外部逻辑移花接木顺序执行顺序执行 最简单的逻辑,但是能广泛适用于常见的业务类软件; 顺序执行是构成脚本执行顺序最基础的逻辑。使用简单算法完成常规处理使用简单算法完成常规处理 测试中2/8原则的又一体现; 这种测试策略不仅在逻辑处理上适用,同样也在测试数据准备的其他测试活动中适用;
7、简单的逻辑,简单的算法可以有效减少测试脚本自身错误的可能性;利用计算机优势得到较优解利用计算机优势得到较优解 脚本的运行效率较低,但它不是蜗牛,人工实现起来困难的遍历,利用脚本就成为了可能; 注意度的把握,较优,而非最优。投入产出比是决定是否自动化测试的关键; “低”效率的脚本,同样需要调试,持续优化甚至全面测试;利用外部逻辑利用外部逻辑 无论对于自动化测试,还是测试本身,拿来主义都是值得推荐的; 使用外部资源测试发现问题后,应首先判断一下问题是出在了被测试软件,还是因为测试脚本,甚至是外部资源; 对于同系列软件,我们可以考虑将现有测试中的逻辑实现部分剥离,以在其他测试中被引用;内容小结内容小结 功能自动化测试实现三要点,自动执行、状态识别和逻辑处理; 各种方法综合应用,而不要被归纳出来的分类所限制; 自动化测试中思想最重要,不要过分追求工具的使用,而忽略了测试本身。问题与讨论问题与讨论谢谢谢谢 大家大家