pytest-25-conftest.py作用范围

一个测试工程下是可以有多个conftest.py的文件,一般在工程根目录放一个conftest.py起到全局作用。
在不同的测试子目录也可以放conftest.py,作用范围只在该层级以及以下目录生效。

conftest层级关系

在web_conf_py项目工程下建两个子项目baidu、blog,并且每个目录下都放一个conftest.py和__init__.py(python的每个package必须要有__init__.py)

web_conf_py是工程名称

├─baidu
│  │  conftest.py
│  │  test_1_baidu.py
│  │  __init__.py
│
│
├─blog
│  │  conftest.py
│  │  test_2_blog.py
│  │  __init__.py
│
│  conftest.py
│  __init__.py
        

案例分析

web_conf_py工程下conftest.py文件代码案例

# web_conf_py/conftest.py
import pytest

@pytest.fixture(scope="session")
def start():
    print("\n打开首页")

baidu目录下conftest.py和test_1_baidu.py

# web_conf_py/baidu/conftest.py
import pytest

@pytest.fixture(scope="session")
def open_baidu():
    print("打开百度页面_session")

# web_conf_py/baidu/test_1_baidu.py

import pytest

def test_01(start, open_baidu):
    print("测试用例test_01")
    assert 1

def test_02(start, open_baidu):
    print("测试用例test_02")
    assert 1

if __name__ == "__main__":
    pytest.main(["-s", "test_1_baidu.py"])

运行test_1_baidu.py结果可以看出,start和open_baidu是session级别的,只运行一次

============================= test session starts =============================
platform win32 -- Python 3.6.0, pytest-3.6.3, py-1.5.4, pluggy-0.6.0
rootdir: E:\YOYO\web_conf_py\baidu, inifile:
plugins: metadata-1.7.0, html-1.19.0
collected 2 items

test_1_baidu.py
打开首页
打开百度页面_session
测试用例test_01
.测试用例test_02
.

========================== 2 passed in 0.01 seconds ===========================

blog目录下conftest.py和test_2_blog.py代码

# web_conf_py/blog/conftest.py
import pytest

@pytest.fixture(scope="function")
def open_blog():
    print("打开blog页面_function")

# web_conf_py/blog/test_2_blog.py

import pytest

def test_03(start, open_blog):
    print("测试用例test_03")
    assert 1

def test_04(start, open_blog):
    print("测试用例test_04")
    assert 1

def test_05(start, open_baidu):
    ‘‘‘跨模块调用baidu模块下的conftest‘‘‘
    print("测试用例test_05,跨模块调用baidu")
    assert 1

if __name__ == "__main__":
    pytest.main(["-s", "test_2_blog.py"])

运行结果可以看出,start起到全局作用,blog目录下的open_blog是function级别,每个用例调用一次。
test_05(start, open_baidu)用例不能跨模块调用baidu模块下的open_baidu,所以test_05用例会运行失败

============================= test session starts =============================
platform win32 -- Python 3.6.0, pytest-3.6.3, py-1.5.4, pluggy-0.6.0
rootdir: E:\YOYO\web_conf_py\blog, inifile:
plugins: metadata-1.7.0, html-1.19.0
collected 3 items

test_2_blog.py
打开首页
打开blog页面_function
测试用例test_03
.打开blog页面_function
测试用例test_04
.E

=================================== ERRORS ====================================
__________________________ ERROR at setup of test_05 __________________________
file E:\YOYO\web_conf_py\blog\test_2_blog.py, line 11
  def test_05(start, open_baidu):
E       fixture ‘open_baidu‘ not found
>       available fixtures: cache, capfd, capfdbinary, caplog, capsys, capsysbinary, doctest_namespace, metadata, monkeypatch, open_blog, pytestconfig, record_property, record_xml_attribute, record_xml_property, recwarn, start, tmpdir, tmpdir_factory
>       use ‘pytest --fixtures [testpath]‘ for help on them.

E:\YOYO\web_conf_py\blog\test_2_blog.py:11
====================== 2 passed, 1 error in 0.02 seconds ======================

原文地址:https://www.cnblogs.com/jason89/p/10323767.html

时间: 2024-11-03 18:02:52

pytest-25-conftest.py作用范围的相关文章

python学习-pytest(二)-conftest.py

