Php 在测试中模拟连接损耗

Php 在测试中模拟连接损耗,php,windows,unit-testing,networking,proxy,Php,Windows,Unit Testing,Networking,Proxy,我如何模拟(为了单元测试)网络连接丢失或将请求重定向到其他地方 我在类定义中有一些硬编码的地址:(并且我想测试脚本的行为,比如地址是不可访问的 我可以修改etc/hosts(我在win7上),但我想在执行测试套件的过程中多次停用/修改连接。而且,在每次测试之前和之后修改连接是不现实的 所以,我需要在windows上为php设置一个代理,这个代理能够接受运行脚本的命令(打开/关闭重定向),并且能够基于调用的url设置重定向规则 听起来像是可能的插件,但我没有找到任何:(你想要这个。现在取决于你的应

我如何模拟(为了单元测试)网络连接丢失或将请求重定向到其他地方

我在类定义中有一些硬编码的地址:(并且我想测试脚本的行为,比如地址是不可访问的

我可以修改etc/hosts(我在win7上),但我想在执行测试套件的过程中多次停用/修改连接。而且,在每次测试之前和之后修改连接是不现实的

所以,我需要在windows上为php设置一个代理,这个代理能够接受运行脚本的命令(打开/关闭重定向),并且能够基于调用的url设置重定向规则

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

你想要这个。现在取决于你的应用程序的结构,看你是否真的可以使用这样的东西:)


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

: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

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

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

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


或者,你可以不只是实施防火墙,阻止连接到某个地址吗

您正在测试程序的哪一部分?你能模拟网络层吗?或者你真的在测试网络层吗?我只需要模拟网络层断开连接的一部分。我有很多使用第三方api的东西,所以模拟每个请求、每个wsdl文件等等是我想要避免的事情。实际上,我不能。我想测试的所有连接材料和处理连接错误的代码都在一个类中,我无法模拟它。实际上,它给了我一个想法(使用通过exec调用的bat脚本切换网络连接)-我将尝试这种方法问题是,如何从运行脚本的内部命令防火墙;您可以使用exec(netsh.exe防火墙设置允许程序C:\php.exe)或任何二进制文件所在的位置?