前言

一个测试工程下是可以有多个conftest.py的文件,一般在工程根目录放一个conftest.py起到全局作用。

在不同的测试子目录也可以放conftest.py,作用范围只在该层级以及以下目录生效。

conftest层级关系

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

  1. web_conf_py是工程名称
  2. ├─baidu
  3. conftest.py
  4. test_1_baidu.py
  5. __init__.py


  6. ├─blog
  7. conftest.py
  8. test_2_blog.py
  9. __init__.py

  10. conftest.py
  11. __init__.py

案例分析

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

  1. # web_conf_py/conftest.py
  2. import pytest
  3. @pytest.fixture(scope="session")
  4. def start():
  5. print("\n打开首页")

baidu目录下conftest.py和test_1_baidu.py

  1. # web_conf_py/baidu/conftest.py
  2. import pytest
  3. @pytest.fixture(scope="session")
  4. def open_baidu():
  5. print("打开百度页面_session")
  6. # web_conf_py/baidu/test_1_baidu.py
  7. import pytest
  8. def test_01(start, open_baidu):
  9. print("测试用例test_01")
  10. assert 1
  11. def test_02(start, open_baidu):
  12. print("测试用例test_02")
  13. assert 1
  14. if __name__ == "__main__":
  15. pytest.main(["-s", "test_1_baidu.py"])

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

  1. ============================= test session starts =============================
  2. platform win32 -- Python 3.6.0, pytest-3.6.3, py-1.5.4, pluggy-0.6.0
  3. rootdir: E:\YOYO\web_conf_py\baidu, inifile:
  4. plugins: metadata-1.7.0, html-1.19.0
  5. collected 2 items
  6. test_1_baidu.py
  7. 打开首页
  8. 打开百度页面_session
  9. 测试用例test_01
  10. .测试用例test_02
  11. .
  12. ========================== 2 passed in 0.01 seconds ===========================

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

  1. # web_conf_py/blog/conftest.py
  2. import pytest
  3. @pytest.fixture(scope="function")
  4. def open_blog():
  5. print("打开blog页面_function")
  6. # web_conf_py/blog/test_2_blog.py
  7. import pytest
  8. def test_03(start, open_blog):
  9. print("测试用例test_03")
  10. assert 1
  11. def test_04(start, open_blog):
  12. print("测试用例test_04")
  13. assert 1
  14. def test_05(start, open_baidu):
  15. '''跨模块调用baidu模块下的conftest'''
  16. print("测试用例test_05,跨模块调用baidu")
  17. assert 1
  18. if __name__ == "__main__":
  19. pytest.main(["-s", "test_2_blog.py"])

运行结果可以看出,start起到全局作用,blog目录下的open_blog是function级别,每个用例调用一次。

test_05(start, open_baidu)用例不能跨模块调用baidu模块下的open_baidu,所以test_05用例会运行失败

  1. ============================= test session starts =============================
  2. platform win32 -- Python 3.6.0, pytest-3.6.3, py-1.5.4, pluggy-0.6.0
  3. rootdir: E:\YOYO\web_conf_py\blog, inifile:
  4. plugins: metadata-1.7.0, html-1.19.0
  5. collected 3 items
  6. test_2_blog.py
  7. 打开首页
  8. 打开blog页面_function
  9. 测试用例test_03
  10. .打开blog页面_function
  11. 测试用例test_04
  12. .E
  13. =================================== ERRORS ====================================
  14. __________________________ ERROR at setup of test_05 __________________________
  15. file E:\YOYO\web_conf_py\blog\test_2_blog.py, line 11
  16. def test_05(start, open_baidu):
  17. E fixture 'open_baidu' not found
  18. > 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
  19. > use 'pytest --fixtures [testpath]' for help on them.
  20. E:\YOYO\web_conf_py\blog\test_2_blog.py:11
  21. ====================== 2 passed, 1 error in 0.02 seconds ======================

---------------------------------pytest结合selenium自动化完整版-------------------------

全书购买地址 https://yuedu.baidu.com/ebook/902224ab27fff705cc1755270722192e4536582b

作者:上海-悠悠 QQ交流群:874033608

也可以关注下我的个人公众号:yoyoketang

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

  1. pytest文档5-fixture之conftest.py

    前言 前面一篇讲到用例加setup和teardown可以实现在测试用例之前或之后加入一些操作,但这种是整个脚本全局生效的,如果我想实现以下场景: 用例1需要先登录,用例2不需要登录,用例3需要先登录. ...

  2. pytest文档4-fixture之conftest.py

    用例1需要先登录,用例2不需要登录,用例3需要先登录.很显然这就无法用setup和teardown来实现了.fixture之conftest.py就是自定义测试用例的预置条件 1.firture相对于 ...

  3. pytest文档7-pytest-html生成html报告

    前言 pytest-HTML是一个插件,pytest用于生成测试结果的HTML报告.兼容Python 2.7,3.6 pytest-html 1.github上源码地址[https://github. ...

  4. pytest文档3-pycharm运行pytest

    前言 上一篇pytest文档2-用例运行规则已经介绍了如何在cmd执行pytest用例,平常我们写代码在pycharm比较多 写完用例之后,需要调试看看,是不是能正常运行,如果每次跑去cmd执行,太麻 ...

  5. pytest文档18-配置文件pytest.ini

    前言 pytest配置文件可以改变pytest的运行方式,它是一个固定的文件pytest.ini文件,读取配置信息,按指定的方式去运行. ini配置文件 pytest里面有些文件是非test文件 py ...

  6. pytest文档24-fixture的作用范围(scope)

    fixture作用范围 fixture里面有个scope参数可以控制fixture的作用范围:session > module > class > function fixture( ...

  7. pytest文档56-插件打包上传到 pypi 库

    前言 pytest 的插件完成之后,可以上传到 github,方便其他小伙伴通过 pip 源码安装.如果我们想通过 pip install packages 这种方式安装的话,需上传到 pypi 仓库 ...

  8. pytest文档55-plugins插件开发

    前言 前面一篇已经学会了使用hook函数改变pytest运行的结果,代码写在conftest.py文件,实际上就是本地的插件了. 当有一天你公司的小伙伴觉得你写的还不错,或者更多的小伙伴想要你这个功能 ...

  9. pytest文档28-重复执行用例(pytest-repeat)

    前言 平常在做功能测试的时候,经常会遇到某个模块不稳定,偶然会出现一些bug,对于这种问题我们会针对此用例反复执行多次,最终复现出问题来. 自动化运行用例时候,也会出现偶然的bug,可以针对单个用例, ...

随机推荐

  1. Python输入/输出

    1.在python2.x中raw_input( )和input( ),两个函数都存在,其中区别为 raw_input( )---将所有输入作为字符串看待,返回字符串类型 input( )-----只能 ...

  2. 【LOJ】#2068. 「SDOI2016」探险路线

    题解 少考虑了情况,导致我以为是暴力讨论一次角落移动 de了两天才反应过来--简直降智 事实上,我们把移动分三类,一种是在边界跳过一段,一种是在左上角上左上左上左这样撞墙,在右下角下右下右下右这么撞墙 ...

  3. 【51nod】1742 开心的小Q

    题解 我们由于莫比乌斯函数如果有平方数因子就是0,那么我们可以列出这样的式子 \(\sum_{i = 1}^{n} \sum_{d|i} (1 - |\mu(d)|)\) 然后枚举倍数 \(\sum_ ...

  4. USACO 4.3 Letter Game (字典树)

    Letter GameIOI 1995 Figure 1: Each of the 26 lowercase letters and its value Letter games are popula ...

  5. Windows 服务器部署 asp.net core

    踩坑日记与 Windows 服务器部署 asp.net core 指南. 准备 操作系统:Windows Server 2008 R2 或更高版本 文件: Microsoft Visual C++ 2 ...

  6. Android消息总线的演进之路:用LiveDataBus替代RxBus、EventBus

    背景 对于Android系统来说,消息传递是最基本的组件,每一个App内的不同页面,不同组件都在进行消息传递.消息传递既可以用于Android四大组件之间的通信,也可用于异步线程和主线程之间的通信.对 ...

  7. 理解Linux的进程,线程,PID,LWP,TID,TGID

    在Linux的top和ps命令中,默认看到最多的是pid (process ID),也许你也能看到lwp (thread ID)和tgid (thread group ID for the threa ...

  8. tkinter-clock实例

    模仿着前辈的脚步,画了个临时的时钟显示: 代码如下: # coding:utf-8 from tkinter import * import math,time global List global ...

  9. [leetcode DP]63. Unique Paths II

    Follow up for "Unique Paths": Now consider if some obstacles are added to the grids. How m ...

  10. Fiddler手机抓包,相关细节回顾

    目录 0. 准备工作 1. Fiddler配置 2. iPhone配置 3. 抓包示例 上篇Fiddler教程,我们教了大家Fiddler安装配置及如何使用Fiddler进行基本的Http抓包及模拟请 ...