一.conftest特点: 1.可以跨.py文件调用,有多个.py文件调用时,可让conftest.py只调用了一次fixture,或调用多次fixture 2.conftest.py与运行的用例要在同一个pakage下,并且有__init__.py文件 3.不需要import导入 conftest.py,pytest用例会自动识别该文件,放到项目的根目录下就可以全局目录调用了,如果放到某个package下,那就在改package内有效,可有多个conftest.py 4.conftest.py

pytest文档5-fixture之conftest.py

前言 前面一篇讲到用例加setup和teardown可以实现在测试用例之前或之后加入一些操作,但这种是整个脚本全局生效的,如果我想实现以下场景: 用例1需要先登录,用例2不需要登录,用例3需要先登录.很显然这就无法用setup和teardown来实现了.这就是本篇学习的目的,自定义测试用例的预置条件 fixture优势 1.firture相对于setup和teardown来说应该有以下几点优势 命名方式灵活,不局限于setup和teardown这几个命名 conftest.py 配置里可以实现数

pytest框架: fixture之conftest.py

原文地址:https://blog.csdn.net/BearStarX/article/details/101000516 一.fixture优势1.fixture相对于setup和teardown来说应该有以下几点优势: 命名方式灵活,不局限于setup和teardown这几个命名 conftest.py配置 里可以实现数据共享,不需要import就能自动找到一些配置 scope="module"可以实现多个.py跨文件共享前置 scope="session"以

pytest_fixture之conftest.py

前面一篇讲到用例加setup和teardown可以实现在测试用例之前或之后加入一些操作,但这种是整个脚本全局生效的,如果我想实现以下场景: 用例1需要先登录,用例2不需要登录,用例3需要先登录.很显然这就无法用setup和teardown来实现了.这就是本篇学习的目的,自定义测试用例的预置条件 fixture优势 1.firture相对于setup和teardown来说应该有以下几点优势 命名方式灵活,不局限于setup和teardown这几个命名 conftest.py 配置里可以实现数据共享

pytest-conftest.py作用范围

1.目录结构 调用fixture有两种写法: 1.装饰器@pytest.mark.usefixtures("start") : 2.直接在用例里面调用fixture装饰的方法当作参数输入def test_demo(self,start):3.设置fixture参数autouse=True 2.用例传fixture参数 1.项目跟目录下面的全局conftest.py 1 import pytest 2 @pytest.fixture() 3 def start(): 4 print(&q

(二十五)pytest中conftest使用

conftest中一般放置前置条件,比如登录等 1.在case目录下(有__init__.py文件),新建conftest.py文件 @wiiliam胡阳 2.在用例中添加 @william胡阳 原文地址:https://www.cnblogs.com/wx921308494/p/11966765.html

Pytest UI自动化测试实战实例

前言 明天就放假了,4天小长假,是不是很开心!也许很多人要回老家帮家里种地,干农活.其实能陪陪家里人,帮忙干点农活还是挺开心的,希望大家有个愉快的假期!废话不多说哈,今天再来说说pytest吧,经过几周的时间学习,有收获也有疑惑,总之最后还是搞个小项目出来证明自己的努力不没有白费 环境准备 序号 库/插件/工具 安装命令 1 确保您已经安装了python3.x   2 配置python3+pycharm+selenium2开发环境   3 安装pytest库 pip install pytest

10、pytest -- skip和xfail标记

目录 1. 跳过测试用例的执行 1.1. @pytest.mark.skip装饰器 1.2. pytest.skip方法 1.3. @pytest.mark.skipif装饰器 1.4. pytest.importorskip方法 1.5. 跳过测试类 1.6. 跳过测试模块 1.7. 跳过指定文件或目录 1.8. 总结 2. 标记用例为预期失败的 2.1. 去使能xfail标记 3. 结合pytest.param方法 往期索引:https://www.cnblogs.com/luizyao/p

用Pytest+Allure生成漂亮的HTML图形化测试报告

本篇文章将介绍如何使用开源的测试报告生成框架Allure生成规范.格式统一.美观的测试报告. 通过这篇文章的介绍,你将能够: - 将Allure与Pytest测试框架相结合: - 执行测试之后,生成Allure格式的测试报告. 1.Allure测试报告介绍 Allure是一款非常轻量级并且非常灵活的开源测试报告生成框架. 它支持绝大多数测试框架, 例如TestNG.Pytest.JUint等.它简单易用,易于集成.下面就Pytest如何与Allure集成做详细介绍. 2.Pytest框架集成Al