Python 使用pytest.fixture选择退出功能

Python 使用pytest.fixture选择退出功能,python,pytest,Python,Pytest,我有一个函数,我不想每次在Flask RESTFul API中运行测试时都运行它。这是设置的一个示例: class function(Resource): def post(self): print 'test' do_action() return {'success':True} 在我的测试中,我想运行这个函数,但忽略do_action()。我如何使用pytest实现这一点?这似乎是测试的好机会 @pytest.mark.foo_te

我有一个函数,我不想每次在Flask RESTFul API中运行测试时都运行它。这是设置的一个示例:

class function(Resource):
    def post(self):
        print 'test'
        do_action()
        return {'success':True}

在我的测试中,我想运行这个函数,但忽略do_action()。我如何使用pytest实现这一点?

这似乎是测试的好机会

@pytest.mark.foo_test
class function(Resource):
    def post(self):
        print 'test'
        do_action()
        return {'success':True}
如果你打电话给我

py.test -v -m foo_test
它将只运行标记为“foo_test”的测试

如果你打电话给我

py.test -v -m "not foo_test"

它将运行所有未标记为“foo_test”的测试

您可以在测试中模拟
执行操作

def test_post(resource, mocker):
    m = mocker.patch.object(module_with_do_action, 'do_action')
    resource.post()
    assert m.call_count == 1
因此,在本测试中不会调用实际函数,这会带来额外的好处 您可以检查
post
实现是否实际调用该函数

这需要
已安装(无耻插头)。

是否要在某些运行中完全跳过测试。或者,您是否希望始终让此测试在运行时使用
do_action()
,然后不使用它运行?我希望它完全跳过测试。例如:import pytest@pytest.fixture(scope=“function”,autouse=True)我想运行测试,但我不想执行do_action(),不过,这很有趣。@Rob每次运行测试套件时,您想同时使用
Do\u action()
和不使用
Do\u action()
运行测试用例吗?或者,如果根据调用测试套件的方式调用了
do\u action()
,是否要切换?切换其调用方式。这当然可以做到,但问题是您可以更改多少代码?虽然它可能不是最干净的,但您可以始终使用此答案中的方法以及额外的间接层来设置一些函数调用,将参数传递给
函数。post
,然后在执行
do\u操作之前添加条件检查。