Software Testing - UI自动化测试常用设计模式之单例(Java)

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net

为什么在UI自动化测试中会有单例的需求呢,我们考虑以下两个问题:

  1. UI操作非常耗时,如果每个Case都调用工厂方法去创建的话,运行时间成本将会巨大
  2. UI操作本来就不稳定,重复执行相同的操作会增加Case运行失败的机率

所以我们希望除了有这种工厂方法创建新产品的能力之外,还能够复用之前已经创建出来的产品,于是我们就有了使用单例模式的需求。一般提到单例模式,基本上就是懒汉式,饿汉式什么的,但这两种大概率都是不可用的。因为首先我们的操作是延迟加载的,只有到了使用的时候才会去UI上执行创建的操作,总不能直接在类加载的时候就执行吧。至于在不加锁的情况下判断一下对象是否为null也是不行的,因为现在的大规模UI自动化都是并发执行的。所以可选的方案就是加锁的双重检查机制以及静态内部类了。这里讲一下静态内部类:

  1. 静态内部类不会再类加载的时候就加载,而是有人调用getInstance()的时候才会加载,所以保证了延迟加载。

  2. Java的ClassLoader会保证静态内部类的线程安全,所以不用担心并发的问题。

这种静态内部类的实现方式,其优点是相较于锁的双重检查方来说实现起来简单,坑少,比如没有那个经典的指令重排序的问题。当然缺点也明显,就是一旦创建对象失败,那以后就再也没有机会重新创建对象了。而UI自动化又是出了名的不稳定,所以还是要慎重的。

猜你喜欢

转载自blog.csdn.net/chimomo/article/details/99824488