自定义配置、自定义命令行参数和自定义fixture
1、 自定义配置和自定义命令行参数
在测试项目根路径下新建conftest.py文件, 在测试用例开始前, pytest会先自动识别conftest.py中定义的配置函数和fixture, 具体函数如下(常用):
pytest_configure(config)
:配置pytest, 相当于在pytest.ini(根目录下, 配置整个pytest测试项目)添加值pytest_addoption(parse)
: 添加命令行自定义参数pytest_report_header(config)
: 添加报告头信息, 可通过config.getoption("--para")
方式获取自定义命令行参数, 函数返回值是一个字符串或者一个字符串列表
conftest.py代码如下:
# -*- coding: UTF-8 -*-
# ---------------------------------------------------------
# @Author : Bingo
# @Time : 2021/4/19 0:42
# @File : conftest.py
# ---------------------------------------------------------
# There is no bug, have a great day. Please start your code.
import getpass
import pytest
def pytest_configure(config):
"""
添加pytest.ini配置文件, 如下: 添加markers信号值, 结合命令行参数-m使用
:param config:
:return:
"""
config.addinivalue_line("markers", "finish: test has finished")
config.addinivalue_line("markers", "custom: test custom mark")
def pytest_addoption(parser):
"""
添加命令行自定义参数, getpass.getuser()获取当前计算机用户
:param parser:
:return:
"""
parser.addoption("--infoLevel", default="Warning", help="message ingo level")
parser.addoption("--tester", default=getpass.getuser(), help="set tester name")
def pytest_report_header(config):
"""
添加报告头信息, 可以通过config.getoption("--tester")方式获取命令行传入的参数
:param config:
:return:
"""
tester = config.getoption("--tester")
info_level = config.getoption("--infoLevel")
return [
"tester: {}".format(tester),
"info-level: {}".format(info_level)
]
有如下测试用例, test_demo1.py
# -*- coding: UTF-8 -*-
# ---------------------------------------------------------
# @Author : Bingo
# @Time : 2021/4/17 0:03
# @File : demo1.py
# ---------------------------------------------------------
# There is no bug, have a great day. Please start your code.
import pytest
class TestCaseClass:
@pytest.mark.finish
def test_length(self):
assert len("hello world") >= 10
@pytest.mark.custom
def test_result(self):
assert 1 == 1
def test_answer(self):
assert 2 + 0 == 2
执行测试>>>:
2、 自定义fixture
conftest.py有如下代码, 其中 使用@pytest.fixture
可以自定义fixtiue, 自定义的fixture可以作为测试用例函数的参数, 其值为定义的fixture的函数返回值
import getpass
import pytest
def pytest_addoption(parser):
"""
添加命令行自定义参数, getpass.getuser()获取当前计算机用户
"""
parser.addoption("--infoLevel",
default="Warning",
help="message ingo level")
parser.addoption("--tester",
default=getpass.getuser(),
help="set tester name")
# 自定义fixture, 可在整个项目中使用,作为测试用例函数的参数
@pytest.fixture
def info_level(request):
"""
获取命令行参数infoLevel
"""
return request.config.getoption("--infoLevel")
@pytest.fixture
def tester(request):
"""
获取命令行参数tester
"""
return request.config.getoption("--tester")
有如下测试用例:
# -*- coding: UTF-8 -*-
# ---------------------------------------------------------
# @Author : Bingo
# @Time : 2021/4/17 0:03
# @File : demo1.py
# ---------------------------------------------------------
# There is no bug, have a great day. Please start your code.
import pytest
class TestCaseClass:
def test_length(self, tester, info_level):
print(f"<tester: {tester}, infoLevel={info_level}>")
assert len("hello world") >= 10
def test_result(self, tester, info_level):
print(f"<tester: {tester}, infoLevel={info_level}>")
assert 1 == 1
def test_answer(self):
assert 2 + 0 == 2
执行结果如下:
3、上述conftest.py完整代码
# -*- coding: UTF-8 -*-
# ---------------------------------------------------------
# @Author : Bingo
# @Time : 2021/4/17 0:07
# @File : test_demo2.py
# ---------------------------------------------------------
# There is no bug, have a great day. Please start your code.
import getpass
import pytest
def pytest_configure(config):
"""
添加pytest.ini配置文件, 如下: 添加markers信号值, 结合命令行参数-m使用
"""
config.addinivalue_line("markers", "finish: test has finished")
config.addinivalue_line("markers", "custom: test custom mark")
def pytest_addoption(parser):
"""
添加命令行自定义参数, getpass.getuser()获取当前计算机用户
"""
parser.addoption("--infoLevel",
default="Warning",
help="message ingo level")
parser.addoption("--tester",
default=getpass.getuser(),
help="set tester name")
def pytest_report_header(config):
"""
添加报告头信息, 可以通过config.getoption("--tester")方式获取命令行传入的参数
"""
tester = config.getoption("--tester")
info_level = config.getoption("--infoLevel")
return ["tester: {}".format(tester), "info-level: {}".format(info_level)]
# 自定义fixture, 可在整个项目中使用,作为测试用例函数的参数
@pytest.fixture
def info_level(request):
"""
获取命令行参数infoLevel
:param request:
:return:
"""
return request.config.getoption("--infoLevel")
@pytest.fixture
def tester(request):
"""
获取命令行参数tester
:param request:
:return:
"""
return request.config.getoption("--tester")