一、conftest.py基础认识 1.什么是 可以理解成一个专门存放fixture的配置文件 2.实际用途 多个测试用例文件(test_*.py)的所有用例都需要用到一个前置/后置操作,如登陆退出,浏览器的打
一、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 pytestif __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,执行该项目所有用例
参考:小菠萝