1 pytest入门

news2024/9/22 21:24:11

pytest入门

  • 示例
    • 成功
    • 失败
  • 1.1 资源获取
    • 官方文档
    • 安装
  • 1.2 运行 Pytest
    • 测试搜索
      • 命名规则
  • 1.3 运行单个测试用例
  • 1.4 使用命令行选项
    • -h(--help)
    • --collect-only
    • -k
    • -m
    • -x
    • --maxfail=num
    • -s 与 --capture=method
      • -s 等价于 --capture=no
      • --capture=sys
      • --capture=fd
    • -l(--showlocals)
    • --lf(--last-failed)
    • --ff(--failed-first)
    • -v(--verbose)
    • -q(--quiet)
    • --tb=style
      • --tb=no
      • --tb=line
      • --tb=short
      • -tb=long
      • --tb=auto
      • --tb=native
    • durations=N
      • durations=0
    • --version

示例

成功

在这里插入图片描述

失败

在这里插入图片描述

1.1 资源获取

官方文档

安装

pip install pytest

1.2 运行 Pytest

$ pytest --help
usage: pytest [options] [file_or_dir] [file_or_dir] [...]
...
  • 若不提供任何参数,将在当前及其子目录下寻找测试文件,然后运行搜索到的测试代码
  • 若提供一个或多个文件名、目录名,将逐个查找并运行所有测试
    • 重复写将重复运行

ch1/tasks/test_three.py

"""Test the task data type."""
from collections import namedtuple
Task = namedtuple('Task', ['summary', 'owner', 'done', 'id'])
# 创建默认的 Task 对象,不必指定所有属性
Task.__new__.__defaults__ = (None, None, False, None)

def test_defaults():
    """Using no parameters should invoke defaults."""
    t1 = Task()
    t2 = Task(None, None, False, None)
    assert t1 == t2

def test_member_access():
    """Check .field functionality of nametuple."""
    t = Task('buy milk', 'brian')
    assert t.summary == 'buy milk'
    assert t.owner == 'brian'
    assert (t.done, t.id) == (False, None)

ch1/tasks/test_four.py

"""Test the task data type"""

from collections import namedtuple

Task = namedtuple('Task', ['summary', 'owner', 'done', 'id'])
Task.__new__.__defaults__ = (None, None, False, None)

def test_asdict():
    """_asdict() should return a dictionary."""
    t_task = Task('do something', 'okken', True, 21)
    t_dict = t_task._asdict()
    expected = {'summary': 'do something',
                'owner': 'okken',
                'done': True,
                'id':21}
    assert t_dict == expected

def test_replace():
    """_replace() should change passed in fields."""
    t_before = Task('finish book', 'brian', False)
    t_after = t_before._replace(id=10, done=True)
    t_expected = Task('finish book', 'brian', True, 10)
    assert t_after == t_expected

在这里插入图片描述

在这里插入图片描述

测试搜索

定义:pytest 搜索测试文件和用例的过程

  • 只要遵守 pytest 的命名规则,pytest 就能自动搜索所有待执行的测试用例

命名规则

  • 测试文件:test_something.py(Better) 或 something_test.py
  • 测试函数/测试类方法:test_something
  • 测试类:TestSomething

1.3 运行单个测试用例

指定文件后加 ::test_name
在这里插入图片描述

1.4 使用命令行选项

-h(–help)

查看全部选项

  • 输出末尾声明:显示结果取决于所指定的文件或目录,未指定则默认使用当前目录和文件

在这里插入图片描述
在这里插入图片描述

–collect-only

展示哪些测试用例会被运行
在这里插入图片描述

-k

使用表达式指定希望运行的测试用例
在这里插入图片描述

-m

标记测试并分组并分组

  • 可跨文件
  • 标记名自定义
  • 测试方法上方使用 @pytest.mark.标记名称 做标记
  • 可用表达式指定多个标记名以选中测试用例
    • -m "mark1 and mark2":同时带有这两个标记
    • -m "mark1 and not mark2":带有 mark1 且不带 mark2
    • -m "mark1 or mark2":带有 mark1 或 mark 2

在这里插入图片描述

-x

遇到失败时立即停止整个会话

  • 不用该选项的默认情况:断言失败或外部异常时,将该用例标记为失败并继续运行下一个
    在这里插入图片描述

–maxfail=num

失败几次后再停止
在这里插入图片描述

-s 与 --capture=method

-s 等价于 --capture=no

