• Pytest系列(6)


    如果你还想从头学起Pytest,可以看看这个系列的文章哦!

    https://www.cnblogs.com/poloyy/category/1690628.html

    什么是conftest.py

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

    实际开发场景

    多个测试用例文件(test_*.py)的所有用例都需要用登录功能来作为前置操作,那就不能把登录功能写到某个用例文件中去了

    如何解决上述场景问题?

    conftest.py的出现,就是为了解决上述问题,单独管理一些全局的fixture

    conftest.py配置fixture注意事项

    • pytest会默认读取conftest.py里面的所有fixture
    • conftest.py 文件名称是固定的,不能改动
    • conftest.py只对同一个package下的所有测试用例生效
    • 不同目录可以有自己的conftest.py,一个项目中可以有多个conftest.py
    • 测试用例文件中不需要手动import conftest.py,pytest会自动查找

    实际项目中的小案例

    这是一个目录

    06conftest目录下

    conftest.py代码

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

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    """
    __title__  =
    __Time__   = 2020-04-08 21:22
    __Author__ = 小菠萝测试笔记
    __Blog__   = https://www.cnblogs.com/poloyy/
    """
    import pytest
    
    @pytest.fixture(scope="session")
    def login():
        print("====登录功能,返回账号,token===")
        name = "testyy"
        token = "npoi213bn4"
        yield name, token
        print("====退出登录!!!====")
    
    
    @pytest.fixture(autouse=True)
    def get_info(login):
        name, token = login
        print(f"== 每个用例都调用的外层fixture:打印用户token: {token} ==")
    View Code

    test_1.py代码

    同级目录下的第一条测试用例

    def test_get_info(login):
        name, token = login
        print("***基础用例:获取用户个人信息***")
        print(f"用户名:{name}, token:{token}")
    View Code

    06_run.py代码

    运行06conftest目录下所有测试用例

    import pytest
    
    if __name__ == '__main__':
        pytest.main(["-s", "../06conftest/"])
    View Code

    test_51job目录下

    conftest.py代码

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

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

    test_case1.py代码

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

    def test_case2_01(open_51):
        print("51job,列出所有职位用例")
    
    
    def test_case2_02(open_51):
        print("51job,找出所有python岗位")
    View Code

    test_toutiao目录下

    test_case1.py代码

    包没有__init__.py文件也没有conftest.py文件

    def test_no_fixture(login):
        print("==没有__init__测试用例,我进入头条了==", login)
    View Code

    test_weibo目录下

    conftest.py代码

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

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

    test_case1.py代码

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

    class TestWeibo:
        def test_case1_01(self, open_weibo):
            print("查看微博热搜")
    
        def test_case1_02(self, open_weibo):
            print("查看微博范冰冰")
    View Code

    运行06_run.py的结果

  • 相关阅读:
    项目中见过最好的创建树的过程
    验证Math.random()函数产生的是均匀分布的数值
    一道LINQ题,可以瞅一眼
    EntityFramework5的性能到底提高在哪里了?
    如何很好的使用Linq的Distinct方法
    EntityFramework开发三种工作流简介
    实现自动抛弃当前数据库上下文的模块。支持各种ORM框架并存
    SPS中WebPart加缓存
    交流与设计,项目管理中必备的!
    redmine 安装roadmap 插件
  • 原文地址:https://www.cnblogs.com/poloyy/p/12663601.html
Copyright © 2020-2023  润新知