欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Pytest使用记录

程序员文章站 2022-03-21 11:13:19
Pytest简介Pytest是一个易用、强大、灵活的功能测试框架,并且兼容unittest和nose的测试用例。易用: 用例编写简单, 断言方便强大: 全能的mark, 强大的fixtures灵活: 灵活的执行控制及丰富的插件Pytest安装指令pip install pytestPytest编写规则测试文件以test_开头,或以_test结尾测试类以Test开头,并且不能带有 init 方法测试函数以test_开头断言使用python自带的assert项目结构目录假设我...

Pytest简介

Pytest是一个易用、强大、灵活的功能测试框架,并且兼容unittest和nose的测试用例。

  • 易用: 用例编写简单, 断言方便
  • 强大: 全能的mark, 强大的fixtures
  • 灵活: 灵活的执行控制及丰富的插件

Pytest安装指令

pip install pytest

Pytest编写规则

  • 测试文件以test_开头,或以_test结尾
  • 测试类以Test开头,并且不能带有 init 方法
  • 测试函数以test_开头
  • 断言使用python自带的assert

项目结构目录

假设我的项目结构如下图所示,在项目目录下专门创建了一个test文件夹,里面存放的都是与测试相关的文件。

├── my_project
     ├── src 
     ├── main.py
     └──  test
           ├── pytest.ini
           ├── test_1.py
           └── test_2.py

其中,pytest.ini为pytest的配置文件,名称是固定的不能随便更改,假设配置文件如下,这里我只是简单配置了下标签mark,后面会使用到mark:

[pytest]

markers =
  mo1: module 1

假设在main.py中实现了一个非常简单的方法:

import math


def func(x: int, y: int):
    return math.pow(x, y)

然后在测试文件中调用该方法,进行测试(在这里去实现自己需要测试的方法),假设test_1.py为(判断结果是否正确,主要是使用assert语句):

import pytest
from main import func


@pytest.mark.mo1
def test_interface1():
    assert func(1, 1) == 1


@pytest.mark.mo1
def test_interface2():
    assert func(2, 1) == 2


def test_interface3():
    assert func(2, 2) == 4

注意,其中有些函数上添加了@pytest.mark.mo1装饰器,mo1是我们在ini文件中提前声明了的,后面可以指定去执行哪些标签mark下的测试方法。

执行测试方法

在项目根目录打开系统终端

  • 执行test文件夹下所有测试文件
pytest -v ./test/

Pytest使用记录

  • 执行指定测试文件
pytest -v ./test/test_1.py

Pytest使用记录

  • 执行指定标签mark下的测试方法(这里就测试之前标注的mo1标签下的方法)
pytest -v -m 'mo1' ./test/

Pytest使用记录通过终端输出可以看到,一共有6个测试方法,但属于mo1标签的只有2项,并仅测试这两项方法。

常见指令参数

  • -v表示输出更加详细的测试信息
  • -x表示一旦遇到测试失败就立即退出(默认情况是会执行所有测试样例的,无论是否有测试失败的情况)
  • -q为安静模式,测试过程中不会输出测试环境以及测试进度等信息,只返回测试结果
  • -s打印测试函数中的print输出,默认是不打印的
  • -m仅执行指令标签mark下的测试方法

更多指令参数可查看pytest的帮助文档:

pytest -h

Pytest使用记录
对于常用的参数指令可以直接写在pytest.ini文件的addopts中,这样就不需要手动输入了。

[pytest]
addopts = -v

markers =
  mo1: module 1

Pytest插件使用

Pytest-ordering

有时在测试代码中可能需要按照一定的顺序去执行测试代码,此时可以使用pytest-ordering包来控制执行的顺序。

  • 安装pytest-ordering
pip install pytest-ordering
  • 在测试代码中加上装饰器@pytest.mark.run(order=1),其中order代表着执行顺序,数字越小执行优先级越高。
import pytest
from main import func


@pytest.mark.run(order=1)
def test_interface1():
    print("test1")
    assert func(1, 1) == 1


@pytest.mark.run(order=3)
def test_interface2():
    print("test2")
    assert func(2, 1) == 2


@pytest.mark.run(order=2)
def test_interface3():
    print("test3")
    assert func(2, 2) == 4

  • 再次执行测试程序
pytest -vs ./test/test_1.py

Pytest使用记录通过终端的输出,可以发现执行的顺序是按照我们给定的order顺序来执行的。pytest -vs ./test/test_1.py

参考链接

Pytest - 使用介绍
Pytest基础使用教程
pytest文档18-配置文件pytest.ini
Pytest系列 - pytest-ordering用例的执行顺序

本文地址:https://blog.csdn.net/qq_37541097/article/details/111879795