美文网首页
pytest-fixture的使用

pytest-fixture的使用

作者: Chaweys | 来源:发表于2021-06-01 23:02 被阅读0次

    fixture可以让我们自定义测试用例的前置条件

    fixture可以让我们自定义测试用例的前置条件
    
    fixture命名方式灵活,不局限于 setup 和teardown 这几个命名
    conftest.py 配置里可以实现数据共享,不需要 import 就能自动找到fixture
    scope="module" 可以实现多个.py 跨文件共享前置
    scope="session" 以实现多个.py 跨文件使用一个 session 来完成多个用例
    
    
    举例:
    @pytest.fixture(scope="function", params=None, autouse=False, ids=None, name=None)
    def test():
        print("fixture初始化的参数列表")
    
    fixture参数列表:
    scope:  fixture的作用域,默认:function,还有class、module、package、session四个【常用】
    autouse:默认:False,需要用例手动调用该fixture;如果是True,所有作用域内的测试用例都会自动调用该fixture
    name:   默认:装饰器的名称,同一模块的fixture相互调用建议写个不同的name
    注:     session的作用域:是整个测试会话,即开始执行pytest到结束测试
    
    
    测试用例如何调用fixture?
    (1)、测试用例函数的入参传入fixture的名称
    (2)、测试用例添加上装饰器 @pytest.mark.usefixtures(fixture_name)
    (3)、定义fixture时设置参数autouse=True
    
    
    知识点:
    在类声明上面加 @pytest.mark.usefixtures() ,代表这个类里面所有测试用例都会调用该fixture
    可以叠加多个 @pytest.mark.usefixtures() ,先执行的放底层,后执行的放上层
    可以传多个fixture参数,先执行的放前面,后执行的放后面
    如果fixture有返回值,用 @pytest.mark.usefixtures() 是无法获取到返回值的,必须用传参的方式(方式一)
    
    
    #coding=utf-8
    import pytest
    
    @pytest.fixture()  #定义第一个fixture,fixture_name=login
    def login():
        print("请先登录login1")
    
    @pytest.fixture()  #定义第二个fixture,fixture_name=login2
    def login2():
        print("请先登录login2")
    
    #第一种调用fixture方式:fixture_name作为入参传入
    def test_one(login):
        print("测试test_one")
    
    
    #第二种调用fixture方式:定义装饰器并传入fixture_name作为入参
    @pytest.mark.usefixtures("login","login2")
    def test_two():
        print("测试test_two")
    
    
    #第三种调用fixture方式:定义fixture为自动调用
    @pytest.fixture(autouse=True)
    def login3():
        print("所有的测试用例都自动调用该login3")
    
    
    
    if __name__ == '__main__':
        pytest.main(["-s","test_fixture.py"])
        
    结果:
    test_fixture.py 
    所有的测试用例都自动调用该login3
    请先登录login1
    测试test_one
    
    .所有的测试用例都自动调用该login3
    请先登录login1
    请先登录login2
    测试test_two
    .
    

    fixture实现teardown后置条件操作

    #fixture实现teardown操作,利用yield关键字来开启teardown操作
    #coding=utf-8
    import pytest
    
    @pytest.fixture()
    def login():
        #测试用例方法的前置操作即setup
        print("请登录")
        name="账号"
        pwd="密码"
        age="年龄"
        yield name,pwd,age #yield返回name,pwd,age
        #测试用例方法的后置操作即teardown,由前面的yield关键字开启
        print("登录结束")
    
    def test_one(login): #测试用例方法传入fixture的name作为参数,调用fixture
        print(login)
        name,pwd,age=login   #为何可以赋值?因为login函数由返回值yield定义的
        assert "账号" in name
        assert "密码" in pwd
        assert "年龄" in age
    
    if __name__ == '__main__':
        pytest.main(["-s","test_fixture.py"])
    
    结果:
    test_fixture.py 请登录        【这是前置条件】
    ('账号', '密码', '年龄')
    .登录结束                     【这是后置条件】
    

    相关文章

      网友评论

          本文标题:pytest-fixture的使用

          本文链接:https://www.haomeiwen.com/subject/wwdzjltx.html