pytest系列教程——7、将fixture写入conftest.py

之前已经讲过fixture的用法参考之前文档 ,conftest.py文件则是一个专门用来管理夹具函数的文件。

使用目的

在测试中,我们需要对所有用例做前置处理的时候。就需要把这部分的初始化步骤抽出来,方便统一管理。比如,我们在UI测试的时候,都需要先初始化Selenium Driver。再比如,我们的测试脚本都需要先登录进去后再进行业务操作。那就完全可以使用conftest.py,完成对前置步骤的抽离。
conftest.py 的目的就是为了单独管理一些全局的 fixture

注意要点
  • conftest.py的命名是固定的,不能改
  • conftest.py 不需要导入,脚本运行时候会自动识别
  • conftest.py文件可以写多个fixture
  • conftest.py 只对同一个 package 下的所有测试用例生效
  • 不同目录可以有自己的 conftest.py,一个项目中可以有多个 conftest.py
使用案例

目录结构如下:
在这里插入图片描述

最外层/MyPytest/conftest.py的配置如下:

import pytest


@pytest.fixture(scope='class')
def initSeleniumDriver():
    print("初始化SeleniumDriver成功")
    print("已经打开Chrome浏览器")
    yield
    print("关闭浏览器")


@pytest.fixture(scope='function')
def loginAndLogout(initSeleniumDriver):

    userName = 'admin'
    userPassword = '123456'
    print(f"login:用户admin 执行登录操作")
    token = '1234v242fsqq'

    yield userName, token

    print(f"logout:用户{userName}执行退出登录操作\n")

run.py文件代码,执行入口:

import pytest

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

/Moudle1/Test_Contest_01.py的代码:

import pytest


class Test_Contest_01:
    def test_case_01(self, loginAndLogout):
        username, token = loginAndLogout
        print(f"正在执行test_case_01, 账号:{username},token:{token}")

    def test_case_02(self, loginAndLogout):
        username, token = loginAndLogout
        print(f"正在执行test_case_02, 账号:{username},token:{token}")


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

/Moudle2/Test_Contest_02.py的代码:

import pytest


class Test_Contest_02:
    def test_case_03(self, loginAndLogout):
        username, token = loginAndLogout
        print(f"正在执行test_case_03, 账号:{username},token:{token}")

    def test_case_04(self, loginAndLogout):
        username, token = loginAndLogout
        print(f"正在执行test_case_04, 账号:{username},token:{token}")


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

/Moudle2/conftest.py的代码:

import pytest


# 定义的夹具函数, 实现 用例执行前登录,用例执行后登出的效果
@pytest.fixture(scope='function')
def loginAndLogout(initSeleniumDriver):
    userName = 'module2专用测试用户'
    userPassword = '123456'
    print(f"login:用户{userName} 执行登录操作")
    token = 'wewe3t242fsrqqwe'

    yield userName, token

    print(f"logout:用户{userName}执行退出登录操作\n")

执行结果:

collected 4 items                                                              

Moudle1\Test_Contest_01.py 初始化SeleniumDriver成功
已经打开Chrome浏览器
login:用户admin 执行登录操作
正在执行test_case_01, 账号:admin,token:1234v242fsqq
.logout:用户admin执行退出登录操作

login:用户admin 执行登录操作
正在执行test_case_02, 账号:admin,token:1234v242fsqq
.logout:用户admin执行退出登录操作

关闭浏览器

Moudle2\Test_Contest_02.py 初始化SeleniumDriver成功
已经打开Chrome浏览器
login:用户module2专用测试用户 执行登录操作
正在执行test_case_03, 账号:module2专用测试用户,token:wewe3t242fsrqqwe
.logout:用户module2专用测试用户执行退出登录操作

login:用户module2专用测试用户 执行登录操作
正在执行test_case_04, 账号:module2专用测试用户,token:wewe3t242fsrqqwe
.logout:用户module2专用测试用户执行退出登录操作

关闭浏览器


============================== 4 passed in 0.09s ==============================

执行上述代码发现:conftest.py可以有多个,但是会以测试代码层级最近的为准

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

软件测试技术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值