如何在java中模拟服务器关闭/可用?
我们的应用程序具有服务器/客户端。客户端支持脱机和联机工作模式。 所以我需要在服务器关闭时测试客户机,恢复连接 问题来了。如何模拟服务器关闭。使用代码从“向下”切换到“就绪”,或从“就绪”切换到“向下”状态 提前谢谢 约瑟夫如何在java中模拟服务器关闭/可用?,java,testing,jakarta-ee,automated-tests,Java,Testing,Jakarta Ee,Automated Tests,我们的应用程序具有服务器/客户端。客户端支持脱机和联机工作模式。 所以我需要在服务器关闭时测试客户机,恢复连接 问题来了。如何模拟服务器关闭。使用代码从“向下”切换到“就绪”,或从“就绪”切换到“向下”状态 提前谢谢 约瑟夫 更新: 实际上,我无法扩展服务器接口来响应错误的状态。在我的测试场景中,服务器是透明的。因此,不正确的url+端口是一种解决方案。 但是当会话有效时,我无法修改url。另一种方法是修改hosts文件以执行此操作。我必须面对Windows中的特权问题 取决于“服务器关闭”的
更新: 实际上,我无法扩展服务器接口来响应错误的状态。在我的测试场景中,服务器是透明的。因此,不正确的url+端口是一种解决方案。
但是当会话有效时,我无法修改url。另一种方法是修改hosts文件以执行此操作。我必须面对Windows中的特权问题 取决于“服务器关闭”的含义。可能的选择包括:
这取决于“服务器关闭”的含义。可能的选择包括:
要模拟服务器停机情况,您可以编写一个ServerAlwaysDown类扩展实际服务器,但为每个连接引发ServerException(HTTP 500)。要模拟服务器停机情况,您可以编写一个ServerAlwaysDown类扩展实际服务器,但引发ServerException(HTTP 500)对于每个连接。在测试服务器关闭时,提供任何不正确的URL或端口(首选)。对于恢复,请提供正确的URL/端口。在测试服务器关闭时,请提供任何不正确的URL或端口(首选)。对于恢复,请提供正确的URL/端口。如果要彻底使用离生产环境最近的测试,请将客户端和服务器放在不同的机器上,切断连接,然后恢复连接。如果要彻底使用离生产环境最近的测试,将客户端和服务器放在不同的机器上,切断连接,然后恢复连接。基本思想是以某种方式模拟服务器的行为。你可以这样做 您还可以创建用于测试目的的手动模拟。让客户端上服务器的“代理”实现此接口:
public interface IServer
{
bool foo();
}
您可以创建该服务器的“假”实现,并返回您想要的任何内容
public class FakeOfflineServer implements IServer
{
public bool foo()
{
// throw some exception here.
}
}
此方法允许您伪造不同的场景(无网络连接、无效凭据等)
您还可以在测试中使用组合从上到下切换:
public bool FakeServer implements IServer
{
private IServer offline = new FakeOfflineServer();
private IServer online = new Server();
public bool isUp = false;
private IServer getServer()
{
return isUp ? online : offline;
}
public bool foo()
{
return getServer().foo();
}
}
基本思想是以某种方式模拟服务器的行为。你可以这样做
您还可以创建用于测试目的的手动模拟。让客户端上服务器的“代理”实现此接口:
public interface IServer
{
bool foo();
}
您可以创建该服务器的“假”实现,并返回您想要的任何内容
public class FakeOfflineServer implements IServer
{
public bool foo()
{
// throw some exception here.
}
}
此方法允许您伪造不同的场景(无网络连接、无效凭据等)
您还可以在测试中使用组合从上到下切换:
public bool FakeServer implements IServer
{
private IServer offline = new FakeOfflineServer();
private IServer online = new Server();
public bool isUp = false;
private IServer getServer()
{
return isUp ? online : offline;
}
public bool foo()
{
return getServer().foo();
}
}
这取决于测试的位置。如果您正在进行单元测试,最好的选择是Bryan Menard建议的模拟 如果您在集成或生产环境中进行测试,实际上可以切断您与服务器之间的连接 根据您的操作系统,您可以通过多种方式实现这一点 对于基于Windows的系统来说,这是非常棒的。您几乎可以模拟任何情况,包括请求的延迟,甚至只是丢弃请求。它不需要Windows的管理员访问权限 对于基于linux的系统,我过去使用过的一种技术是使用代理服务器,或者在操作系统级别切断端口。您可以使用iptables执行此操作,例如: 拒绝访问特定端口(本例中为25) 再次允许:
/sbin/iptables --delete OUTPUT 1
您需要root访问才能使其工作,但它的优点是您不需要接触服务器或客户端配置。这取决于您在哪里进行测试。如果您正在进行单元测试,最好的选择是Bryan Menard建议的模拟 如果您在集成或生产环境中进行测试,实际上可以切断您与服务器之间的连接 根据您的操作系统,您可以通过多种方式实现这一点 对于基于Windows的系统来说,这是非常棒的。您几乎可以模拟任何情况,包括请求的延迟,甚至只是丢弃请求。它不需要Windows的管理员访问权限 对于基于linux的系统,我过去使用过的一种技术是使用代理服务器,或者在操作系统级别切断端口。您可以使用iptables执行此操作,例如: 拒绝访问特定端口(本例中为25) 再次允许:
/sbin/iptables --delete OUTPUT 1
您需要根用户访问才能工作,但它的优点是您不需要接触服务器或客户端配置。在这种情况下,只需从客户端拔下网络电缆怎么样?!:)对有道理。这是另一种情况。虽然它们属于同一种情况:无法连接到服务器。在这种情况下,只需从客户端拔下网络电缆怎么样?!:)对有道理。这是另一种情况。虽然它们属于相同的场景:无法访问服务器。