------------恢复内容开始------------

1.pytest需要测试多个py文件,这些文件有一定的依赖关系,同时执行的时候,需要只执行一次初始化setup,结束再执行一次teardown;

2.多个py文件需要使用pytest的conftest.py,这个文件名是固定的,在同级目录还需要__init__.py;

3.由于setup这种经典的初始化方法只支持module,class.method,function,setup

  module: 一个py文件只运行一次,里面可以是class和function;

  class: 每个class执行一次;

  method: class里面的每个函数执行一次;

  function : 每个函数执行一次(函数不在class中);

  setup: 最小层级,每个函数运行一次;在allure报告中,现在在Test body中;其他级别显示在的setup中;

4.经典初始化不支持多个py初始化,只能选用fixture;

  scope值 :默认是function;

  session 多个py文件;

  module 一个py文件里面多个class或function;

  class: class级别;

  function:函数级别;

由于我们是多个py所以,只能选择session;

yield 是setup和teardown分界线;

@pytest.fixture(scope="session")
def start_up_session():
try: case_name = os.path.basename(__file__).replace('.py', '')
print(case_name + " start")
# yield 前面的是tearup的操作
yield case_name
# yield 后面的是teardown的操作
print(case_name + " finish")

  autouse = True   fixture里面有个参数autouse,默认是Fasle没开启的,可以设置为True开启自动使用fixture功能,这样用例就不用每次都去传参了;

@pytest.fixture(scope="function", autouse=True)
def get_status():
case_name = os.path.basename(os.path.abspath(__file__)).replace(".py", "")
print(case_name + " begin")
yield 1 if case_name.isalnum() else 0
print(case_name + " finish")

# 不传参数get_tstus也会运行
def test_1():
print(1111) def test_name():
print(2222) if __name__ == "__mian__":
pytest.main(["-s", "test_base.py"])
=========================================
============================= test session starts =============================
platform win32 -- Python 3.6.8, pytest-5.4.2, py-1.8.1, pluggy-0.13.1 -- C:\Program Files\Python36\python.exe
cachedir: .pytest_cache
metadata: {'Python': '3.6.8', 'Platform': 'Windows-10-10.0.18362-SP0', 'Packages': {'pytest': '5.4.2', 'py': '1.8.1', 'pluggy': '0.13.1'}, 'Plugins': {'allure-pytest': '2.8.13', 'cov': '2.8.1', 'forked': '1.1.3', 'html': '2.1.1', 'metadata': '1.9.0', 'ordering': '0.6', 'rerunfailures': '9.0', 'timeout': '1.3.4', 'xdist': '1.32.0'}, 'JAVA_HOME': 'C:\\Program Files\\Java\\jdk1.8.0_202'}
rootdir: F:\ShenjuCloudTest\APP
plugins: allure-pytest-2.8.13, cov-2.8.1, forked-1.1.3, html-2.1.1, metadata-1.9.0, ordering-0.6, rerunfailures-9.0, timeout-1.3.4, xdist-1.32.0
collecting ... collected 2 items test_base.py::test_1 test_base begin
PASSED [ 50%]1111
test_base finish test_base.py::test_name test_base begin
PASSED [100%]2222
test_base finish ============================== 2 passed in 0.03s ============================== Process finished with exit code 0

autouse = True   fixture里面有个参数autouse,默认是Fasle没开启的,需要显示调用;

import pytest
import os # 默认autouse=Fasle
@pytest.fixture(scope="function")
def get_status():
case_name = os.path.basename(os.path.abspath(__file__)).replace(".py", "")
print(case_name + " begin")
yield 1 if case_name.isalnum() else 0
print(case_name + " finish") # 显式调用
@pytest.mark.usefixtures("get_status")
def test_1():
print(1111) # 显式调用
@pytest.mark.usefixtures("get_status")
def test_name():
print(2222) if __name__ == "__mian__":
pytest.main(["-s", "test_base.py"])

5.fixture 需要返回值:用传参数调用:在函数参数中,插入fixture的参数;

import pytest
import os @pytest.fixture(scope="function", autouse=True)
def get_status():
case_name = os.path.basename(os.path.abspath(__file__)).replace(".py", "")
print(case_name + " begin")
yield 1 if case_name.isalnum() else 0
print(case_name + " finish") def test_1(get_status):
num = get_status
assert num == 0
print(1111) def test_name(get_status):
num = get_status
assert num < 1
print(2222) if __name__ == "__mian__":
pytest.main(["-s", "test_base.py"])
=================================== ============================= test session starts =============================
platform win32 -- Python 3.6.8, pytest-5.4.2, py-1.8.1, pluggy-0.13.1 -- C:\Program Files\Python36\python.exe
cachedir: .pytest_cache
metadata: {'Python': '3.6.8', 'Platform': 'Windows-10-10.0.18362-SP0', 'Packages': {'pytest': '5.4.2', 'py': '1.8.1', 'pluggy': '0.13.1'}, 'Plugins': {'allure-pytest': '2.8.13', 'cov': '2.8.1', 'forked': '1.1.3', 'html': '2.1.1', 'metadata': '1.9.0', 'ordering': '0.6', 'rerunfailures': '9.0', 'timeout': '1.3.4', 'xdist': '1.32.0'}, 'JAVA_HOME': 'C:\\Program Files\\Java\\jdk1.8.0_202'}
rootdir: F:\ShenjuCloudTest\APP
plugins: allure-pytest-2.8.13, cov-2.8.1, forked-1.1.3, html-2.1.1, metadata-1.9.0, ordering-0.6, rerunfailures-9.0, timeout-1.3.4, xdist-1.32.0
collecting ... collected 2 items test_base.py::test_1 test_base begin
PASSED [ 50%]1111
test_base finish test_base.py::test_name test_base begin
PASSED [100%]2222
test_base finish

6.fixture 不需要返回值:除了用传参数调用,还可以用@pytest.mark.usefixtures();对class和函数都可以使用,记得和scope搭配;

import pytest
import os @pytest.fixture(scope="function", autouse=True)
def get_status():
case_name = os.path.basename(os.path.abspath(__file__)).replace(".py", "")
print(case_name + " begin")
yield 1 if case_name.isalnum() else 0
print(case_name + " finish") @pytest.mark.usefixtures("get_status")
def test_1():
print(1111) @pytest.mark.usefixtures("get_status")
def test_name():
print(2222) if __name__ == "__mian__":
pytest.main(["-s", "test_base.py"])
=======================================
============================= test session starts =============================
platform win32 -- Python 3.6.8, pytest-5.4.2, py-1.8.1, pluggy-0.13.1 -- C:\Program Files\Python36\python.exe
cachedir: .pytest_cache
metadata: {'Python': '3.6.8', 'Platform': 'Windows-10-10.0.18362-SP0', 'Packages': {'pytest': '5.4.2', 'py': '1.8.1', 'pluggy': '0.13.1'}, 'Plugins': {'allure-pytest': '2.8.13', 'cov': '2.8.1', 'forked': '1.1.3', 'html': '2.1.1', 'metadata': '1.9.0', 'ordering': '0.6', 'rerunfailures': '9.0', 'timeout': '1.3.4', 'xdist': '1.32.0'}, 'JAVA_HOME': 'C:\\Program Files\\Java\\jdk1.8.0_202'}
rootdir: F:\ShenjuCloudTest\APP
plugins: allure-pytest-2.8.13, cov-2.8.1, forked-1.1.3, html-2.1.1, metadata-1.9.0, ordering-0.6, rerunfailures-9.0, timeout-1.3.4, xdist-1.32.0
collecting ... collected 2 items test_base.py::test_1 test_base begin
PASSED [ 50%]1111
test_base finish test_base.py::test_name test_base begin
PASSED [100%]2222
test_base finish

7. 多个py文件使用conftest.py,名字固定,不要改;

  同级需要有__init__.py;

  千万不要通过import导入conftest,否则每个py文件都会运行一遍conftest.py, 无法起到多个py只执行一次作用;pytest执行的时候自动去读conftest.py配置;

import pytest
import os # conftest.py @pytest.fixture(scope="session")
def get_status():
case_name = os.path.basename(os.path.abspath(__file__)).replace(".py", "")
print(case_name + " begin")
yield 1 if case_name.isalnum() else 0
print(case_name + " finish")
import pytest
import os # test_base @pytest.mark.usefixtures("get_status")
def test_1():
print(1111) @pytest.mark.usefixtures("get_status")
def test_name():
print(2222) if __name__ == "__mian__":
pytest.main(["-s", "test_base.py"])
====================================================================

============================= test session starts =============================
platform win32 -- Python 3.6.8, pytest-5.4.2, py-1.8.1, pluggy-0.13.1 -- C:\Program Files\Python36\python.exe
cachedir: .pytest_cache
metadata: {'Python': '3.6.8', 'Platform': 'Windows-10-10.0.18362-SP0', 'Packages': {'pytest': '5.4.2', 'py': '1.8.1', 'pluggy': '0.13.1'}, 'Plugins': {'allure-pytest': '2.8.13', 'cov': '2.8.1', 'forked': '1.1.3', 'html': '2.1.1', 'metadata': '1.9.0', 'ordering': '0.6', 'rerunfailures': '9.0', 'timeout': '1.3.4', 'xdist': '1.32.0'}, 'JAVA_HOME': 'C:\\Program Files\\Java\\jdk1.8.0_202'}
rootdir: F:\ShenjuCloudTest\APP
plugins: allure-pytest-2.8.13, cov-2.8.1, forked-1.1.3, html-2.1.1, metadata-1.9.0, ordering-0.6, rerunfailures-9.0, timeout-1.3.4, xdist-1.32.0
collecting ... collected 2 items

test/test_base.py::test_1 conftest begin
PASSED [ 50%]1111

test/test_base.py::test_name PASSED [100%]2222
conftest finish

============================== 2 passed in 0.03s ==============================

Process finished with exit code 0

------------恢复内容结束------------

pytest 多个PY文件执行共享变量及用fixture和conftest的更多相关文章

  1. pytest文档2-用例执行

    用例设计原则 1.文件名以test_******.py文件和*******_test.py 2.以test_****开头的函数 3.以Test***开头的类 4.以test_*****开头的方法 5. ...

  2. Pytest fixture及conftest详解

    前言 fixture是在测试函数运行前后,由pytest执行的外壳函数.fixture中的代码可以定制,满足多变的测试需求,包括定义传入测试中的数据集.配置测试前系统的初始状态.为批量测试提供数据源等 ...

  3. pytest:conftest.py文件

    一.fixture scope 为session 级别是可以跨 .py模块调用的,也就是当我们有多个 .py文件的用例时,如果多个用例只需调用一次fixture,可以将scope='session', ...

  4. 『德不孤』Pytest框架 — 14、Pytest中的conftest.py文件

    目录 1.conftest.py文件介绍 2.conftest.py的注意事项 3.conftest.py的使用 4.不同位置conftest.py文件的优先级 5.conftest.py中Fixtu ...

  5. 【linux】终端直接执行py文件,不需要python命令

    先将终端所在路径切换到python脚本文件的目录下然后给脚本文件运行权限,一般755就OK,如果完全是自己的私人电脑,也不做服务器什么的,给777的权限问题也不大(具体权限含义参考chmod指令的介绍 ...

  6. python顺序执行多个py文件

    python顺序执行多个py文件 假如我要执行code目录下的python程序,假设该目录下有1.py,2.py,3.py,4.py四个文件,但是我想执行1.py,2.py,4.py,则可在该目录下创 ...

  7. jenkins+pytest+ allure运行多个py文件测试用例

    jenkins的pytest运行多个py文件,导出allure报告方法,只需改下job的配置中的构建即可(pytest会运行指定文件下的所有test开头的py文件),如下:              ...

  8. selenium,unittest——自动化执行多个py文件脚本并生成报告

    将多个py文件的自动化脚本顺序运行,并生成报告,运行run_all_case后会自动运行文件内所有test开头的py文件并在指定文件夹report生成由脚本时间命名的报告 脚本执行后结果: 生成报告并 ...

  9. 整合多个py文件接口的unittest。suite执行方法

    1.每个接口用例为一个.py文件.内容如下: getAdMakeMoneyList文件: # coding=utf-8import xlrdimport requestsimport unittest ...

随机推荐

  1. 重学 Java 设计模式:实战工厂方法模式

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获!

  2. Kubernetes学习笔记(二):部署托管的Pod -- 存活探针、ReplicationController、ReplicaSet、DaemonSet、Job、CronJob

    存活探针 Kubernetes可以通过存活探针(liveness probe)检查容器是否存活.如果探测失败,Kubernetes将定期执行探针并重新启动容器. 官方文档请见:https://kube ...

  3. redis python操作

    1.基于连接池方式实现对五个数据类型操作,每种数据类型2个操作 2.基于spring-data-redis 基于jedis来实现对五种数据类型操作,每种数据类型实现两个操作,包括事务 以上为基于jav ...

  4. 【python 】文件下载进度条(装逼利器)

    基础版 import requests url = "http://mp.111ttt.cn/mp3free/81135985.mp3" rsp = requests.get(ur ...

  5. JavaScript计时

    JavaScript计时分两种 setTimeout:程序在隔几秒后执行 语法: setTimeout(function(){要执行的程序},xxxx) setInterval:程序每隔几秒执行 语法 ...

  6. JavaScript实现树深度优先和广度优先遍历搜索

    1.前置条件 我们提前构建一棵树,类型为 Tree ,其节点类型为 Note.这里我们不进行过多的实现,简单描述下 Note 的结构: class Node{ constructor(data){ t ...

  7. 微信小程序语音同步智能识别的实现案例

    目录 一.背景 二.同声传译插件介绍 1. 微信小程序后台添加插件 2. 微信小程序启用插件 三.语音同步转换的前端实现 1.界面UI与操作 2.代码实现 四.后端SpringBoot实现语音文件上传 ...

  8. 在线编写复杂的数学公式--EdrawMath

    网址: EdrawMath , 非常好用

  9. Nginx 笔记(四)nginx 原理与优化参数配置 与 nginx 搭建高可用集群

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一.nginx 原理与优化参数配置 ​ ​ master-workers 的机制的好处 首先,对于每个 ...

  10. Redis 单节点百万级别数据 读取 性能测试.

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 这里先进行造数据,向redis中写入五百万条数据,具体方式有如下三种: 方法一:(Lua 脚本) vim ...