稳定性更高的iOS自动化测试是怎么做的?

一、自动化测试的不稳定因素有哪些?

由于 iOS 设备本身的特性,对 iOS 应用做自动化测试天然得会比 PC、Android 等端多出诸多不稳定的因素。

1. WDA 连接不稳定

Facebook WebDriverAgent(WDA)是一个用于 iOS 设备的 WebDriver 服务器,它允许我们通过 WebDriver 协议进行远程控制和自动化测试。它基于 Apple 的 XCTest 框架构建,可以在模拟器和真实设备上运行。我们的 iOS 自动化测试基于 WDA 来实现对控件的识别、点击、输入值、读取值等操作。

图1 WDA 启动检查失败问题示例

WDA 启动后,会通过以下的代码向 iOS 设备发送一个 status 请求,检查连接是否成功,设备是否完成了测试前的准备。此时,有一定的概率 status 请求不能及时响应,用例还未执行就抛错退出了,具体的示例如图 1 所示。
	def is_ready(self) -> bool:
		try:
			self.http.get("status", timeout=3)
			return True
		except Exception as e:
			return False

2. 测试资源不稳定

测试资源即测试过程中所需的一切资源,以下列举一些常见的测试资源不稳定情形:

  • 测试账号: 有的测试账号有时效,过期了就没法登录使用,导致自动化测试任务全部失败。
  • 测试环境: 前端/后台的测试环境可能经常处于变更部署中,无法提供服务;或者包含开发人员新引入的严重Bug,导致自动化测试任务大量失败。
  • 测试文件: 有的测试用例需要操作一些提前构造好的文件、文档。这些重要的物料有时会被不知情的人、设计不合理的前置/后置步骤改写或删除,导致自动化测试任务部分失败。
  • 测试框架: 例如笔者近期遇到的一个问题,新版的Flutter中引入了这个Bug:自动化测试进行到一定界面的一定步骤时,会使APP发生Crash,但人工执行这些步骤不会Crash。

像这样的问题多如牛毛,几乎每天都有新的情况发生。但在正常的软件开发流程中,上述的大部分问题是测试/测开人员无法控制和避免的(除了第3条,可以妥善保存测试文件),因此也不是本文重点要解决的问题。

3. 高频变更的业务需求引入了很多控件定位的不稳定因素

随着业务和功能越来越完善和丰富,传统的自动化测试脚本基于XPath来定位控件,在这种APP高频变更的场景下显得岌岌可危,维护成本陡然增加。

下面在iOS端上,选择一个功能比较复杂的APP——企业微信——作为对象,举几个例子来说明:

3.1 图标控件的 XPath 变更导致无法识别

图2 高频变更的图标控件示例

如图2所示,高频变更的图标控件已用红色的方框标出。由于开发人员的代码变更,使得这些控件在整个页面的 DOM 树中位置层级、或者 class、id 等常用于定位控件的属性频繁发生变化,进而导致在自动化测试脚本中使用传统的通过 XPath 定位控件的方法经常失效。

  • 例如一某个控件的原始的XPath为:
	//div[@class="tool_bar"]/div[3]/div[1]/span

变更后变成了:

	//div[@class="tool_bar"]/div/div[2]/div[1]/span
  • 又例如某个控件的原始XPath为:
	//span[@id="at"]

变更后变成了:

	//span[@id="mention"]

这是我们每天都在经历的真实事件。对于维护自动化测试脚本的人来说,可能前一秒刚用n号安装包写好自动化脚本,下一秒换到n + 1号安装包就报错跑不了了。

但令人无法接受的是:这些图标现在清清楚楚的出现在屏幕中间,肉眼可见,自动化测试代码却无法定位和点击它们。

3.2 文字控件的 XPath 变更导致无法识别

图3 高频变更的文字控件示例

如图 3 所示&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IMplementist

你的鼓励,是我继续写文章的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值