Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为测试创建特定于区域的IP地址_Ip_Cucumber_Watir - Fatal编程技术网

为测试创建特定于区域的IP地址

为测试创建特定于区域的IP地址,ip,cucumber,watir,Ip,Cucumber,Watir,对于我正在进行的一个项目,我需要伪造一个IP地址,以显示我来自另一个国家 基本上,如果检测到的IP来自英国,则显示弹出窗口A,如果检测到的IP来自英国以外,则显示弹出窗口B 我希望能够自动化这一点。目前,我们所有的浏览器自动化测试都是用cucumber/watir编写的,我希望得到一个使用相同框架的解决方案 有人知道这样做的可能方法吗 谢谢 一般来说,如果您关心HTTP请求返回给您的结果,那么IP欺骗是不可能的 如果这是为了测试,您可以在本地网络上为每个用例“在英国”和“不在英国”运行虚拟机。

对于我正在进行的一个项目,我需要伪造一个IP地址,以显示我来自另一个国家

基本上,如果检测到的IP来自英国,则显示弹出窗口A,如果检测到的IP来自英国以外,则显示弹出窗口B

我希望能够自动化这一点。目前,我们所有的浏览器自动化测试都是用cucumber/watir编写的,我希望得到一个使用相同框架的解决方案

有人知道这样做的可能方法吗


谢谢

一般来说,如果您关心HTTP请求返回给您的结果,那么IP欺骗是不可能的

如果这是为了测试,您可以在本地网络上为每个用例“在英国”和“不在英国”运行虚拟机。为每个不会更改的VM分配本地IP地址

在每个VM中运行HTTP代理服务器,并根据测试用例通过不同的代理服务器进行单元测试连接

将覆盖逻辑添加到地理定位代码中,以将这些已知的本地IP地址视为它们各自测试位置的一部分。请注意,性能良好的代理服务器将在请求中同时包含代理服务器的IP地址和原始IP地址。请确保在此单元测试中使用代理服务器的IP地址进行地理定位(通常,您希望使用原始IP地址进行生产地理定位)


请注意,任何人都很容易绕过这种类型的控制。可以访问英国的HTTP代理服务器,该服务器故意不转发原始IP地址,只需很小的费用。

最简单的解决方案是添加一些神奇的请求参数,允许您在英国和其他国家之间切换。例如,我们可以这样说,启用“英国模式”:

然后,在服务器端应该有一些if语句来检查该参数。在伪代码中:

if get_parameters["country"] == "UK"
  enable_uk_mode
end

这将允许您只需指定
GET参数
即可打开“英国模式”或其他模式。我通常是这样做的,因为安装和管理所有VM-s和代理服务器以及管理它们的所有配置所花费的时间要比在应用程序的开发模式中添加一些控制逻辑所花费的时间多得多。

根据检测的方式,在某些情况下,您应该使用浏览器语言。这类代码:

profile = Selenium::WebDriver::Firefox::Profile.new
profile['intl.accept_languages'] = "fr"
browser = Watir::Browser.new :firefox, :profile => profile
对于IP,为什么不考虑使用代理?

profile = Selenium::WebDriver::Firefox::Profile.new
profile.proxy = Selenium::WebDriver::Proxy.new :http => 'my.proxy.com:8080', :ssl => 'my.proxy.com:8080'
browser = Watir::Browser.new :firefox, :profile => profile
我认为你应该两者兼而有之:这将更像是一个真正的用户在使用他的浏览器。

你可以添加一个“FakeIP”cookie,由你的HTTP请求处理程序检查,如果应用程序在测试模式下运行,那么它会用假IP覆盖真正的IP

示例:我实际上是在我的Play Framework/Scala应用程序中这样做的。在我的HTTP请求类中:

def ip =
  if (!Play.isTest)
    underlyingRequest.remoteAddress
  else
    underlyingRequest.cookies.get("FakeIP").map(_.value).getOrElse(
                                      underlyingRequest.remoteAddress)
然后在硒E2E测试的顶部:

add cookie ("FakeIP", "111.112.113.114")

没有比这更多的了:-)(至少在我的情况下)

如果你在同一个网络上,这可能是可能的。但我只是在猜测。不确定。这是一个合法的问题。。。通常有法律要求为不同的国家做不同的事情。当你编写这样的代码时,你如何设置它的自动测试?@Аааааааааааааааааааааааааа,因为他们问了一个关于欺骗I.P.的问题。?也许他/她实际上是在试图了解是否有人可以欺骗他/她的服务器上的I.P.,并且更喜欢以这种形式提问,以此作为获得更多回应的手段。像你们这样的妖精破坏了自由世界。嘿,伙计们,谢谢你们的及时回复。我无意窃取任何人的抄送号码!该项目旨在为客户提供本地化体验-例如,如果IP来自德国,则提供将他们带到.de site而不是.co.uk。很多网站都这样做,亚马逊,cnn等等。好的,谢谢Eric。我将与工作中的开发人员讨论这个问题,看看是否有可能使用虚拟机提出解决方案。
add cookie ("FakeIP", "111.112.113.114")