允许终端在测试运行时将输出流信息与运行结果一起输出,而关闭默认的输出捕获
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

–capture=sys

sys.stdout/stderr 将被输出至内存

–capture=fd

若文件描述符为1或2,则会被输出至临时文件中

-l(–showlocals)

测试失败时打印出局部变量名和值

  • 以便规避不必要的 print 语句
    在这里插入图片描述

–lf(–last-failed)

重新运行最后一个失败的测试用例
在这里插入图片描述

–ff(–failed-first)

作用与--last-failed基本相同,区别是--ff会运行完剩余的测试用例
在这里插入图片描述

-v(–verbose)

输出信息更详细

  • 每个测试用例都占一行(原本是每个文件占一行)
  • 测试的名字和结果都会显示出来,而不仅仅是一个点或字符
    在这里插入图片描述

-q(–quiet)

简化输出信息,只保留核心内容(与-v/--verbose相反)
在这里插入图片描述

–tb=style

决定捕获到失败时输出信息(信息回溯)的显示方式

–tb=no

屏蔽全部回溯信息

–tb=line

仅打印异常的代码位置

–tb=short

仅输出 assert 的一行以及系统判定内容(不显示上下文)

-tb=long

输出最为详尽的回朔信息

–tb=auto

默认值

  • 若有多个测试用例失败,仅打印首末两个用例的回溯信息
  • 格式与long模式的一致

–tb=native

只输出 Python 标准库的回溯信息,不显示额外信息

durations=N

显示最慢的 N 个阶段,耗时越长越靠前

  • 统计时包括每个测试用例的 call、setup、teardown 过程
    在这里插入图片描述

durations=0

所有阶段按耗时从长到短排序后显示

–version

显示当前 pytest 的版本及安装目录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1381154.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mysql系列-1.Mysql基本使用

👏作者简介:大家好,我是爱吃芝士的土豆倪,24届校招生Java选手,很高兴认识大家📕系列专栏:Spring源码、JUC源码、Kafka原理、分布式技术原理、数据库技术🔥如果感觉博主的文章还不错的…

Windows Server 2012 R2部署项目

JDK 下载JDK 1.直接官网下载:http://www.oracle.com/; 2.我用的是1.8,阿里云盘分享地址:https://www.aliyundrive.com/s/u4V9x1AHL2r 安装jdk 双击安装点击下一步如果不改变路径就一直下一步 安装完成直接点击关闭即可&#x…

学习Qt笔记

前言: 学习笔记的内容来自B站up主阿西拜编程 《Qt6 C开发指南 》2023(上册,完整版)_哔哩哔哩_bilibili《Qt6 C开发指南 》2023(上册,完整版)共计84条视频,包括:00书籍介…

43-函数的声明定义,函数表达式定义,函数的调用,声明提升,参数,形参,实参

1.函数声明定义 function 函数名(){} 2.函数表达式定义 匿名式函数表达式 var 函数名 function(){} 命名式函数表达式 var 函数名 function 函数关键字(){} 3.函数的调用 var fn function f(){alert("aaa");}//函数名()//函数想调用几次…

教程视频二维码怎么做?扫码学习使用技巧

现在购买商品时经常会发现使用手册或者包装上会印有相关的二维码,扫码可以查看产品介绍或者使用说明的视频教学。将需要展示的内容放到二维码中,让用户能够通过扫码了解内容详情,有效的降低成本而且方便用户获取内容。 那么如果想要制作视频…

企业网站建设中常用的英文翻译

下面好代码网在长期的网站建设业务中总结的,一些在企业网站建设中词语的常用翻译,可以让你的企业网站更具有专业性。如果你做中英文双语版本网站或者外贸网站的请收藏备用。 网站导航 site map 公司简介 PROFILE or COMPANY Profile or Company 综述 Gen…

PyCharm连接服务器 - 1

文章目录 利用PyCharm实现远程开发使用认证代理连接服务器 利用PyCharm实现远程开发 【注】该连接服务器的方法适用于代码在服务器,我们是通过 GateWay 打开远程服务器的代码进行操作。 该功能只有在PyCharm专业版下才可以使用,并且必须是官方的正版许…

leetcode刷题记录18(2023-08-29)【最短无序连续子数组(单调栈) | 合并二叉树(dfs) | 任务调度器(桶) | 回文子串(二维dp)】

581. 最短无序连续子数组 给你一个整数数组 nums ,你需要找出一个 连续子数组 ,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。 请你找出符合题意的 最短 子数组,并输出它的长度。 示例 1: 输入&am…

