首页 > 其他分享 >Pytest 框架快速入门

Pytest 框架快速入门

时间:2024-07-17 10:28:54浏览次数:14  
标签:入门 框架 Pytest py fixture pytest 测试用例 参数 测试

Pytest 框架常用功能介绍

一、简介

Pytest 是一个功能强大的 Python 测试框架,具有简单易用、测试用例清晰易读、支持参数化、可运行由 Nose 和 unittest 编写的测试用例、拥有丰富的第三方插件且可自定义扩展、支持重复执行失败的用例以及方便与持续集成工具集成等特点。

二、快速入门

  1. 安装:使用 pip3 install pytest 命令进行安装。
  2. 查看版本:通过 Pytest --version 查看版本。
  3. 快速入门示例
    • 导入 pytest
    • 定义测试用例方法和测试函数,使用 assert 进行断言。
    • 通过 pytest.main(["-s", "test_sample.py"]) 执行测试。

三、基础使用

  1. 用例前置和后置执行
    • unittest:通过 setUptearDown 在每个用例执行前后执行,通过 setUpClasstearDownClass 在类里面所有用例执行前后执行。
    • pytest:函数级别为 setup/teardown,运行于测试方法的始末,每个测试用例运行一次;类级别为 setup_class/teardown_class,运行于测试类的始末,一个测试内只运行一次。
  2. 默认运行规则
    • 测试文件以 test_*.py 开头或 *_test.py 结尾。
    • 测试类以 Test 开头,且不能带有 __init__ 方法。
    • 测试函数以 test_ 开头。
    • 运行参数:
      • -v:用于显示每个测试函数的执行结果。
      • -q:只显示整体测试结果。
      • -s:用于显示测试函数中 print() 函数输出。
  3. 自定义运行规则
    • pytest.ini 文件中配置,如 addopts(运行参数)、testpaths(测试目录)、python_files(测试文件)、python_classes(测试类)、python_functions(测试方法)等。
  4. 断言
    • 使用标准的 Python assert 断言语句,如 assert xx(判断 xx 为真)、assert not xx(判断 xx 不为真)、assert a in b(判断 b 包含 a)、assert a == b(判断 a 等于 b)、assert a!= b(判断 a 不等于 b)。

四、标记(mark)使用

  1. 标记
    • 一个测试函数可以有多个标记,一个标记也可以标记多个测试函数。
    • 运行参数:pytest -m test01pytest -m "test01 or test02"
  2. 跳过测试
    • skip:标记 skip 表示跳过该测试用例,运行不执行,可使用 skip(reason=None)
    • skipif:条件判断验证是否忽略不执行,判断条件为表达式 skipif(condition, reason=None)

五、数据参数化

  1. 传入单个参数pytest.mark.parametrize(argnames, argvalues)argnames 为参数名,argvalues 为参数对应值,类型必须为可迭代类型,一般使用 list
  2. 传入多个参数@pytest.mark.parametrize(("username", "password"), [("xiaoming", "123456"), ("xiaohong", "456789")])list 的每个元素都是一个元组,元组里的每个元素和按参数顺序一一对应。

六、常用插件

  1. pytest-html:用于生成测试报告,安装命令为 pip3 install pytest-html,在配置文件中的命令行参数中增加 --html=用户路径/report.html
  2. pytest-rerunfailures:当失败后尝试再次运行,安装命令为 pip3 install pytest-rerunfailures,在配置文件中的命令行参数中增加 --reruns n,如果期望加上出错重试的等待时间,可使用 --reruns-delay

七、Fixture

  1. 作用setupteardown 针对整个脚本全局生效,而 fixture 可以让我们自定义测试用例的前置条件。
  2. 优势
    • 命名方式灵活,不局限于 setupteardown
    • conftest.py 配置里可以实现数据共享,不需要 import 就能自动找到 fixture
    • scope="session" 可实现多个 .py 跨文件使用一个 session 来完成多个用例。
  3. 如何使用
    • fixture 名称作为测试用例函数的输入参数:@pytest.fixture
    • 测试用例加上装饰器:@pytest.mark.usefixtures(fixture_name)
    • fixture 设置:@pytest.fixture(autouse=True)
  4. scopefixture 的作用域,默认为 function(函数级别),排序为:session > module > class > function
  5. autouse:默认 False,手动调用该 fixture;如果是 True,所有作用域内的测试用例都会自动调用该 fixture
  6. name:默认装饰器的名称。
  7. 实例化顺序
    • function(函数级):每一个函数都会调用。
    • class(类级别):每个测试类只运行一次。
    • module(模块级):每一个 .py 文件调用一次。
    • session(会话级):每次会话只需要运行一次,会话内所有方法及类,模块都共享这个方法,是针对 .py 级别。

