代理检查的单元测试

0 投票
2 回答
1026 浏览
提问于 2025-04-15 21:28

你可以很简单地获取机器的代理配置,方法是使用

def check_proxy():    
     import urllib2
     http_proxy = urllib2.getproxies().get('http')

我需要为上面写的函数写一个测试。为了做到这一点,我需要:

  1. 在测试期间把系统的代理设置为一个无效的URL(这听起来像个坏主意)。
  2. 给http_proxy提供一个无效的URL。

我该怎么做才能实现以上任意一个呢?

2 个回答

1

getproxies的具体行为会根据你使用的系统有所不同,但我认为在所有情况下,它首先会查看环境变量,然后再检查系统特定的位置来获取代理设置(比如在Windows系统中会查看注册表)。

所以你可以试试:

os.environ['HTTP_PROXY'] = 'whatever invalid URL you want'
2

从问题的标签来看,我看到你想为这个函数写 单元测试。那么你的 单元在哪里呢?你的业务逻辑在哪里呢?getproxiesget 是标准Python库里的函数。你不应该在你的单元测试中测试别人的代码。此外,只需要测试那些可能会出问题的东西就足够了,具体可以参考可能出错的事情

如果我误解了你的问题,实际上你的函数看起来像这样:

def check_proxy():    
     import urllib
     http_proxy = urllib.getproxies().get('http')
     # some “complex” code that uses http_proxy

而你不知道如何测试“复杂”的代码,因为它依赖于代理,我建议把这个函数拆分成两个:

def check_proxy():    
     import urllib
     http_proxy = urllib.getproxies().get('http')
     _check_proxy(http_proxy)

def _check_proxy(http_proxy):
     # some “complex” code that uses http_proxy

现在你可以单独测试 _check_proxy,使用你专门准备的任何模拟对象来充当 http_proxy。为 _check_proxy 写几个测试,而把原来的 check_proxy 留不测(在 单元 测试的意义上)。这样也是可以的。

撰写回答