2024-10-03 06:28:03 发布
网友
在unittest期间,我希望将生成的URL与测试中定义的静态URL进行比较。对于这个比较,最好有一个TestCase.AsserterEqual或者类似的方法,如果所有查询和片段组件都存在且相等但不一定按顺序排列,则可以比较字符串格式的两个url,结果为True。在
在我自己实现这个功能之前,这个功能已经存在了吗?在
在标准库中使用urlparse实现这一点并不难:
from urlparse import urlparse, parse_qs def urlEq(url1, url2): pr1 = urlparse(url1) pr2 = urlparse(url2) return (pr1.scheme == pr2.scheme and pr1.netloc == pr2.netloc and pr1.path == pr2.path and parse_qs(pr1.query) == parse_qs(pr2.query)) # Prints True print urlEq("http://foo.com/blah?bar=1&foo=2", "http://foo.com/blah?foo=2&bar=1") # Prints False print urlEq("http://foo.com/blah?bar=1&foo=2", "http://foo.com/blah?foo=4&bar=1")
基本上,比较从URL解析的所有内容,但是使用parse_qs从查询字符串中获取字典。在
我不知道是否有内置的东西,但是您可以简单地使用urlparse并检查自己的查询参数,因为默认情况下考虑了顺序。在
urlparse
>>> import urlparse >>> url1 = 'http://google.com/?a=1&b=2' >>> url2 = 'http://google.com/?b=2&a=1' >>> # parse url ignoring query params order ... def parse_url(url): ... u = urlparse.urlparse(url) ... q = u.query ... u = urlparse.urlparse(u.geturl().replace(q, '')) ... return (u, urlparse.parse_qs(q)) ... >>> parse_url(url1) (ParseResult(scheme='http', netloc='google.com', path='/', params='', query='', fragment=''), {'a': ['1'], 'b': ['2']}) >>> def assert_url_equals(url1, url2): ... return parse_url(url1) == parse_url(url1) ... >>> assert_url_equals(url1, url2) True
在标准库中使用urlparse实现这一点并不难:
基本上,比较从URL解析的所有内容,但是使用parse_qs从查询字符串中获取字典。在
我不知道是否有内置的东西,但是您可以简单地使用
urlparse
并检查自己的查询参数,因为默认情况下考虑了顺序。在相关问题 更多 >
编程相关推荐