IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> pytest -> 正文阅读

[开发测试]pytest

介绍

1.pytest 是python的一种单元测试框架,同自带的 unittest 测试框架类似,但更简洁,效率更高。

2.特点

  • 易上手
  • 支持单元测试和功能测试
  • 支持参数化
  • 执行测试过程中可以将某些测试跳过,或对某些预测失败的Case标记为失败
  • 支持重复执行失败的Case
  • 支持运行由Nose,Unittest编写的测试Case
  • 有很多第三方插件,且可以自定义扩展
  • 方便和持续集成工具集成

3.安装 pip install pytest

使用方法

import pytest


def test_a():
    print("1")
    return 1 * 0


def test_b():
    print("2")
    return 1 / 0


if __name__ == '__main__':
    pytest.main()

运行结果:

注意

未配置文件时,函数必须以 test 开头。

if __name__ == '__main__':
    pytest.main(["-s"])

打印出 test_a() 函数结果。

也可以在当前目录使用控制台:pytest -s

if __name__ == '__main__':
    pytest.main(["-s", "test02.py"])

制定后只测试 test02.py 的运行结果,不然会将 test01.py 也一同测试。

默认:如果只运行当前文件,则编写 pytest.main() 函数;如果想运行当前文件夹下所有文件,则使用控制台命令。

1.配置 pytest 文件

默认规则

模块:从测试目录或当前目录中,递归寻找 test_*.py*_test.py

类:以上模块中的test开头的类,且没有初始化__init__方法

函数及方法:以上模块或类中,test开头的函数或方法

其他:unittest定义的测试用例类

pytest.ini

默认配置文件

[pytest]

addopts = -s

testpaths = ./

python_files = test_*.py *test.py

python_classes = Test*

python_functions = test_*

2.断言

import pytest


def test_a():
    print("1")
    assert 1==1


def test_b():
    print("2")
    assert "a" in "hello"


if __name__ == '__main__':
    pytest.main(["-s", "test_py03.py"])

运行结果:

3.标记

标记跳过测试:原因可以不写

标记预期失败

import pytest


def test_a():
    print("1")
    return 1 + 1


# 标记跳过
@pytest.mark.skipif(reason='我想跳过')
def test_b():
    print("2")
    return 1 / 0


# 标记预期失败
@pytest.mark.xfail(raises=ZeroDivisionError)
def test_c():
    print("3")
    return 1 / 0


if __name__ == '__main__':
    pytest.main(["-s", "test_py04.py"])

4.参数化

import pytest


# 传参
@pytest.mark.parametrize(["a", "b"], [(50, 60), (1, 2)])
def test_a(a, b):
    print("ok")
    assert a + b > 100


if __name__ == '__main__':
    pytest.main(["-s", "test_py05.py"])

夹具

1.作用:在测试之前和之后执行,用于固定测试环境,及清理回收测试资源。

基础方式

级别

def setup_module/class/method/function(module/cls/self,method/fun):
	pass
def setup_module/class/method/function(module/cls/self,method/fun):
	pass

不注明时,默认是方法级别。

  • 模块级
  • 类级
  • 方法级
  • 函数级
import pytest


def setup_module(args):
    print("setup_module", args)


def teardown_module(args):
    print("teardown_module", args)


def test_func_a():
    print("func_a")


class Test0ne():
    TAG = "A"

    def test_one(self):
        print(self.TAG + 'test_1')

    def test_two(self):
        print(self.TAG + 'test_2')


if __name__ == '__main__':
    pytest.main(["-s", "test_py06.py"])

fixture装饰器

可以传参,且可以具备返回值。

# fixture装饰器使用夹具
import pytest


@pytest.fixture()
def before():
    print("before")


@pytest.mark.usefixtures("before")
def test_a():
    print("a")
    return 1


@pytest.fixture()
def login():
    print("login")
    return "login"


@pytest.mark.usefixtures("login")
def test_b(login):
    print("b", login)
    return 1


@pytest.fixture(params=[1, 2, 3])
def init_data(request):
    print("init_data", request.param)
    return request.param


def test_data(init_data):
    assert init_data > 1


if __name__ == '__main__':
    pytest.main(["-s", "test_py07.py"])

def fixture(
	scope="function", # 夹具级别
	params=None, # 参数
	autouse=False, # 是否自动使用
	ids=None,
	name=None
):

插件

1.html报告

pip install pytest-html

[pytest]

addopts = -s --html=./report.html

2.指定执行顺序

pip install pytest-ordering

@pytest.mark.run(order=0)
# 正数标记>未标记函数>负数标记:在各阶段数字越小,优先级越高

3.失败重试

pip install pytest-rerunfailures

[pytest]

addopts = -s --html=./report.html --reruns 5

failed,重新运行5次

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-09-18 10:30:21  更:2021-09-18 10:32:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 0:34:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码