conftest.py


# conftest.py

# 什么是 conftest.py

  • 本质上就是一个 Python 文件
  • 可以理解为一个配置文件

# conftest.py 的作用

  • 存放共享的 fixture
  • 可以写自己的本地插件

# conftest.py 作用范围

  • 根据 conftest.py 文件的存放位置来决定作用范围
  • 不同的目录下的 conftest.py,作用范围只在该层级以及以下目录生效

# 配置 fixture 示例

注意事项

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

# 项目工程结构

web_conf是工程名称
├─douban
│  │  conftest.py
│  │  test_douban.py
│  │  __init__.py
|
├─jd
│  │  test_jd.py
│        
├─taobao
│  │  conftest.py
│  │  test_taobao.py
│  │  __init__.py
│   
|  main.py
│  conftest.py
│  __init__.py
|  test_001.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# web_conf 下
# conftest.py 代码

设置全局的 fixture

import pytest
@pytest.fixture(scope="session")
def start():
    print("\n获取driver,全局获取一次")
    driver = "Chrom"
    yield driver
    print("\n释放driver,全局释放一次")

@pytest.fixture(autouse=True)
def get_driver(start):
    print("\n每个用例都要获取driver")
    return start
1
2
3
4
5
6
7
8
9
10
11
12
# main.py 代码

运行所有用例

import pytest

if __name__ == '__main__':
    pytest.main(["-s"])
1
2
3
4
# test_001.py 代码

根目录下的测试用例

def test_001(start):
    print(f"\n测试用例1获取driver:{start}")
1
2
# web_conf/douban 下
# conftest.py 代码

设置 douban 包下的 fixture

import pytest
@pytest.fixture(scope="module")
def open_douban(start):
    print("\n打开douban页面")
    return start

@pytest.fixture
def login(open_douban):
    print("\n登录成功")
    token = "douban"
    yield token
    print("\n退出登录")
1
2
3
4
5
6
7
8
9
10
11
12
# test_douban.py 代码

douban 包下的测试用例

def test_002(login):
    print(f"\n{login} 操作douban111")

def test_003(login):
    print(f"\n{login} 操作douban222")
1
2
3
4
5
# web_conf/jd 下

目录下没有 __init__.py 文件

# test_jdn.py 代码

jd 包下的测试用例

def test_005(start):
    print(f"\n{start} 操作jd1234")
1
2
# web_conf/taobao 下
# conftest.py 代码

设置 taobao 包下的 fixture

import pytest
@pytest.fixture(scope="module")
def open_taobao(start):
    print("\n打开taobao页面")
    return start

@pytest.fixture
def login(open_taobao):
    print("\n登录成功")
    token = "taobao"
    yield token
    print("\n退出登录")
1
2
3
4
5
6
7
8
9
10
11
12
# test_taobao.py 代码

taobao 包下的测试用例

def test_004(login):
    print(f"\n{login} 操作taobao111")

def test_005(login):
    print(f"\n{login} 操作taobao222")
1
2
3
4
5
# 测试结果
test_001.py 
获取driver,全局获取一次
每个用例都要获取driver
测试用例1获取driver:Chrom
.
douban\test_douban.py 
打开douban页面
每个用例都要获取driver
登录成功
douban 操作douban111
退出登录
每个用例都要获取driver
登录成功
douban 操作douban222
退出登录

jd\test_jd.py 
每个用例都要获取driver
Chrom 操作jd1234
.
taobao\test_taobao.py 
打开taobao页面
每个用例都要获取driver
登录成功
taobao 操作taobao111
退出登录
每个用例都要获取driver
登录成功
taobao 操作taobao222
退出登录

释放driver,全局释放一次
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

conftest.py 写入本地自定义插件后续更新........