使用Java在Linux上模拟网络连接问题
我希望对以下场景进行自动测试:使用Java在Linux上模拟网络连接问题,java,linux,windows,selenium,networking,Java,Linux,Windows,Selenium,Networking,我希望对以下场景进行自动测试: 用户登录并执行一些“冗长”操作。例如,尝试上载文件 在漫长的操作过程中,与服务器的连接会丢失一段时间,然后恢复 在这种情况下,应用程序执行它应该执行的任何操作。例如,向用户显示一条消息,询问他们是否要重试 我想要第一步。三,。由硒来完成。问题是:我如何做步骤2。作为自动化测试的一部分 有关工具和环境的详细信息: Selenium使用Junit在Java上运行 测试必须在Linux和Windows上运行 它还将在3种浏览器上运行:Firefox、Chrome、IE1
- 调用操纵计算机上连接的脚本李>
- 操纵浏览器的代理设置(代理指向假地址,从而断开连接)李>
- 使用真正的代理,它可以从代码中控制(例如,通过一些命令),因此它可以表现为“工作”或“断开”连接
那么:有人试图解决类似的问题吗?希望听到您认为可行的解决方案或替代方案。谢谢。您可以在windows on cmd上执行以下命令来断开和重新连接网络
> ipconfig /release
> ipconfig /renew
使用该命令,您可以使用Java运行时
类来执行该命令
Runtime.getRuntime().exec("ipconfig /release");
我已经在windows上测试过了,效果很好。
与cmd命令类似的Linux命令如下
> sudo ifconfig eth0 up
> sudo ifconfig eth0 down
请注意,这里eth0是我的以太网连接的名称。您可以使用列出所有连接的名称
> ifconfig -a
您可以查看以下线程,通过Java执行bash-选项1
短截图
您必须确定在实际场景中抛出异常的组件是什么,以及抛出异常的组件是什么。您可以很容易地做到这一点,在计算机中模拟场景,当抛出异常时,堆栈跟踪将确切地告诉您抛出异常的组件
然后,您必须扩展引发异常的组件并将其注入适当的位置,最终创建一个API来触发该异常
如果您认为需要一个框架来自动化此类测试,请查看
选择2 模拟 在这种情况下,模拟真实的网络问题将过于复杂,其好处不值得付出努力(imo) 无论如何。。。Linux有一个优秀的内置网络仿真层,名为,它允许与网络流量进行任何类型的无缝交互。此内核模块由
tc
命令行界面控制
当您希望将这些条件应用于单个端口时,要正确执行这些条件并不容易,因为您必须:
- 用于标记要限制的数据包的Netfilter规则
- 交通管制政策
- 筛选器将数据包绑定到策略
tc qdisc change dev eth0 root netem loss 10%
然后,您必须以某种java可控制的方式包装此功能。
如果我没能让你失望,这里有一个很好的指南:只要拔出你的网线。@Thrarry Wombat:因为我想在自动测试中完成,所以我需要一个机器人,与selenium测试同步来完成。这里的问题是你说的“使用JAVA”。有一些答案,但您至少需要JNI,因为连接问题发生在低于java能力的层中access@snovelli:我应该能够以某种方式从Java控制它,但它不必是中断连接的Java代码。也就是说,如果您有另一个服务/组件/应用程序可以执行实际的中断,只要我可以从Java代码中告诉它该做什么就可以了。谢谢。尽管如果我必须通过脚本来完成,我还是宁愿使用或操作
iptables
,因为禁用网络连接或释放IP与暂时失去网络连接完全不同。感谢您的详细回答。我们在单元测试级别上有选项1,但希望在用户级测试上有一些“更现实的”。