1、简单说明conftest.py
conftest.py
可以理解为专门放fixture的地方,conftest.py可以用来单独管理全局的fixture- pytest会默认读取conftest.py里面的所有fixture,测试用例文件中不需要手动
import conftest.py
- 使用场景:多个测试文件
test_*.py
都会用到登录功能作为前置操作,如果单独写到用例文件中去,那就要写多次。这时放在conftest.py中,可以让所有测试文件直接使用 conftest.py
文件名是固定的,不能更改- conftest.py只对同一个package下的所有测试用例生效
- 不同目录可以有自己的conftest.py,一个项目中可以有多个conftest.py
2、举个例子
-
目录结构
-
learnConftest
目录下最顶层conftest
一般写全局的fixture,在Web UI中可能会初始化drivertest_1.py
编写第一条测试用例run.py
添加注函数,运行所有用例
-
test_51job
目录下test_51job/conftest.py
配置一些针对51job这个网站的测试用例独有的fixture,比如:打开51job网站test_51job/test_case1.py
某个功能模块下的测试用例
-
test_toutiao
目录下,该目录下没有__init__.py
,也没有conftest.py
test_toutiao/test_case1.py
某个功能模块下的测试用例
-
test_weibo
目录下test_weibo/conftest.py
配置一些针对weibo这个网站的测试用例独有的fixture,比如:打开weibo网站test_weibo/test_case1.py
某个功能呢模块下的测试用例
-
代码:
# 最顶层conftest.py import pytest @pytest.fixture(scope="session") def login(): print("====登录功能:返回用户名、token====") name = "test01" token = "test99999999" yield name, token print("====退出登录====") @pytest.fixture(autouse=True) def get_info(login): name, token = login print(f"====每个用例都调用的外层fixture:打印用户名 {name},打印token {token}====") # test_1.py def test_get_info(login): name, token = login print("***基础用例:获取用户个人信息***") print(f"用户名: {name}, token: {token}") # run.py import pytest if __name__ == '__main__': pytest.main(["-s"]) # test_51job/conftest.py import pytest @pytest.fixture(scope="module") def open_51(login): name, token = login print("###用户: {name} 打开51job网站###") # test_51job/test_case1.py def test_case_01(open_51): print("51job,列出所有职位用例") def test_case_02(open_51): print("51job,找出所有python岗位") # test_toutiao/test_case1.py def test_no_fixture(login): print("==没有__init__测试用例,我在头条==", login) # test_weibo/conftest.py import pytest @pytest.fixture(scope="function") def open_weibo(login): name, token = login print(f"&&& 用户 {name} 返回微博首页&&&") # test_weibo/test_case1.py class TestWeibo: def test_case2_01(self, open_weibo): print("查看微博热搜") def test_case2_02(self, open_weibo): print("浏览微博首页")
-
结果
collected 6 items test_1.py ====登录功能:返回用户名、token==== ====每个用例都调用的外层fixture:打印用户名 test01,打印token test99999999==== ***基础用例:获取用户个人信息*** 用户名: test01, token: test99999999 . test_51job/test_case1.py ###用户: {name} 打开51job网站### ====每个用例都调用的外层fixture:打印用户名 test01,打印token test99999999==== 51job,列出所有职位用例 .====每个用例都调用的外层fixture:打印用户名 test01,打印token test99999999==== 51job,找出所有python岗位 . test_toutiao/test_case1.py ====每个用例都调用的外层fixture:打印用户名 test01,打印token test99999999==== ==没有__init__测试用例,我在头条== ('test01', 'test99999999') . test_weibo/test_case1.py ====每个用例都调用的外层fixture:打印用户名 test01,打印token test99999999==== &&& 用户 test01 返回微博首页&&& 查看微博热搜 .====每个用例都调用的外层fixture:打印用户名 test01,打印token test99999999==== &&& 用户 test01 返回微博首页&&& 浏览微博首页 .====退出登录==== ============================== 6 passed in 0.04s ===============================