py.test 来自另一个文件的夹具
py.test fixture from another file
我有以下文件要测试
manage.py
import socket
def __get_pod():
try:
pod = socket.gethostname().split("-")[-1].split(".")[0]
except:
pod = "Unknown"
return pod
这是我的测试脚本
tests/test_manage.py
import sys
import pytest
sys.path.append('../')
from manage import __get_pod
#
# create a fixture for a softlayer IP stack
@pytest.fixture
def patch_socket(monkeypatch):
class my_gethostname:
@classmethod
def gethostname(cls):
return 'web01-east.domain.com'
monkeypatch.setattr(socket, 'socket', my_gethostname)
def test__get_pod_single_dash():
assert __get_pod() == 'east'
因此,当我尝试测试它托管我的笔记本电脑主机名时,当我希望它使用夹具时..是否可以在另一个文件中使用夹具?
$ py.test -v
======================================================================= test session starts ========================================================================
platform darwin -- Python 2.7.8 -- py-1.4.26 -- pytest-2.6.4 -- /usr/local/opt/python/bin/python2.7
collected 1 items
test_manage.py::test__get_pod_single_dash FAILED
============================================================================= FAILURES =============================================================================
____________________________________________________________________ test__get_pod_single_dash _____________________________________________________________________
def test__get_pod_single_dash():
> assert __get_pod() == 'east'
E assert '2' == 'east'
E - 2
E + east
你需要做的第一件事就是修改你的测试函数,让它接受一个名为 patch_socket
:
的参数
def test__get_pod_single_dash(patch_socket):
assert __get_pod() == 'east'
这意味着 py.test 将调用您的夹具,并将结果传递给您的函数。这里重要的是它确实被调用了。
第二件事是您的 monkeypatch
调用会将一个名为 socket.socket
的变量设置为 my_gethostname
,这不会影响您的功能。将 patch_socket
简化为:
import socket
@pytest.fixture
def patch_socket(monkeypatch):
def gethostname():
return 'web01-east.domain.com'
monkeypatch.setattr(socket, 'gethostname', gethostname)
然后允许测试通过。
我有以下文件要测试
manage.py
import socket
def __get_pod():
try:
pod = socket.gethostname().split("-")[-1].split(".")[0]
except:
pod = "Unknown"
return pod
这是我的测试脚本 tests/test_manage.py
import sys
import pytest
sys.path.append('../')
from manage import __get_pod
#
# create a fixture for a softlayer IP stack
@pytest.fixture
def patch_socket(monkeypatch):
class my_gethostname:
@classmethod
def gethostname(cls):
return 'web01-east.domain.com'
monkeypatch.setattr(socket, 'socket', my_gethostname)
def test__get_pod_single_dash():
assert __get_pod() == 'east'
因此,当我尝试测试它托管我的笔记本电脑主机名时,当我希望它使用夹具时..是否可以在另一个文件中使用夹具?
$ py.test -v
======================================================================= test session starts ========================================================================
platform darwin -- Python 2.7.8 -- py-1.4.26 -- pytest-2.6.4 -- /usr/local/opt/python/bin/python2.7
collected 1 items
test_manage.py::test__get_pod_single_dash FAILED
============================================================================= FAILURES =============================================================================
____________________________________________________________________ test__get_pod_single_dash _____________________________________________________________________
def test__get_pod_single_dash():
> assert __get_pod() == 'east'
E assert '2' == 'east'
E - 2
E + east
你需要做的第一件事就是修改你的测试函数,让它接受一个名为 patch_socket
:
def test__get_pod_single_dash(patch_socket):
assert __get_pod() == 'east'
这意味着 py.test 将调用您的夹具,并将结果传递给您的函数。这里重要的是它确实被调用了。
第二件事是您的 monkeypatch
调用会将一个名为 socket.socket
的变量设置为 my_gethostname
,这不会影响您的功能。将 patch_socket
简化为:
import socket
@pytest.fixture
def patch_socket(monkeypatch):
def gethostname():
return 'web01-east.domain.com'
monkeypatch.setattr(socket, 'gethostname', gethostname)
然后允许测试通过。