conftest.py详解(如何组织测试用例)【pytest系列 5】

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中可能会初始化driver
    • test_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 ===============================
    

参考文章:https://www.cnblogs.com/poloyy/p/12663601.html

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值