远程桌面服务怎么测试
测试与远程服务交互的代码通常非常困难。 有很多折衷因素会影响您可以编写哪些测试以及要编写的测试数量。 在大多数情况下,您对从服务中获取的数据的控制为零,这使得断言至少很难说。
不久前,我使用VCR库针对远程服务编写了一些Ruby测试。 VCR解决了上述问题。 它记录了测试套件的HTTP交互,以便在以后的运行中重播它们。 快速和可重复的测试是显而易见的好处。
这个星期,我想知道Java是否也是如此。 事实证明,有Betamax可以做到这一点。 实际上,Betamax是VCR的Groovy端口,可以与任何JVM语言一起使用。
Betamax在您和目标主机之间安装代理,在tape
上记录每个请求和响应,并为已知请求重放tape
。 它适用于任何遵循Java代理设置的HTTP客户端,也适用于诸如Apache HttpClient和WSLite之类的不兼容Java代理设置的客户端。
例
在JUnit测试中,可以将Betamax用作方法级的TestRule
。 在应该记录和重放的每个测试方法上,您都放置了@Betamax
记录器并设置了磁带。
考虑下面的示例,其中我使用Spotify Metadata API来获得艺术家的欢迎。 在此示例中,我使用Apache HttpClient库并将其配置为Betamax。
public class SpotifyTest {@Rule public final Recorder recorder = new Recorder();private final DefaultHttpClient http = new DefaultHttpClient();@Betamax(tape = "fixtures/popularity")@Testpublic void get_popularity() throws Exception {Spotify spotify = new Spotify(http);assertThat(spotify.popularity("The Beatles"), is(.55f));}@Beforepublic void setUp() throws Exception {BetamaxRoutePlanner.configure(http);}
}
在编写此代码时,甲壳虫乐队的流行度为.55,但由于此数字基于用户的意见,因此很有可能会发生变化。 使用Betamax磁带将获得相同的响应(只要请求不变),并允许声明0.55以使其受欢迎。
HTTPS
正如我向您展示的那样,Betamax使用代理或包装器类正确记录并重放任何HTTP通信(如示例中所示)。 还支持HTTPS,但是当您在基于代理的设置中使用Betamax时,HTTPS可能会更有趣。 使用包装器可以正常工作。
HTTPS和基于代理的设置的问题显然是代理无法在标准HTTPS通信中拦截数据。 这就是我们信任HTTPS的原因。
Betamax可以解决这个问题。 您可以在Betamax Recorder
上启用sslSupport
。 如果您的客户端代码可以使用SSL证书链断开了,则可以进行此工作。
同样,当您使用基于代理的设置时,这实际上只是一个问题。 使用客户端包装程序可以直接在API调用上启用Betamax,从而简化HTTPS通信。
自己尝试
Betamax可以帮助您为远程服务的客户端编写快速且可重复的单元测试。 对我最有益的是,由于消除了远程通信,因此测试速度非常快。 断言特定的值可能会有所帮助,尽管我个人比较喜欢这些测试的基于属性的样式(例如,流行度必须为> = 0和<= 5的数字)。
下次您与远程服务进行交互时,请尝试Betamax。
翻译自: https://www.javacodegeeks.com/2014/03/fast-remote-service-tests.html
远程桌面服务怎么测试