Python 为什么在使用请求\u mock时,覆盖率报告某些机器上的无效信息?
以下代码路径:Python 为什么在使用请求\u mock时,覆盖率报告某些机器上的无效信息?,python,macos,python-requests,requests-mock,Python,Macos,Python Requests,Requests Mock,以下代码路径: def _get_token(url, data): print('will show covered') response = requests.post(url, data=data) print('will not show covered but will still print') access_token = response.json().get('access_token') return 'Bearer {0}'.form
def _get_token(url, data):
print('will show covered')
response = requests.post(url, data=data)
print('will not show covered but will still print')
access_token = response.json().get('access_token')
return 'Bearer {0}'.format(access_token)
在与请求\u mock
一起运行时,会导致覆盖率为我们错误地报告其行:
import requests_mock
def test_parse_response(self):
with requests_mock.mock() as rm:
rm.post(token_url, status_code=200, json={'access_token': 'ACCESSTOKEN'})
self.assertEqual( _get_token(token_url, {}), 'Bearer ACCESSTOKEN')
在某些机器上,requests.post
行之后的行被错误地报告(因为它们没有报告所覆盖行的覆盖范围)。但是,关闭wifi会导致这些线路覆盖(?)
测试将使用tox和repo根目录中的tox.ini文件运行,该文件将测试命令设置为:
[testenv]
nosetests --exclude-dir=mypackage/test/donttestme --cover-xml --cover-xml-file=coverage_file.xml
使用包含以下内容的setup.cfg:
[nosetests]
with-coverage=true
cover-erase=true
cover-package=mypackage
cover-min-percentage=100
cover-branches=true
with-xunit=true
[coverage:report]
exclude_lines =
if __name__ == .__main__.:
pragma: no cover
我已经缩小了范围:
- 正在执行代码路径(否则测试将失败,代码路径将被命中)
- 更改请求\u mock returns会导致测试失败
- 所有安装的python/软件包版本(无论是在虚拟环境中还是在全球范围内)都是相同的
- codecov==2.0.5,覆盖率==4.2,nose==1.3.7,nose exclude==0.4.1,请求==2.11.0,请求模拟==1.3.0
- OSX的版本是相同的(10.11.6-尽管其他版本的用户也看到了这一点)
- 已验证的etc/主机正常
- 在macbook pro上,视网膜(因此wifi禁用是通过使用菜单选项禁用)
- 问题发生在
-不报告未来所有行(不包括请求之后。post
行)post
- 对于27、3.5和3.6 python,tox中的行为是相同的
- Python已随brew一起安装
- 当从pyenv/virtualenv运行tox时,两者都显示相同的行为
我完全不知道这里会有什么问题。为什么会发生这种情况?您能澄清一下“关闭wifi”是什么意思吗?您是否关闭接入点,或断开计算机与接入点的连接,或完全禁用计算机上的WiFi?计算机是否通过以太网连接到网络(打开或不打开WiFi)?@user2357112禁用计算机上的WiFi。这是一款新的MacBookPro,因此它是唯一的互联网来源。