【问题标题】:Simulating loss of connection in tests在测试中模拟连接丢失
【发布时间】:2011-05-25 12:47:38
【问题描述】:

如何模拟(出于单元测试目的)网络连接丢失或将请求重定向到其他任何地方?

我在类定义中有一些硬编码的地址 :( 我想测试脚本在地址无法访问的情况下的行为。

我可以修改 etc/hosts(我在 win7 上),但我想在执行测试套件期间多次停用/修改连接。此外,每次测试前后都修改它是不切实际的。

因此,我需要在 windows 上为 php 设置一个代理,该代理能够接受来自运行脚本的命令(打开/关闭重定向)并能够根据调用的 url 制定重定向规则。

听起来像是Fiddler 的可能插件,但我没有找到任何插件:(

【问题讨论】:

  • 您正在测试程序的哪个部分?您可以模拟网络层还是实际测试网络层?
  • 我只需要模拟网络层的一部分——断开的连接。我有很多使用 3rd 方 api 的东西,所以我想避免模拟每个请求、每个 wsdl 文件等等。

标签: php windows unit-testing networking proxy


【解决方案1】:

问题是这里发生了很多事情。您基本上是想在应用程序运行时更改 DNS 设置...

您需要一个自定义 DNS 服务器 设置 Windows 以查看 DNS 服务器

在测试时,您必须登录 DNS 服务器,将名称解析更改为非工作 IP,并在 Windows 中刷新您的 dns (ipconfig /flushdns)。

要么这样,要么你不能仅仅实施一个防火墙来阻止某个地址的连接吗?

【讨论】:

  • 问题是,如何从运行脚本内部命令防火墙;
  • 你可以使用 exec (netsh.exe firewall set allowedprogram C:\php.exe ) 或者你的二进制文件在哪里?
【解决方案2】:

为此,您需要http://en.wikipedia.org/wiki/Mock_object。现在取决于你的应用程序的结构,看看你是否真的可以使用这样的东西:)


编辑: 如果你真的不能使用模拟对象,请再次尝试使用它们:) 如果你仍然不能,我在过去的某个时候使用这个(bat 脚本)来测试程序在连接断开时如何反应。我用 ping 模拟了sleepdevcon 来控制网络设置。它不能满足您的所有需求,但它可能会提供一个起点

:loop
    devcon disable *VEN_1969*
    ping -n 5 localhost
    devcon restart *VEN_1969*
    ping -n 5 localhost
    devcon enable *VEN_1969*
    ping -n 5 localhost
# rem goto loop

【讨论】:

  • 其实我做不到。我想测试的所有连接内容和代码处理连接错误都在一个类中,我无法模拟它。
  • 实际上,它给了我一个想法(使用通过 exec 调用的 bat 脚本来切换网络连接) - 我会尝试这种方法
猜你喜欢
  • 1970-01-01
  • 2017-12-06
  • 1970-01-01
  • 2021-05-28
  • 1970-01-01
  • 2017-09-24
  • 1970-01-01
  • 2015-04-03
  • 1970-01-01
相关资源
最近更新 更多