我正在使用 java 开发一个套接字服务器游戏。我想在不使用游戏客户端(重且未完成)的情况下测试服务器是否正常工作(它如何以正确的方式处理接收到的消息、处理和响应......)。来自客户端的消息可能是原始二进制和加密的。
是否有适用于这种情况的框架或测试工具?
我正在使用 java 开发一个套接字服务器游戏。我想在不使用游戏客户端(重且未完成)的情况下测试服务器是否正常工作(它如何以正确的方式处理接收到的消息、处理和响应......)。来自客户端的消息可能是原始二进制和加密的。
是否有适用于这种情况的框架或测试工具?
在测试客户端服务器系统时,我采取了几个步骤,并且大多数情况下我倾向于对这类事情使用“普通”单元测试框架,尽管它只有在你已经将代码设计为可单元测试的情况下才有效。我也经常为服务器写一个特定的压力测试客户端;这可以创建数千个并发连接并在服务器上执行操作并检查它是否获得了预期的结果。
对于初始服务器测试,您希望对关键服务器组件进行一组单元测试;消息解析等,并且您希望将这些组件与实际处理网络的代码隔离开来(以便您可以在单元测试中对其进行全部测试)。将数据推送到服务器的消息解析器中,并确保它正确解析,并调用正确的东西等。
然后,您可以使用正常的单元测试框架来创建服务器对象的实例(带有合适的模拟),它在网络上侦听,然后创建一个简单的客户端,您可以在单元测试中实例化并测试服务器的各个方面。通常,您会发现实际上必须像这样测试的东西很少。通常,您希望使用网络以及独立于网络进行测试的连接建立和终止问题(毕竟,无论如何,您都可以从正常的单元测试中调用服务器类上的连接建立和断开代码)。
最后,您需要一个自定义客户端,它了解您的协议并且可以对拥有 1000 多个客户端的服务器施加压力——这是解决性能和线程问题的最佳方式。
我倾向于从一开始就致力于所有这些事情;有关更多详细信息,请参阅此博客文章。
如果您想手动操作,我建议您使用 telnet,或者,如果您使用的是 Linux,您可以使用 netcat 命令nc
。
如果你想要一些可以自动化的东西,例如单元测试,并且你熟悉 Python,我会推荐使用 Twisted:Twisted Examples
希望这可以帮助