pytest【三、自定义配置、自定义命令行参数和自定义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")

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

八戒无戒i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值