4

我正在尝试使用 pytest 为我的 Django 项目运行 selenium 并执行夹具设置/拆卸。

我尝试遵循最佳实践yield但出现错误:

--- ERROR at setup of test_browsing_check --- 
pytest.fixture functions cannot use ``yield``. Instead write and return an inner function/generator and let the consumer call and iterate over it.:

@pytest.fixture(scope="module")
def browser(request):
    selenium = webdriver.Firefox()
    selenium .implicitly_wait(3)
    yield selenium
    selenium.quit()

你知道为什么它不工作吗?

然后后来我使用了另一个运行良好的代码

@pytest.fixture(scope="module")
def browser(request):
    selenium = webdriver.Firefox()
    selenium.implicitly_wait(3)
    def teardown():
        selenium.quit()
    request.addfinalizer(teardown)
    return selenium

但不推荐这种方法:

这种方法仍然得到完全支持,但从 2.10 开始建议使用 yield,因为它被认为更简单,更好地描述了自然代码流。

版本注意事项:

$ python -V
$ Python 3.5.2 :: Anaconda 4.2.0 (64-bit)

$ django-admin version
$ 1.10.3

$ pip show pytest
$ Name: pytest
$ Version: 2.9.2
4

1 回答 1

8

根据文档:在 2.10 版之前,为了使用 yield 语句来执行拆卸代码,必须使用 yield_fixture 标记来标记夹具。从 2.10 开始,普通的fixture 可以直接使用yield,所以yield_fixture 装饰器不再需要并且被认为已弃用。

于 2017-03-11T21:14:08.163 回答