1.背景
在编写自动化测试用例过程中,往往会遇见被测代码有异步或者队列处理的中间过程;如果需要校验这部分结果,必须等待异步操作结束或队列消费完,而这个中间等待的时间是不确定的,常常是根据经验值设定,通过Thread.sleep(经验值)
,而这个时间通常会设置成最长的那次时间,但是可能99%次这个异步操作都低于这个最长的时间,这就造成了每次执行这个测试用例都花费了异步任务最长的那次时间。
现介绍一款开源工具awaitility:https://github.com/awaitility/awaitility,该工具提供轮询的方式,判断操作是否完成,以最短的时间获取异步任务结果。
2.入门
awaitility支持Java、Scala、Groovy,本文以Java介绍。
maven工程在pom.xml添加awaitility依赖:
<dependency>
<groupId>org.awaitility</groupId>
<artifactId>awaitility</artifactId>
<version>2.0.0</version>
<scope>test</scope>
</dependency>
其他方式,请参考:
https://github.com/awaitility/awaitility/wiki/Getting_started
3.实例
测试类import相关Class:
import java.util.concurrent.Callable;
import static java.util.concurrent.TimeUnit.*;
import static org.awaitility.Awaitility.*;
import static org.awaitility.Duration.*;
import static org.awaitility.pollinterval.FibonacciPollInterval.*;
构造一个异步任务: