百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

pytest单元测试框架

off999 2025-05-21 15:45 65 浏览 0 评论

概述

pytest 是 python 语言中一款强大的单元测试框架(也是最好用的单元测试框架),用来管理和组织测试用例,可应用在单元测试、自动化测试工作中。

1、安装

pip install pytest

在unittest中,写case必须得定义类,继承TestCase,而pytest不需要,类和函数都支持,

函数需要以test开头,类需要以Test开头,

断言只使用assert关键字即可, 代码如下:

2、pytest用例编写规则、断言

2.1、pytest用例编写规则

  1. 模块名必须以 test_ 开头,或者以 _test 结尾;
  2. 测试类必须以 Test 开头,并且不能有 init 方法;
  3. 测试方法(函数)必须以 test 开头;
  4. 断言是用基本的 assert 即可

示例:

2.2、断言

就是使用python自己的断言。assert

assert flag is True
assert 1==1
assert 'a' in 'abc'

3、pytest测试用例的运行

3.1、运行模式:主函数模式来运行

  • 运行所有模块的用例:pytest.main()
  • 运行指定模块的用例:pytest.main([ '-vs', 'test_add_fun.py' ])
  • 运行指定模块的用例:pytest.main([ '-vs', '模块文件名' ])
  • 运行指定模块的用例:pytest.main([ '模块文件名' ])
  • 运行指定目录下的用例:pytest.main([ '-vs', '目录名' ]) (需要把主函数放到测试项目最外层)
  • 通过nodeid指定用例运行:nodeid由模块名、分隔符,类名,方法名,函数名组成。
  • pytest.main([ '-vs', '目录名/模块名::类名::方法名' ])
  • pytest.main([ '-vs', '目录名/模块名::函数名' ])

3.2、命令行模式来运行

(切换到 case的对应路径下使用该命令)

  1. 运行所有模块的用例:pytest
  2. 运行指定模块的用例:pytest -vs test_add_fun.py pytest -vs 模块文件名
  3. 运行指定目录下的用例:pytest -vs 目录名 (需要把主函数放到测试项目最外层)
  4. 通过nodeid指定用例运行 :pytest -vs 目录名/模块名::类名::方法名 pytest -vs 目录名/模块名::函数名

全局配置文件pytest.ini配置文件+主函数/命令行模式 运行

一般放在项目的根目录下,名称必须是pytest.ini

当有中文时可能需要改变编码格式为GB2312

pytest.ini文件可以改变默认的测试用例规则。

不管是命令行运行也好还是说主函数运行也好,都会加载这个配置文件。

[pytest]
addopts = -vs -m "smoke"
testpaths = ./testcases
python_files = test_*.py
python_classes = Test*
python_functions = test_*
markers =
 	smoke
    online
    
  • addopts #执行的命令 这里-m "smoke"表示只执行冒烟用例。
  • testpaths #查找用例的目录
  • python_files = test_*.py #默认执行“test_”开头的case文件
  • python_classes = Test* #默认执行“Test”开头的测试类
  • python_functions = test_* #默认执行“test_”开头的测试函数或方法
  • markers = #给测试类、方法、函数定义的标签名称

3.2、运行参数详解:

-s: 显示程序中的调试信息,包括print/logging输出

-v: 丰富信息模式, 输出更详细的用例执行信息(可以和-s合并“-vs”)

展示被测试的具体类、方法,函数

-q: 安静模式, 不输出环境信息

-k:关键字匹配,用and或者or区分:匹配范围(文件名、类名、函数名)

运行测试用例名称中包含某个字符串的测试用例,如:pytest -vs -k"login or pay"

-m:mark匹配

--last-failed : 只运行上一次失败的case

--failed-first:优先运行上一次失败的case


-n:多线程运行。(前提安装插件:pytest-xdist)如:pytest -vs -n 2

--reruns num:失败重跑(前提安装插件:pytest-rerunfailres)如:pytest -vs --reruns=2

-x: 出现一个用例失败则停止测试。如:pytest -vs -x

--maxfail:出现几个失败才终止。如:pytest -vs --maxfail=s

--html:生成html的测试报告(前提安装插件:pytest-html),如:pytest -vs --html ./report/result.html


4、用例执行的优先级

实现用例优先级:需要安装pytest-ordering这个模块

使用的时候使用 pytest.mark.run(order=xx) 装饰即可;数字越小,优先级越高。 (数字全部用正数即可)

pip install pytest-ordering

5、前后置操作

用例为测试函数的实现方式

函数使用

  • setup_module: 函数的所有case运行之前执行
  • teardown_module: 函数的所有case执行之后执行
  • setup_function: 函数的每个case运行之前执行
  • teardown_function: 函数的每个case运行之后执行
import pytest


def calc(a, b):
    return a + b


def test_calc1():  # 函数方式写case
    print("这是test_calc1执行的")
    ret = calc(1, 2)
    assert ret == 3


def test_calc2():
    print("这是test_calc2执行的")
    ret = calc(1, 1)
    assert ret == 3  # 这是一条失败的case


def setup_module():
    print("所有case执行之前执行setup_module")


def teardown_module():
    print("所有case执行之后执行teardown_module")


def setup_function():
    print("每个case执行之前执行setup_function")


def teardown_function():
    print("每个case执行之后执行teardown_function")



if __name__ == '__main__':
    pytest.main(['-s',__file__])  # 运行当前文件里面所有用例,
    # -s表示详细模式,否则不会print我们在函数里面的内容,__file__代表的是当前这个py文件,也可以直接写当前这个python文件的名字

用例为测试类的实现方式

测试类使用

  • setup_class每个类的所有case运行之前执行
  • teardown_class每个类的所有case运行之执行
  • setup_method: 每个类的每个case运行之前执行
  • teardown_method:每个类的每个case运行之后执行
import pytest


def minus(a, b):
    return a - b


class TestMinus:  # 定义类的方式写case
    def test_minus_01(self):
        print("这是test_minus_01执行的")
        ret = minus(9, 4)
        assert ret == 5

    def test_minus_02(self):
        print("这是test_minus_02执行的")
        ret = minus(3, 5)
        assert ret == -2

    def setup_class(self):
        print("所有case执行之前执行setup_class")

    def teardown_class(self):
        print("所有case执行之后执行teardown_class")

    def setup_method(self):
        print("每条case执行之前执行setup_method")

    def teardown_method(self):
        print("每条case执行之后执行setup_method")


if __name__ == '__main__':
    pytest.main(["-s", __file__])  # 运行当前文件里面所有用例,
    # -s表示详细模式,__file__代表的是当前这个py文件,也可以直接写当前这个python文件的名字

相关推荐

oa系统怎么使用(oa系统具体操作流程)

1.通过互联网找到公司OA系统的网站,通过系统给出的初始账号和密码登录系统。一些单位有内部网,而另一些单位直接通过互联网访问。2.登录OA系统后,首先找到“密码设置”,修改登录名和密码。对于OA系统来...

搜狗手机助手下载(搜狗手机助手免费下载)

如果你的电脑中安装了360手机助手,当你的手机和电脑连接后,会自动在你的手机上安装360手机助手,你可以把手机和电脑中的360手机助手都卸载就可以了。搜狗ai帮写开启方法:1、在输入界面,点击输入框,...

成品视频怎么直播(成品视频怎么直播赚钱)

珍珠首饰成品和直播间开的各有优劣。成品首饰经过严格筛选和加工,品质较为稳定,且款式多样,适合不同场合佩戴。而直播间开的珍珠首饰,通常可以看到珍珠的真实情况,价格相对较为透明,且有更多定制化的可能。但需...

itunes电脑版下载官网(itunes pc版本下载)
itunes电脑版下载官网(itunes pc版本下载)

在苹果官网下载正版iTunes有如下几个步骤:一、打开浏览器输入“iTunes”进行搜索。二、找到“iTunes-Apple(中国)官网”点击进入(注意要找到官网进入)。三、打开官网后,在首页点击“Microsoft”进行下一步操作。四、最...

2026-01-28 07:43 off999

酷狗直播手机网页版(酷狗直播pc网页版)
  • 酷狗直播手机网页版(酷狗直播pc网页版)
  • 酷狗直播手机网页版(酷狗直播pc网页版)
  • 酷狗直播手机网页版(酷狗直播pc网页版)
  • 酷狗直播手机网页版(酷狗直播pc网页版)
多媒体播放器(多媒体播放器怎么使用)

1.开启蓝牙耳机:拨动蓝牙耳机的电源开关,长按住蓝牙耳机的【电源】按钮5秒钟左右松手,直至指示灯长亮蓝色即可。注:(蓝牙耳机型号不同,具体蓝牙耳机开启方式请参考蓝牙耳机说明书操作)2.开启手机蓝牙:向...

全国教育平台登录入口(2020全国教育平台登录入口)
全国教育平台登录入口(2020全国教育平台登录入口)

1、首先我们需要打开全国中小学教育平台官网,进入到主页当中;官网链接:https://www.xueanquan.com/(复制打开)2、在主界面右上角我们可以看到登录入口,点击“您好,请登录”,输入账号及密码;3、这里的账号老师和学生之间...

2026-01-28 06:51 off999

新手怎么从1688拿货(新手怎么从1688拿货卖烟酒怎么拿货)

在1688平台上进货分为以下几个步骤:1.注册并登录1688账号:首先,您需要在阿里巴巴旗下的小额批发平台1688(https://www.1688.com/)注册一个账号。如果已经有淘宝...

放置三国满v无限元宝(放置三国无限元宝破解版是真的吗)

步骤如下:。首先,你需要打开GG,然后运行游戏,并进入游戏中的商店或充值界面。接下来,输入当前游戏元宝的值并点击“搜索”按钮。然后在游戏中重新获得几个元宝,再次输入新的元宝值并点击“搜索”按钮。重复此...

安卓安装包下载(telegarm安卓安装包下载)

安装软件可以使用手机自带的应用商店,或者下载apk安装包安装手机安装包安装方法:1.apk文件是安卓手机的安装包,可以通过手机qq来安装和打开apk文件。2.首先在手机上打开qq,找到页面中的apk文...

电脑一键还原系统最简单方法
  • 电脑一键还原系统最简单方法
  • 电脑一键还原系统最简单方法
  • 电脑一键还原系统最简单方法
  • 电脑一键还原系统最简单方法
财经股票怎么投资(股票初学者相关财经知识)

可以!答案是肯定的,不过现在对直播的主讲人还是有一些要求和限制的,首先主讲人要有从业人员资格证书,这是硬件条件。其次就是所讲的内容是什么,要符合要求,不能讲股票名称,推荐股票,通常情况下↓都是对大盘走...

魔兽争霸3冰封王座下载教程(魔兽争霸3冰封王座下载教程手机版)

没法下载,因为没有说明在什么平台下载可以在网易的官方网站上进行下载,下载地址如下:https://dz.blizzard.cn/下载的时候请选择中间的“平台完整版”,这个版本包含了《魔兽争霸3》游戏本...

360浏览器下载资源失败的原因

应该是因为手机上,没有足够的空间造成的。360浏览器如果无法下载文件,也有可能是因为网络原因,网络不通畅导致的,手机上没有足够的空间,也会造成无法下载360浏览器下载不了东西的原因可能有以下几个方面:...

b站网页入口(b站网页入口链接怎么打开)

1.不存在无需付费的B站网站入口。2.这是因为B站是一个商业化的视频分享平台,为了维持平台的运营和提供更好的服务,需要收取一定的费用。3.尽管B站有一些免费的内容可以观看,但是对于一些高质量的原...

取消回复欢迎 发表评论: