Appium 如何设计高效的 UI 自动化测试用例

爱摸鱼的小狐狸 · 2023年09月18日 · 最后由 真的不知道晚上吃什么 回复于 2023年09月20日 · 6194 次阅读

背景

UI 自动化测试现在是各个公司测试方向降本增效的途径之一,基本每个公司都想开展 UI 自动化测试,其中 UI 自动化测试又分为 APP 端的和 Web 端的。网上有很多入门的教程和 Demo 可以帮助大家很容易的写出一个 UI 自动化测试脚本 Demo,而且网上也有不少已经成型或者不错的 UI 自动化测试框架。但是大家在开始对自己的产品布局 UI 自动化测试实施方案的时候,建议大家还是要先思考一下设计什么样的 UI 自动化用例是最适合自己产品的,根据本人多年来 UI 自动化测试的实践经验来看,前期的设计方案尤其重要,否则一旦 UI 自动化测试脚本写到一定规模的时候,再回头分析的时候,会发现一些需要花很大成本去填的坑。对于自动化测试而言,最大的挑战其实就是成本和收益之间的权衡,所以大家在动手布局自己公司产品 UI 自动化测试之前,最好需要想清楚如何设计出高效的 UI 自动化测试用例。

下面是本人这些年根据自身经历和踩过的坑,得出的一些经验,希望可以帮助到正准备走这一步的测试友友们,如有不足,欢迎随时补足和沟通。

1. 测试用例简单清晰

  • 遵守简单原则

测试用例不需要考虑太多操作场景,简单明了的到达目的地页面,然后开始断言即可,越简单明了的操作步骤越好,每增加多一步都会对 UI 自动化测试的稳定性增加风险。

  • 保持在 10-20 个语句之间

一条测试用例脚本一定不要太多行,如果超出 20 行还没有实现测试脚本的目的,建议分成两个脚本,越多的行数后期维护成本越高,而且可读性越差。

  • 简答易懂清晰明了

脚本使用最简单的脚本编写,不要追求太多花里胡哨的写法,毕竟我们不是开发,写出的脚本要简单明了,备注清晰,所以参与编写的测试都能很容易的看懂。

2. 剥离出可复用的场景

  • 重复使用

对于重复的页面进入或者点击操作,要单独拿出来封装,这样大家都可以使用,而且后期 UI 有改动,也只需要维护一个方法即可,其他脚本不需要跟着改动,降低后期的优化成本。

  • 方法化

常用的方法建议封装成独立的方法进行维护,这样可以供大家调用,而且写出的脚本也会清晰易读,简单明了。

  • 避免重复的步骤

如果多个测试脚本用例都需要相同的步骤,建议将相同的部分提取出来单独封装,这样可以提高代码的编写速度和降低后期的维护成本。

3. 独立的测试用例

  • 每条用例可以独立执行

每条测试用例务必要做到可以独立运行,绝不可以依赖其他用例的结果,或者后面的用例有依赖自己的场景,如果有依赖就意味着前面的用例如果出现异常或者不稳定的时候,之后的测试用例将都会受到影响。

  • 用例之间互不影响

和上面一条类似,测试用例之间的数据产生和交换,不能阻碍或者影响其他用例的执行,否则一旦出现问题,将需要花费大量的时候进行排查,而且后期维护成本也会更高。

  • 三件套:前置,操作,验证

所有用例都要有前置操作也就是 setup() 的初始化过程,这个过程需要把用例所用到的准备事项都 ready,然后是具体用例的执行过程,最后是断言也就是验证部分,最后还应该有个 quit() 方法来处理测试用例需要回收的数据,比如用例 Pass 的时候可能需要删除用例产生的脏数据,或者需要还原一些设置或者状态。

4. 测试目的明确

  • 先设计目标,再设计用例

这一点很重要,不要边写用例边设计,要提前设计好每一条用例的步骤和断言点,最好是先把步骤和验证点写成备注,这样下面写测试用例脚本的时候可以有所参考,而且便于后期维护的时候可以很容易的知道每条用例具体是测什么的。

5. 从用户角度设计用例

  • 用例是否符合用户使用习惯

UI 自动化测试用例一定要符合用户的操作习惯,否则意义不大,一般 UI 自动化测试都是代替手工进行回归测试,回归测试基本也都是满足用户基本功能的操作,所以 UI 自动化测试用例一定要尽可能的模拟用户的操作轨迹和行为。

  • 满足用户的需求

UI 自动化测试用例一定是符合用户目的为前提的,不能自动化的操作是伪用户的行为,或者无益于用户的操作,比如不停的删除自己发布的评论,不停的恶意投诉正常用户。

  • 关注用户使用该功能的不同场景

可以多和数据组确认哪些场景是用户最常用的操作路径,这样写出的用例才最有效。

希望上面的分享能对大家有帮助,也欢迎各位有经验的友友们提出宝贵的建议,多谢!

共收到 8 条回复 时间 点赞

这就是理论与现实的差距,就比如:“保持在 10-20 个语句之间”,试问,什么样的 UI 自动化,只需要 20 个步骤就能完成。😅

2楼 已删除
Smobee 回复

可能不同业务不一样,我们的产品我看了下我们所有的脚本,排除 Log().log_info('xxxx') 之类的日志脚本,和前面默认初始化的代码行数,整个测试用例里面需要自己编写的脚本确实 20 以内可以搞定,个别复杂的场景另说,一般我们会把重复的场景和常用的方法进行封装,这样能减少脚本代码的编写量,你们可以试试

看实际的测试场景吧,“保持在 10-20 个语句之间” 也不要太执着于代码行数,不然可读性很差

Smobee 回复

用例分的越细,代码越少,分得太细的话,又明显是在捞绩效

还有一些内容可能和话题不直接相关,但属于 UI 自动化必须要一并做的,主要是从运营角度让 UI 自动化做得更好,补充一下:

  1. 不稳定的用例要做隔离观察:收集用例运行结果数据(一般云测平台都有),通过这些数据去识别用例稳定性并做不同处理策略,如高频失败的用例要聚类凸显出来;或将不稳定用例自动下线隔离运行,当运行连续通过 N 次后再自动上线
  2. 除了将用例做正向划分(如业务模块、用例优先级等常用思路),还可以做反向划分,如用例稳定区、漏测区、不稳定区、有效拦截区等等,会发现用例有更好的分级



借楼,像这种查询后清空查询怎么去断言没思路😂

不确定你用的是 selenium 或者其他的框架。这里有两个业务,一个是输入框内容清空,显示占位字符。一个重新查询,返回了结果。断言:1. 定位输入框,获取内容,是否为空或者占位符 2.前置中获取查询的总条数,在重置后,总条数是否一致。这就可以了

Aconment 回复

大概明白了,用的 selenium,流程大概是这样的,两个业务断言是不是就加多一个 WebDriverWait(self.driver,5, 1).until(EC.presence_of_element_located(('xpath',f"//div[text()='{suppliers_name}']"))) 就可以了

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册