标签:入门,框架,Pytest,py,fixture,pytest,测试用例,参数,测试
From: https://blog.csdn.net/demon119/article/details/140486923

相关文章

  • 算法入门篇(一)
    目录一、语言基础1.数据类型基本数据类型整型(Integer)浮点型(Floating-point)字符型(Character)布尔型(Boolean)抽象数据类型数组(Array)栈(Stack)队列(Queue)链表(LinkedList)树(Tree)图(Graph)散列表(HashTable)堆(Heap)2.输入输出、数组、字符串输入/输出(I/O)数组字符串3.顺......
  • TS 入门(四):TypeScript 高级类型与类型操作
    目录前言回顾1.联合类型和交叉类型a.联合类型b.交叉类型2.字面量类型3.类型断言4.类型兼容性5.类型守卫a.`typeof`类型守卫b.`instanceof`类型守卫c.自定义类型守卫扩展知识点:类型映射(MappedTypes)结语前言在前三章中,我们介绍了TypeScript的基础知识......
  • 【利用Python进行数据分析8】Pandas入门(描述性统计的汇总与计算)
    导包importyfinanceasyfimportpandasaspdimportnumpyasnp1.描述性统计的汇总与计算#1.描述性统计的汇总与计算#数值型数据df=pd.DataFrame([[1.4,np.nan],[7.1,-4.5],[np.nan,np.nan],[0.75,-1.3]],index=["a","b","c","d"],......
  • 学懂C#编程:常用框架学习(三)——.NET Framework框架下的Entity Framework (EF)开发应用详
            目录一、EntityFramework概述二、EntityFramework的核心组成部分EntityDataModel(EDM):EntityClient:ObjectServices:ADO.NETProvider:三、分层结构应用程序层:EntityFramework层:数据库层:四、EF主要的功能包括五、三种开发模式详解1.代码......
  • Spring框架(IOC和AOP详解)
    重生之我在CSDN学java第七天(IOC和AOP)文章目录重生之我在CSDN学java第七天(IOC和AOP)一、IOC(InversionofControl)1.核心概念2.入门案例创建一个spring的maven项目导spring上下文包业务层实现(依赖dao对象运行)数据层实现创建spring的配置文件BeanBean配置文件创建......
  • java入门---作用域
    作用域:作用域是指在程序中定义变量的区域,该变量在该区域内可被访问。1、关于作用域的两种查询在JavaScript中编译器会用两种查询方式进行查询一种是LHS查询;一种是RHS查询;俩个查询的含义是,当变量出现赋值操作在左侧时进行LHS查询,出现在右侧时进行RHS查询。详细的讲就是R......
  • C++入门(3)inline函数与缺省参数
    一.inline函数当程序执行函数调用时,系统要建立栈空间,保护现场,传递参数以及控制程序执行的转移等等,这些工作需要系统时间和空间的开销。当函数功能简单,使用频率很高,为了提高效率,直接将函数的代码镶嵌到程序中。但这个方法有缺点,一是相同代码重复书写,二是程序的可读性往往没有......
  • C++基础入门(4)
    一.函数重载C语言实现int,double,char类型的比较大小函数。intmy_max_i(inta,intb){returna>b?a:b;}doublemy_max_d(doublea,doubleb){returna>b?a:b;}charmy_max_c(doublea,doubleb){returna>b?a:b;}这些函数都执行了相同的动作,返回两个形参中的最大值;从用户......
  • 第五章 初识Sping框架(2023版本IDEA)
    学习目标5.1Sping框架的历史由来5.2SpringIOC5.2.1IOC和依赖注入5.2.2第一个Spring程序1.创建一个Maven项目2.添加SpringBoot依赖3.创建一个简单的SpringBoot应用4.创建一个Controller5.运行你的应用5.3SpringAOP1.定义一个切面(Aspect)2.创建一个服务类......
  • TS 入门(五):TypeScript接口与类
    目录前言回顾高级类型与类型操作1.接口a.基本接口b.可选属性和只读属性c.函数类型接口d.可索引类型e.接口继承2.类a.基本类b.类的成员(属性和方法)c.构造函数d.继承和派生类e.公有、私有和受保护的修饰符f.静态属性和方法g.抽象类扩展知识点:接口与类的结合......