pytest 框架学习总结

视频:pytest01-快速上手_哔哩哔哩_bilibili

资料:pytest 框架 - 白月黑羽

基于 Python 语言的自动化测试框架 最知名的 有如下 3 款unittest、pytest、robotframework

前两款框架主要(或者说很大程度上)是 聚焦 在 白盒单元测试而 robotframework 主要聚焦在 系统测试。

pytest可以利用第三方插件,生成表报。

安装:

安装直接执行命令:pip install pytest

还需要产生测试报表,执行如下命令安装:pip install pytest-html

快速上手:

测试用例代码规格: 我们编写的测试用例代码文件, 必须以 test_ 开头,或者以 _test 结尾

要求:类名(Class 类名)必须以Test为前缀,其中的类方法(def 类方法)必须以test为前缀。

pytest 中用例的检查点 直接用 Python 的 assert 断言。assert 后面的表达式结果 为 True ,就是 检查点 通过,结果为False ,就是检查点 不通过。和hytest中的check_point()方法不一样。

执行 :pytest 或者pytest+对应目录。直接执行 pytest 命令不会将当前目录设置为模块搜索路径

所以更推荐 执行命令 python -m pytest 。

目前 项目根目录 中 只有一个cases 目录用例存放测试用例, 将来还会有其他目录,比如:lib目录存放库代码、cfg目录存放配置数据 等等。为了防止 pytest 到其他目录中找测试用例项,执行测试时,我们可以在命令行加上目标目录 cases ,就是这样:python -m pytest cases

产生报告 :python -m pytest cases --html=report.html --self-contained-html

初始化清除:

对自动化测试框架来说,初始化清除功能 至关重要。

模块级别模块级别 的初始化、清除 分别 在整个模块的测试用例 执行前后执行,并且 只会执行1次 。定义 setup_module 和 teardown_module 全局函数。和hytest中的名称不一样。

复制代码
def setup_module():
    print('\n *** 初始化-模块 ***')

def teardown_module():
    print('\n ***   清除-模块 ***')

类级别类级别 的初始化、清除 分别 在整个类的测试用例 执行前后执行,并且 只会执行1次。定义 setup_class 和 teardown_class 类方法。主要是用来为该 中的所有测试用例做 公共的 初始化 和 清除。

复制代码
def setup_module():
    print('\n *** 初始化-模块 ***')

def teardown_module():
    print('\n ***   清除-模块 ***')

class Test_错误密码:

    @classmethod
    def setup_class(cls):
        print('\n === 初始化-类 ===')

    @classmethod
    def teardown_class(cls):
        print('\n === 清除 - 类 ===')

方法级别 :方法级别 的初始化、清除 分别 在类的 每个测试方法 执行前后执行,并且 每个用例分别执行1次定义 setup_method 和 teardown_method 实例方法

复制代码
class Test_错误密码:

    @classmethod
    def setup_class(cls):
        print('\n === 初始化-类 ===')

    @classmethod
    def teardown_class(cls):
        print('\n === 清除 - 类 ===')

    def setup_method(self):
        print('\n --- 初始化-方法  ---')

    def teardown_method(self):
        print('\n --- 清除  -方法 ---')

目录级别 :目标级别的 初始化清除,就是针对整个目录执行的初始化、清除。需要在初始化的目录下面创建 一个名为 conftest.py 的文件,里面内容如下所示

复制代码
import pytest 

@pytest.fixture(scope='package',autouse=True)
def st_emptyEnv():
    print(f'\n#### 初始化-目录甲')
//这里清除环境的代码就是 yield 之后的代码。 这是一个生成器
    yield

    print(f'\n#### 清除-目录甲')

挑选用例执行:

指定一个模块 :python -m pytest cases\登录\test_错误登录.py
指定目录 :python -m pytest cases
指定模块里面的函数或者类:python -m pytest cases\登录\test_错误登录.py::Test_错误密码

根据名字 :使用 命令行参数 -k 后面加名字来挑选要执行的测试项.

例如:python -m pytest -k C001001 -s

-k 后面的名字:可以是测试函数的名字,可以是类的名字,可以是模块文件名,可以是目录的名字;是大小写敏感的;不一定要完整,只要能有部分匹配上就行;可以用 not 表示选择名字中不包含。

根据标签:需要先给标签,然后再使用此方法-m。标签也支持中文.

复制代码
import pytest

class Test_错误密码2:

    @pytest.mark.webtest    //或者@pytest.mark.网页测试
    def test_C001021(self):
        print('\n用例C001021')
        assert 1 == 1

然后,可以这样运行指定标签的用例:python -m pytest cases -m webtest -s

Pytest 助手:

大佬开发的助手。

相关推荐
是隼人6 分钟前
buuctf-pwn wdb_2018_3rd_soEasy(ret2shellcode)题解(学习过程持续更新)
c语言·学习·安全·pwn入门·ctf入门
mykj15518 小时前
英语单词APP解锁学习新方式,智能高效背单词
学习·英语单词app
知识分享小能手9 小时前
深度学习学习教程,从入门到精通,深度学习中的正则化 — 完整知识点与代码示例(7)
人工智能·深度学习·学习
~kiss~10 小时前
Agent 的 未来吗?String: An Agentic OS Where Every App Is a Markdown File
学习
HugoStudio_SWAN10 小时前
洛谷 B4450 / B3867 / B3923 智慧购物、储蓄与做题——从程序到生活
c++·学习·程序人生·算法·生活
UIU11413 小时前
scanf与cout的误区:探究其内部的机制
c++·学习·c#·scanf
zyf10441617 小时前
暑期实践日志 Day48:复盘大纲与知识点对照表,系统汇总整理成果
学习·计算机网络·剪辑·暑期实践·课题任务
m4Rk_18 小时前
【论文阅读】Agent 记忆机制(61):CFGM——用粗到细的记忆落地贯通经验采集、知识蒸馏与在线纠错
论文阅读·人工智能·学习·开源·github
边境悍匪18 小时前
蜗牛学苑 Java 智能体学习 Day33|AOP 面向切面编程、日志技术思维导图复盘
学习
我是你的开心果77819 小时前
ai全栈软件开发day21(第四阶段喽)
人工智能·学习