引子

很多朋友一直从事功能测试,想要学习自动化测试。但由于网上的资料大多表面化,内容雷同,缺少结合项目的实践,看完之后仍对自动化测试较为模糊。鉴于此,在本篇内容中,

先介绍自动化测试人员能力阶梯,目的是让初学者明确成长路线。随后举例一个自动化项目,来说明在面对一个实际业务测试需求时,是如何设计、实现、落地并产生价值的。

一、自动化测试人员能力阶梯

  • 基本自动化测试工具应用
  • 能够使用熟悉的语言,编写简单的测试脚本、使用常用的自动化测试框架
  • 自动化测试模块开发
  • 自动化测试框架设计
  • 定制系统业务级自动化方案

如上所列,自动化测试人员的能力阶梯分为五个阶段,自上而下能力要求递增,大家根据自己的能力进行对标,可明确自己下一步提升的方向。

注意:上面内容是我的朋友总结而成,与“业界标准”等标签无关,内容属于阅读者沟通交流范畴

二、一个误区

以前面试的时候,会问面试者一个问题:您的接口自动化测试是怎么做的?

有一些答案是这样的:postman呀。

继续问:假设您公司的产品是T3出行,现在有一个测试需求,我们要求在任何新功能上线之前,我们的 叫车→ 乘客下单 → 司机应答 → 完成订单 → 订单核算 → 奖励发放 ->支付 这一核心业务要完全自动化回归,这个需求如何通过postman实现?

回答:把上面涉及的几个接口串联起来就行了。

继续问:

1)订单数据是从kafka消费而来,存在漏单情况

2)奖励发放为每天定时计算

3)支付接口返回成功,但仍存在用户未收到的情况

针对上述实际业务场景和实现,如何通过postman实现保障?

回答:唔~

读到这里,朋友们应该能理解到我想表达的意思:postman无疑是一款非常便利的接口测试工具,它有一定的接口串联能力和一定的断言能力。

暂且不从自动化测试要求的低耦合、高灵活、高维护等几个方面来谈,上述举例的业务流程较实际业务已经是简化过的,单用postman工具已经无法保障。

postman是一款非常便利的接口测试辅助工具,但 postman应用 != 接口自动化测试

希望消除 工具应用 == 自动化测试,这一个误区。

三、实践

我一直觉得最好的学习方式,就是实践。现在拿我以前做过的一个项目,以 业务背景 -> 测试痛点 -> 解决抓手 -> 方案选取 -> 方案设计 -> 项目实现 -> 项目落地和产生业务价值

这一思路来给大家举例。

1、业务背景

广告投放是营销业务的手段。广告投放的曝光渠道流量最大的app是微信、抖音、今日头条等等。投放频率在高峰周期会打高一周三次。

这代表着,测试人员如果要保障投放效果,需要在每次上新之前测试 var 次 ,var = 数个投放渠道 乘以 数个手机品牌 乘以 每个品牌不同手机型号

靠人工来测试var次,无疑是低效的。对测试人员来说,这种重复的、大量的、机械的测试是很头痛的(我个人感觉是很痛苦的)

这时候,大家自然会说:这用市面上的一些UI自动化测试工具,不就可以解决吗?

下面要介绍的痛点就在这个疑问中。

2、测试痛点

在说痛点之前,先简单谈一下UI自动化测试工具的底层实现原理,获取页面元素坐标、path -> 模拟用户点击元素 -> 判断断言 -> 生成结果

即,获取页面元素坐标、path 是第一步。

然而,微信浏览器做了限制,你在微信内打开的h5页面,是无法直接获取到页面元素坐标的。

痛点随之而来。

3、方案选取 airtest

网易游戏开发了一款工具 airtest,airtest没有从根本上解决获取不到页面元素问题,而是另辟蹊径采用截图和找图的方式来达到测试目的。

其核心流程是:
封装方法初始化、操控移动端设备(adb、moco)-> 截取被测页面元素并保存 -> 判断断言(暴力图像识别) -> 生成结果
在测试中,发现airtest存在以下弊端:
1)使用门槛高
需要搭建airtest测试环境,要求测试人员具备python代码能力)
2)资源消耗大
airtest图片对比底层算法是机器学习图像识别的暴力匹配,简单来说就是在一张大图上,找出保存下来的截图,是一个找图和对比图片相似度的过程。
算法对cpu消耗资源较大,耗时较长。

注意:airtest源码支撑另外一种非暴力匹配算法,消耗资源低,但是准确度有待测试

3)测试结果准确性控制难度高
airtest测试结果是否准确与截图强相关。上面提到过测试结果的生成是一个找图的过程,若截图不“对”,则无法返回正确测试结果。
举一个日常测试中的小例子,假设要截取一个操作按钮,若按钮的背景图色偏淡,则需要截取范围扩大。若颜色突出,则截取范围必须正好,否则也可能造成测试结果不准。
总体来说,airtest在截图要求上比较高,需要有长时间工具使用经验的人来编写脚本。这同时增加了脚本调试的时间成本和测试用人门槛。

airtest在与stf联合开发调试中也存在一些问题,这里不再详述。
总结下来,airtest并没有完全达到节省人力、降低耗时、覆盖更广范围测试机型的目的。

最后,决定采用自主研发一款工具,配合airtest一起使用。

4、RR方案设计

方案核心流程:
录制 → 提交录制数据 → 添加断言 → 回放 → 提交回放数据 → 对比录制和回放数据中截图的相似度 → 生成测试结果
其中录制数据分为两部分:
一是用户操作行为数据,用来在其他设备上模拟用户操作
二是点击事件生成的截图数据,用户可自定义勾选其中的部分图片作为用例断言(assert),并将断言数据上传到server端。

回放设备接收到带断言的录制数据,会根据录制时的用户行为数据模拟用户操作,并在断言的位置截图生成截图数据,然后将

通过对比录制数据和回放数据中的截图相似度

5、项目实现

项目实现遇到过很多难点,其中最大的难点是如何获取页面。其他的比如server端与手机内部的js如何交互、任务状态机的轮转、手机状态的控制、各种失败情况的捕获、hash对比准确度。

6、项目落地和产生业务价值

该项目最后落地于投放广告业务,同时也支持,多台设备并行测试。
下面截取部分测试报告:

四、最后

项目实现方案,由于公司原因,不能写出。
本文篇幅较长,希望能对想做自动化测试的朋友,有所帮助。


nanakio
1 声望0 粉丝