我刚刚阅读了DropWizard的测试文档,并且爱上了它的内置Integrated Testing capabilities。 TL; DR:它允许你的JUnit测试启动Jetty的内存实例,并基本上为你的API端点(资源方法)提供服务,因为它们将在野外存在。这允许您实际使用客户端(针对localhost
)命中您的API端点并查看它们的执行/执行方式。真棒!
我想知道是否可以使用这个DropWizardAppRule
(或类似的东西)启动/关闭我的DropWizard应用程序并验证没有抛出异常(冒烟测试);和
冒烟测试会很有用,因为可能是一些与初始化相关的异常,会阻止应用程序启动(错误的配置文件等),并且知道这个很好提前。类似地,关机时的烟雾测试很有帮助,因为我们可能会有一些没有正常关闭/拆除的东西,并且可能有一个不会死的悬挂线程等。
压力测试正在运行的内存服务器并查看它推送的位置(也许抛出一个OOME?)也很不错。
因此,给出以下代码片段:
public class IntegrationTest {
@ClassRule
public static final DropwizardAppRule<TestConfiguration> RULE =
new DropwizardAppRule<TestConfiguration>(MyApp.class, resourceFilePath("my-app-config.yaml"));
@Test
public void shouldStartWithNoExceptions() {
// ???
}
@Test
public void stressTest10kUsers() {
// What exceptions could I check for to see if the server pushed over after
// 10,000 random endpoints were hit?
}
@Test
public void shouldShutdownGracefully() {
// ???
}
}
我问:
答案 0 :(得分:4)
1。)我认为你的意思是杀死DW应用程序的异常,因为有一些想要的例外,比如WebAppExceptions。因此,您只需检查您的应用是否正在运行。如果出现重大问题,您的DW应用程序将无法启动,因此无法响应reuqests。
这里有一些额外的想法: a。)如果你想测试外部依赖项,jenkins或本地机器上的测试不是一个好主意。要在LIVE环境中测试您的应用程序,您可以创建HealthChecks并通过curl或http客户端工具进行检查。你应该得到一些json:
{"deadlocks":{"healthy":true},"database":{"healthy":true}}
从extern进行检查,例如,如果healthchecks singnals运行状况不佳,请从您的负载均衡器中删除此DW实例。添加一项Healthcheck的所有重要事项,这样您就可以确定您的应用是否健康。
b。)启动应用后进行一些资源测试。如果您收到DW应用程序正在运行的响应。 c。)检查您的日志。搜索日志级别错误或警告。如果没有条目,您可以假设您的应用程序无异常启动。
2.。)只需对您的资源发出HTTP请求;-) 响应意味着您的应用正在运行。
3.)我使用ShutdownHooks。在那里我检查所有重要的事情,例如DB连接关闭... 通常可以优雅地关闭你的应用程序。
您可以将剪辑的代码添加到Service构造函数中。
public YourService(){
...
// In case vm shutdown
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run()
{
// what should be closed if forced shudown
// ....
LOG.info(String.format("--- End of ShutDownHook (%s) ---", APPLICATION_NAME));
}
});
...
}
如果这不是想要的答案,请提供更多信息。