conftest.py文件(存放公用fixture)

一、conftest.py基础认识

1.什么是

可以理解成一个专门存放fixture的配置文件

2.实际用途

多个测试用例文件(test_*.py)的所有用例都需要用到一个前置/后置操作,如登陆退出,浏览器的打开和关闭,那就不能把登录功能写到某个用例文件中去了

模块自己的fixture写入自己的py文件中即可,对于一些全局的fixture,用各种级别的conftest.py来存放管理

3.存放位置

  • 放到工程的根目录下,就可以全局调用
  • 也可以放到某个package包下,只对该package内(包括子包内)所有测试用例有效(有__init__.py的文件夹才是包,不可以放在文件夹中)

4.注意事项

  • pytest会默认读取conftest.py里面的所有fixture
  • conftest.py 文件名称是固定的,不能改动
  • 不同目录可以有自己的conftest.py,一个项目中可以有多个conftest.py
  • 测试用例文件中不需要手动import conftest.py,pytest会按fixture查找顺序自动查找到conftest:当前测试类 > 模块(.py文件)> 当前包中conftest.py > 父包中conftest.py > 根目录中conftest.py

二、实际项目举例

 

 1.项目根目录

项目启动入口,会运行项目下所有测试用例:

import pytest

if __name__ == '__main__':
    pytest.main(["-v", "-s", "-rA", "../conftest/"])
run.py

最顶层的conftest.py,一般写全局的fixture,在Web UI自动化中,可能会初始化driver:

import pytest

@pytest.fixture(scope="session")
def login():
    print("====总conftest文件 登录功能,返回账号,token===")
    name = "testyy"
    token = "npoi213bn4"
    yield name, token
    print("====总conftest文件 退出登录!!!====")


@pytest.fixture(autouse=True)
def get_info(login):
    name, token = login
    print(f"==总conftest文件 每个用例都默认自动调用的fixture:打印用户token: {token} ==")
conftest.py

根目录下的第一条测试用例:

def test_get_info(login):
    name, token = login
    print("***项目最基础用例:获取用户个人信息***")
    print(f"用户名:{name}, token:{token}")
test_case1.py

2.51job包

该包内的conftest.py,配置一些针对51job这个网站的测试用例独有的fixture,譬如:打开51job网站

import pytest

@pytest.fixture(scope="module")
def open_51(login):
    name, token = login
    print(f"51job的conftest 用户 {name} 打开51job网站==")
conftest.py

某个功能模块下的测试用例:

def test_case2_01(open_51):
    print("51job,列出所有职位用例")


def test_case2_02(open_51):
    print("51job,找出所有python岗位")
test_case1.py

3.toutiao文件夹

没有__init__.py,只是个普通文件夹,不是包,文件夹不可以有conftest.py文件

def test_case2_01(open_51):
    print("51job,列出所有职位用例")


def test_case2_02(open_51):
    print("51job,找出所有python岗位")
test_case1.py

4.weibo包

配置一些针对weibo这个网站的测试用例独有的fixture,譬如:打开weibo网站:

import pytest

@pytest.fixture(scope="function")
def open_weibo(login):
    name, token = login
    print(f"weibo的conftest  用户 {name} 返回微博首页 &&&")
conftest.py

某个功能模块下的测试用例:

class TestWeibo:
    def test_case1_01(self, open_weibo):
        print("查看微博热搜")

    def test_case1_02(self, open_weibo):
        print("查看微博范冰冰")
test_case1.py

5.运行run.py,执行该项目所有用例

 

 参考:小菠萝

 

posted @ 2022-02-21 14:26  www.pu  Views(316)  Comments(0Edit  收藏  举报