java static block与runtimehook实现的Wiremock服务器的自动开启与关闭

去年的一个项目中,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));
                server.start();
                Runtime.getRuntime().addShutdownHook(new Thread(){
                        @Override
                        public void run() {
                                shutdown();
                        }
                });
        }
........
........
}

1,根据JVM加载类的代码执行顺序, 该 static 块内的代码仅在该类被JVM加载时,执行一次。因此避免了多次启动。

2,将停止wiremock的逻辑写在当前JVM的shutdownHook里面。在所有的测试执行完毕之后再停wiremock服务器,保证每个测试都有依赖的API可用。

另外:

wiremock是一个基于request行为模型匹配response的java开源服务器项目。简单好用。

官网:http://wiremock.org/

猜你喜欢

转载自blog.csdn.net/qijin2016/article/details/79590366
今日推荐