Pytest 之 fixture

fixtur 当做参数传入

# -*- coding: utf-8 -*-

import pytest

@pytest.fixture()
def login():
    print('登录系统')

# 直接使用函数名做为参数传入
def test_01(login):
    print('测试用例一')

def test_02():
    print('测试用例2')

def test03():
    print('测试用例3')

运行结果

testcase.py::test_01 登录系统
测试用例一
PASSED
testcase.py::test_02 测试用例2
PASSED
testcase.py::test03 测试用例3
PASSED

fixture 语法

# scope有4个作用范围:function(不填则默认)、class、module、session
fixture(scope='function', params=None, autouse=False, ids=None, name=None)

参数说明

autouse

# -*- coding: utf-8 -*-

import pytest

# 当前就算定义了装饰器,也不会调用Login
@pytest.fixture()
def login():
    print("打开浏览器")

def test1():
    print("test1里的用例")

def test2():
    print("test2里的用例")
调用方式 1
# -*- coding: utf-8 -*-

import pytest

@pytest.fixture()
def login():
    print("打开浏览器")

# 直接传入函数名
def test1(login):
    print("test1里的用例")

def test2(login):
    print("test2里的用例")
调用方式 2
# -*- coding: utf-8 -*-

import pytest

# autouse设为True,就能自动调用login的装饰器
@pytest.fixture(autouse=True)
def login():
    print("打开浏览器")

# 直接传入函数名
def test1():
    print("test1里的用例")

def test2():
    print("test2里的用例")

function

# -*- coding: utf-8 -*-

import pytest

@pytest.fixture(scope='function', autouse=True)
def login():
    print('登录系统')

def test_01():
    print('测试用例一')

def test_02():
    print('测试用例2')

def test03():
    print('测试用例3')

运行结果

testcase.py::test_01 登录系统
测试用例一
PASSED
testcase.py::test_02 登录系统
测试用例2
PASSED
testcase.py::test03 登录系统
测试用例3
PASSED

class

# -*- coding: utf-8 -*-

# @Time : 2021/1/14 21:05
# @Author : 公众号(程序员一凡)

import pytest

@pytest.fixture(scope='class', autouse=True)
def login():
    print('登录系统')


def test_01():
    print('这个是类外面的用例')

class TestCase1:
    def test_02(self):
        print('测试用例2')
    def test03(self):
        print('测试用例3')

class TestCase2:
    def test_04(self):
        print('测试用例4')
    def test05(self):
        print('测试用例5')

运行结果

testcase.py::test_01 登录系统
这个是类外面的用例
PASSED
testcase.py::TestCase1::test_02 登录系统
测试用例2
PASSED
testcase.py::TestCase1::test03 测试用例3
PASSED
testcase.py::TestCase2::test_04 登录系统
测试用例4
PASSED
testcase.py::TestCase2::test05 测试用例5
PASSED

module

# -*- coding: utf-8 -*-

import pytest

@pytest.fixture(scope='class', autouse=True)
def open():
    print("打开浏览器,并且打开百度首页")

def test_s1():
    print("用例1:搜索python-1")

class TestCase():
    def test_s2(self):
        print("用例2:搜索python-2")

    def test_s3(self):
        print("用例3:搜索python-3")

运行结果

testcase.py::test_s1 打开浏览器并且打开百度首页
用例1搜索python-1
PASSED
testcase.py::TestCase::test_s2 打开浏览器并且打开百度首页
用例2搜索python-2
PASSED
testcase.py::TestCase::test_s3 用例3搜索python-3
PASSED

session

# -*- coding: utf-8 -*-

# conftest文件内容
import pytest

@pytest.fixture(scope="session", autouse=True)
def login():
    print("调用conftest文件的里的方法")

两个用例文件

# -*- coding: utf-8 -*-
# testcase1.py 

import pytest

def test1():
    print("test1里的用例")

def test2():
    print("test2里的用例")

# -*- coding: utf-8 -*-
# testcase1.py  
import pytest
def test3():
    print("test3里的用例")

def test4():
    print("test4里的用例")

运行结果

testcase.py::test1 调用conftest文件的里的方法
test1里的用例
PASSED
testcase.py::test2 test2里的用例
PASSED
testcase1.py::test3 test3里的用例
PASSED
testcase1.py::test4 test4里的用例
PASSED

pytest-allure 生成测试报告

03


↙↙↙阅读原文可查看相关链接,并与作者交流