去年的一个项目中,BDD自动化测试(基于cucumber)部分,由于某些依赖到的API没有稳定的STG环境,我们需要启wiremock服务器来模拟依赖到的API。
需求:
1, 在测试程序执行之前启动wiremock服务器。
2, 在测试程序执行之后自动关闭wiremock服务器(如果不关闭,由于端口冲突,下次测试时wiremock服务器启动会失败)。
背景:
按照BDD的规范,按照功能划分,项目的自动化测试scenarios分布在多个功能feature文件中。因此测试代码分布在多个test类中。
这个需求貌似简单,在测试类的@before标签中开启wiremock服务器,@after标签中关闭服务器就好了。
但是,,如果一次自动化测试中需要执行多个测试Test类的话,这样就有问题
1, 如果A_Test.java关闭服务器不及时会导致B_Test.java启动服务器失败。
2, 如果加入延时或者同步机制的话导致代码复杂度变高,测试时间变长。
我的解决方案:
写一个如下WiremockClient类, 在每个Test类中使用该类。
public class WireMockClient {
private static WireMockServer server;
static {
server = new WireMockServer(options().port(18088));