首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Pytest中使用fixture

在Pytest中使用fixture
EN

Stack Overflow用户
提问于 2018-10-03 17:11:44
回答 2查看 2.3K关注 0票数 0

我在conftest.py文件中有以下代码

代码语言:javascript
复制
@pytest.fixture(scope="session", autouse=True)
def app(request):
    global fixture
    browser = request.config.getoption("--browser")
    base_url=target['baseUrl'])
    fixture = Application(browser=browser,base_url=web_config['baseUrl'])
    print("\n BEFORE SESSION")
    fixture.session.login()
    return fixture


@pytest.fixture(scope="session", autouse=True)
def stop(request):
    def fin():
        print("\n AFTER SESSION")
        fixture.session.ensure_logout()
        fixture.destroy()
    request.addfinalizer(fin)
    return fixture

测试文件如下所示。Ie灯具,我显然不会打电话。

代码语言:javascript
复制
import pytest

@pytest.yield_fixture()
def setup_method():
    print("\n BEFORE METHOD")
    yield
    print("\n AFTER METHOD")

@pytest.mark.usefixtures("setup_method")
def test_add_text_element(app):
    print("\n RUN TEST")
    app.element.add_blank_page()
    app.element.add_element(element_name='Header')

但是如果我需要设置一些其他的类设置呢?如果我得到了另一个fixture,我如何在测试文件中使用它,而不是现在使用的那个?

EN

回答 2

Stack Overflow用户

发布于 2018-10-03 19:44:19

您可以在this文档中找到所有关于py.test中的装置的信息。下面你可以找到一个如何使用灯具的例子。首先,不要使用global。然后要注意灯具的autouse参数。对于安装和拆卸,yield_fixture将是您的选择。使用usefixtures作为类的装饰器。类可以很好地组织您的测试代码。您可以在此article (RUS)中找到有关用法的详细信息

conftest.py

代码语言:javascript
复制
@pytest.yield_fixture()
def destroy_method():
    yield
    print("\n DESTROY")


@pytest.yield_fixture(scope="session", autouse=True)
def app(request):
    browser = request.config.getoption("--browser")
    fixture = Application(browser=browser, base_url=web_config['baseUrl'])
    print("\n BEFORE SESSION")
    fixture.session.login()
    yield fixture
    print("\n AFTER SESSION")
    fixture.session.ensure_logout()
    fixture.destroy()

测试文件将如下所示:

代码语言:javascript
复制
@pytest.yield_fixture()
def setup_method():
    print("\n BEFORE METHOD")
    yield
    print("\n AFTER METHOD")


@pytest.fixture()
def fix1():
    return 1


@pytest.fixture()
def fix2():
    return 2


@pytest.mark.usefixtures("setup_method", "destroy_method")
class TestSuiteA:
    def test_add_text_element(self, fix1, fix2):
        print("\n RUN TEST")
        assert fix1 + 1 == fix2
票数 2
EN

Stack Overflow用户

发布于 2019-05-09 05:51:41

来自pytest文档:

"yield_fixture“函数:

-3.0开始,使用普通fixture装饰器的fixture可以使用Yeld语句来提供fixture值并执行teardown代码,这与以前版本中的yield_fixture完全一样。

仍支持将函数标记为yield_fixture,但已弃用,不应在新代码中使用。

参考:https://docs.pytest.org/en/latest/yieldfixture.html

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52623555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档