Linux系统中的IP地址、主机名、和域名解析

1.IP地址 每一台联网的电脑都会有一个地址,用于和其它计算机进行通讯 IP地址主要有2个版本,V4版本和V6版本(V6很少用,暂不涉及) IPv4版本的地址格式是:a.b.c.d,其中abcd表示0~255的数字&…

【爬虫实战】-爬取微博之夜盛典评论,爬取了1.7w条数据

前言: TaoTao之前在前几期推文中发布了一个篇weibo评论的爬虫。主要就是采集评论区的数据,包括评论、评论者ip、评论id、评论者等一些信息。然后有很多的小伙伴对这个代码很感兴趣。TaoTao也都给代码开源了。由于比较匆忙,所以没来得及去讲这…

vue3安装 router 路由

安装路由 cnpm i vue-router在src文件夹下创建router/index.ts import {createRouter,createWebHashHistory} from vue-router const routercreateRouter({history:createWebHashHistory(),routes:[{path:"/",name:home,component: () > import(../views/Home/i…

基于OCR的包装产品生产日期识别系统

基于OCR的包装产品生产日期识别系统 背景技术方案PaddleOCR模型应用数据挑战与解决方案优化策略 项目实施步骤结果与展望 背景 在工业生产中,产品包装上的生产日期信息是至关重要的,它关系到物资的时效性和质量。为了更快、更准确地提取这些信息&#x…

阿里云云服务器u1实例和e实例有什么区别?

阿里云服务器u1和e实例有什么区别?ECS通用算力型u1实例是企业级独享型云服务器,ECS经济型e实例是共享型云服务器,所以相比较e实例,云服务器u1性能更好一些。e实例为共享型云服务器,共享型实例采用非绑定CPU调度模式&am…

统一网关 Gateway【微服务】

文章目录 1. 前言2. 搭建网关服务3. 路由断言工厂4. 路由过滤器4.1 普通过滤器4.2 全局过滤器4.3 过滤器执行顺序 5. 跨域问题处理 1. 前言 通过前面的学习我们知道,通过 Feign 就可以向指定的微服务发起 http 请求,完成远程调用。但是这里有一个问题&am…

API(Date类,SimpleDateFormat类,Calendar类,JDK8时间相关类,包装类,算法小题)

文章目录 【常用API】今日内容教学目标 第一章 Date类1.1 Date概述1.2 Date常用方法 第二章 SimpleDateFormat类2.1 构造方法2.2 格式规则2.3 常用方法2.4 练习1(初恋女友的出生日期)2.5 练习2(秒杀活动) 第三章 Calendar类3.1 概述3.2 常用方法3.3 get方法示例3.4 set方法示例…

微机原理常考简答题(二)

一,简述8086CPU响应可屏蔽中断的条件及过程。 CPU响应可屏蔽中断的条件是有中断请求,中断标志IF1开中断,现行指令执行结束。 CPU响应可屏蔽中断的过程:CPU在INTR引脚上接到一个中断请求信号,如果此时IF1,并…

小知识分享2

文章目录 1.TCP/IP协议2.四次挥手断开连接3.TCP的三次握手和四次挥手4.在什么情况下需要设置WINS Proxy?5.用户与用户账户有什么不同?为什么需要使用用户账户? 1.TCP/IP协议 1、TCP/IP、Transmission Control Protocol/internet Protocol,传…

LeetCode刷题:142. 环形链表 II

题目: 是否独立解决:否,参考了解题思路解决问题,思考了用快慢指针,栈,统计链表数量定位尾巴节点(因为是环形链表所以是死循环,链表数量用while循环统计不出来)都没解决 解…

ActiveMQ反序列化RCE漏洞复现(CVE-2023-46604)

漏洞名称 Apache ActiveMQ OpenWire 协议反序列化命令执行漏洞 漏洞描述 Apache ActiveMQ 是美国阿帕奇(Apache)软件基金会所研发的一套开源的消息中间件,它支持Java消息服务、集群、Spring Framework等。 OpenWire协议在ActiveMQ中被用于…

Oracle数据库 CentOS7上修改hostname后无法启动解决办法

目录 一、问题背景 二、解决问题 三、重启数据库 四、重启监听 一、问题背景 CentOS系统需要修改hostname,修改后oracle数据库无法启动和正常运行。 系统:CentOS7.3 数据库版本:Oracle 11g Express Edtion 二、解决问题 通过which orac…