python-pytest学习(十三)-fixture之autouse=True

Posted 给自己一个向前进的理由

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python-pytest学习(十三)-fixture之autouse=True相关的知识,希望对你有一定的参考价值。

一、前言

  平常写自动化会写一些前置fixture操作,用例需要用到直接传该函数的参数名称就行了。当用例很多的时候,每次都传这个参数,会比较麻烦。

  fixture里面有个参数autouse,默认是Fasle没开启的,可以设置为True开启自动使用fixture功能,这样用例就不用每次都去传参了。

  调用fixture三种方法:

  (1)函数或类里面方法直接传fixture的函数参数名称

  (2)使用装饰器@pytest.mark.usefixtures()修饰

  (3)autouse = True自动使用

 

二、用例传fixture参数

  方法一:先定义start功能,用例全部传start参数,调用该功能

import time
import pytest

@pytest.fixture(scope="function")
def start(request):
    print(\'\\n----------开始执行function-----------\')

def test_a(start):
    print("-----------用例a执行----------")


class Test_aaa():
    def test_01(self,start):
        print(\'-----------用例01-----------\')

    def test_02(self,start):
        print(\'-----------用例02-----------\')

if __name__=="__main__":
    pytest.main(["-s","test_06.py"])

运行结果:

 

 

三、装饰器usefixtures

方法二:使用装饰器@pytest.mark.usefixtures()修饰需要运行的用例

import time
import pytest

@pytest.fixture(scope="function")
def start(request):
    print(\'\\n----------开始执行function----------\')

@pytest.mark.usefixtures("start")
def test_a():
    print("----------用例a执行------------")

@pytest.mark.usefixtures("start")
class Test_aa():
    def test_01(self):
        print(\'-----------用例01-------------\')

    def test_02(self):
        print(\'------------用例02------------\')

if __name__=="__main__":
    pytest.main(["-s","test_07.py"])

运行结果:

 

 四、设置autouse=True

方法三、autouse设置为Ture,自动调用fixture功能

(1)start设置scope为module级别,在当前.py用例模块只执行一次,autouse=Ture自动使用;

(2)open_home设置scope为function级别,每个用例前都调用一次,自动调用

import time
import pytest

@pytest.fixture(scope="module",autouse=True)
def start(request):
    print(\'\\n------------开始执行module----------\')
    print(\'module       :%s\'%request.module.__name__)
    print(\'----------启动浏览器------------\')
    yield
    print("----------结束测试 end!-----------")

@pytest.fixture(scope="function",autouse=True)
def open_home(request):
    print("function:%s \\n----------回到首页------------"%request.function.__name__)

def test_01():
    print(\'-----------用例01------------\')

def test_02():
    print(\'-----------用例2-------------\')

if __name__=="__main__":
    pytest.main(["-s","test_08.py"])

运行结果:

 

 

上面是函数去实现用例,写进class里面也是一样可以的。

import time
import pytest

@pytest.fixture(scope="module",autouse=True)
def start(request):
    print(\'\\n------------开始执行module----------\')
    print(\'module       :%s\'%request.module.__name__)
    print(\'----------启动浏览器------------\')
    yield
    print("----------结束测试 end!-----------")

class Test_aaa():
    @pytest.fixture(scope="function",autouse=True)
    def open_home(request):
        print("function:%s \\n----------回到首页------------"%request.function.__name__)

def test_01():
    print(\'-----------用例01------------\')

def test_02():
    print(\'-----------用例2-------------\')

if __name__=="__main__":
    pytest.main(["-s","test_08.py"])

 

 

参考文章:https://www.jianshu.com/p/2bd4eb67b75d

以上是关于python-pytest学习(十三)-fixture之autouse=True的主要内容,如果未能解决你的问题,请参考以下文章

python-pytest学习-参数化

python-pytest学习函数传参

python-pytest学习函数传参

python-pytest学习-标记失败xfail

python-pytest学习-标记失败xfail

python-pytest学习(十七)-conftest.py作用范围