关于HttpRunner3获取IPV4和IPV6地址的bug解析
起因
- 在使用HttpRunner3进行接口测试,原本请求测试环境的接口,脚本是通过了的。后来因为要获取代码覆盖率,于是在本地部署了服务,使用HttpRunner直接请求本地服务进行接口测试。但是,一模一样的脚本,请求本地服务总是提示失败
失败现象
发现过程
- 找到失败提示代码的具体位置
- 在失败之前将response.txt写入文件记录,此时接口测试结果pass
但其实IP地址并没有获取到,查看log可以发现:
- 将写log代码改成sleep,接口测试结果fail,依旧是
ValueError: too many values to unpack (expected 2)
- 将写log代码改成
re = response.txt
,接口测试pass,由此可见response.txt对下面ip获取的代码有影响
原因
-
response.raw.connection.sock.getsockname()
这句代码会获取ip地址和端口号,但是默认返回的tuple里面只有两个元素,而如果网络是IPV6,会返回4个元素,导致解析失败
因此,这里我们需要把获取方式具体到元素的位置,如:
-
前面的探寻过程中发现response.text也会影响ip地址和端口的获取,原因如下:
解决方式是在不需要的时候主动关闭连接