【测试框架篇】单元测试框架pytest(2):用例编写

一、 前言

前面一章我们介绍了pytest环境安装和配置,并在pycharm里面实现了我们第一个pytest脚本。但是有些童鞋可能在编写脚本的时候遇到了问题,本文会讲一下我们编写pytest用例时需要遵守哪些既定的规则,同时这个规则也是可以修改的。

二、用例编写

1、默认的用例识别的规则

        当我们通过pytest执行用例时,pytest会自动递归遍历执行路径下所有的目录,根据pytest中默认用例的识别的规则,自动收集测试用例。所有在使用pytest编写测试用例之前,我们首先需要了解一下pytest收集用例时默认的用例识别规则。

  • 用例文件:所有文件名为test_开头或者_test开头的文件才会被识别为用例文件;
  • 用例类:测试文件中每个Test开头的类就是一个测试用例类,也就是说,我们定义class的时候必须以Test开头,但是没有init方法
  • 测试用例:测试类中每个test_开头的方法就是一条测试用例,测试文件中每个test开头的函数也是一条测试用例。也就是说,编写测试用例必须以test_开头
  • 所有的包pakege必须要有__init__.py文件
  • 断言使用assert

注意:上述默认的用例查找规则,可在pytest的配置文件pytest.ini进行修改(后续章节会详细介绍配置文件的使用) 另外pytest兼容unittest,以unittest的用例编写规范写的用例,pytest都能够识别出来。

2、编写用例

通过了解上述pytest中用例识别的规则,可以知道pytest中用例编写,能使用函数的形式,也能使用类的形式,那么接下来就分别给大家介绍一下这两种方式编写用例。

1)以函数形式编写用例

  • 规则:用例方法名以test_开头
# \testcase\test_demo1.py
def test_demo():print('以函数形式编写用例')assert 1==2
  • 在pycharm终端中输入pytest命令就可以执行测试函数,输出结果如下:

这里用的是在pycharm终端输入pytest命令执行用例,其实有多种方法可以用来执行用力的。后续会给大家一一讲述。另外这里出现了assert断言导致用例失败,大家可以提前感受下。

2)以类的形式编写用例

  • 规则: 测试类命名以Test开头,用例方法以test_开头
import pytestclass TestDemo:def test_demo(self):print('以类的形式编写用例')assert 1def test_demo2(self):print('test_demo2用例')assert 100 == 200if __name__ == '__main__':pytest.main()
  • 前面讲的用pytest命令执行,这里我们换种方式执行,也就是在用例里面直接调用pytest.main()函数。

三、执行测试

  • 在上面我们使用的是 pytest这个命令去执行测试用例。关于pytest执行测试,有两种方式,一种是命令行通过pytest这个命令执行,另外在代码中可以通过pytest.main()这个方法来执行测试。接下来就和大家分别详细的介绍一下pytest执行测试的方式和常用的参数
1、执行参数

# 测试用例
class TestDome:def test_demo1(self):print('----测试用例执行-----------')assert 11 == 11

  • 参数:-v      显示测试的详细参数信息

  • 参数:-s    显示测试执行的输出信息

2、pytest.main执行的参数传递
  • pytest.main方法执行测试参数传递方式:

import pytestargs = ['-v','-s']
pytest.main(args)
  • 所有的参数放在列表中,每个参数就是列表中的一个元素
  • 详细的参数可以使用命令pytest -h查看
3、指定执行的测试目录
  • 命令:pytest 测试目录路径
import pytestargs = ['-v','-s','testcase/']
pytest.main(args)
  • pytest会执行指定目录路径下所有的测试用例
4、指定执行的测试文件
  • 命令:pytest 测试文件路径
import pytestargs = ['-v','-s','testcase/test_demo1.py']
pytest.main(args)
  • pytest会执行指定测试文件中下所有的测试用例
5、指定执行的测试类
  • 命令:pytest 测试文件::测试类
import pytestargs = ['-v','-s','testcase/test_demo1.py::TestClass']
pytest.main(args)
  • pytest会执行指定测试类里面所有的测试用例
6、指定执行的测试用例
  • 命令:pytest 测试文件::测试类::测试方法
import pytestargs = ['-v','-s','testcase/test_demo1.py::TestClass::test_method']
pytest.main(args)
  • pytest会执行指定的测试方法

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

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

相关文章

嵌入式硬件电子电路设计(五)MOS管详解(NMOS、PMOS、三极管跟mos管的区别)

引言:在我们的日常使用中,MOS就是个纯粹的电子开关,虽然MOS管也有放大作用,但是几乎用不到,只用它的开关作用,一般的电机驱动,开关电源,逆变器等大功率设备,全部使用MOS管…

Conda安装软件错误(Pycharm)

conda的环境变量路径错误,比如移动了conda的文件位置conda的python版本不适合,python3.10现在更适合很多库conda对cmd没有初始化,conda init cmd.exe

《TCP/IP网络编程》学习笔记 | Chapter 11:进程间通信

《TCP/IP网络编程》学习笔记 | Chapter 11:进程间通信 《TCP/IP网络编程》学习笔记 | Chapter 11:进程间通信进程间通信的基本概念通过管道实现进程间通信通过管道进行进程间双向通信 运用进程间通信习题(1)什么是进程间通信&…

推荐一款高效的网站数据抓取工具:SysNucleus WebHarvy

SysNucleus WebHarvy是一款高效的网站数据抓取工具,支持从网页中提取文本、图像、URL 和电子邮件等内容,无需编写任何代码或脚本即可轻松实现数据抓取。用户可以通过 WebHarvy 内置的浏览器直观地浏览网页,指引软件提取所需的数据。它通过自动…

道陟科技EMB产品开发进展与标准设计的建议|2024电动汽车智能底盘大会

11月12日,2024电动汽车智能底盘大会在重庆开幕。会议由中国汽车工程学会主办,电动汽车产业技术创新战略联盟、中国汽车工程学会智能底盘分会、智能绿色车辆与交通全国重点实验室承办。本届大会围绕电动汽车智能底盘相关技术发展与融合,满足高…

Spring Authorization Server OAuth2.1

Spring Authorization Server介绍 Spring Authorization Server 是一个框架,它提供了 OAuth 2.1 和 OpenID Connect 1.0 规范以及其他相关规范的实现。 它建立在 Spring Security 之上,为构建 OpenID Connect 1.0 身份提供者和 OAuth2 授权服务器产品提供…

C++ 优先算法 —— 三数之和(双指针)

目录 题目:三数之和 1. 题目解析 2. 算法原理 ①. 暴力枚举 ②. 双指针算法 不漏的处理: 去重处理: 固定一个数 a 的优化: 3. 代码实现 Ⅰ. 暴力枚举(会超时 O(N)) Ⅱ.…

(三十三)队列(queue)

文章目录 1. 队列(queue)1.1 定义1.2 函数1.3 习题1.3.1 例题(周末舞会) 2. 双向队列(deque)2.1 定义2.2 函数2.3 题目2.3.1 例题(打BOSS) 1. 队列(queue) 队…

常见室内定位技术详解及其发展

‌常见的室内定位技术主要包括红外线定位、超声波定位、射频识别(RFID)定位、超宽带(UWB)定位、WiFi定位、蓝牙定位等‌。以下是这些技术的详解及其发展概述: ‌红外线定位技术‌ ‌原理‌:利用红外线IR标识…

《FreeRTOS任务基础知识以及任务创建相关函数》

目录 1.FreeRTOS多任务系统与传统单片机单任务系统的区别 2.FreeRTOS中的任务(Task)介绍 2.1 任务特性 2.2 FreeRTOS中的任务状态 2.3 FreeRTOS中的任务优先级 2.4 在任务函数中退出 2.5 任务控制块和任务堆栈 2.5.1 任务控制块 2.5.2 任务堆栈…

springboot的社区团购系统设计录像

springboot的社区团购系统设计录像 springboot的社区团购系统设计

枚举Enum使用

枚举使用 数据库存储字段为code 前端返回为msg 修改时需要传入code 枚举代码 import com.baomidou.mybatisplus.annotation.EnumValue; import com.fasterxml.jackson.annotation.JsonValue; import com.ruoyi.common.exception.ServiceException; import lombok.AllArgsCon…

初学人工智不理解的名词3

TTS领域的名词 from gpt-4o 在 TTS(文本到语音合成) 领域,以下是 CFM、One-Step 蒸馏 和 ReFlow 的含义和作用的详细解释: 1. CFM(Consistent Flow Matching) Consistent Flow Matching(一致流…

力扣每日一题

行变成回文: 对于每一行,遍历前半部分的元素,与后半部分的元素比较。如果不相等,计数器加 1,表示需要翻转一次。 列变成回文: 将矩阵转置,使用与行类似的方式对每一列进行统计。可以使用 Python…

linux c 语言回调函数学习

动机 最近在看 IO多路复用,包括 select() poll () epoll() 的原理以及libevent, 对里面提及的回调机制 比较头大,特写此文用例记录学习笔记。 什么是回调函数 网上看到的最多的一句话便是:回调函数 就是 函数指针的一种用法&am…

Ceph PG(归置组)的状态说明

Ceph PG(Placement Group)的状态反映了Ceph集群中数据的健康状况和分布情况。以下是Ceph PG的一些常见状态: Creating:创建状态。在创建存储池时,会创建指定数量的归置组(PG)。Ceph在创建一或多…

ElegantRL:高效、稳定的深度强化学习开源框架

ElegantRL是一个专为大规模并行深度强化学习(DRL)设计的开源框架,由Yonv1943(或AI4Finance-Foundation)开发。以下是关于ElegantRL的详细介绍: 一、项目背景与特点 项目名称:ElegantRL&#xf…

游戏引擎学习第九天

视频参考:https://www.bilibili.com/video/BV1ouUPYAErK/ 修改之前的方波数据,改播放正弦波 下面主要讲关于浮点数 1. char(字符类型) 大小:1 字节(8 位)表示方式:char 存储的是一个字符的 A…

SRIO RapidIO 笔记

RapidIO 基础与底层包类型 1.RapidIO 是基于数据包交换的互联体系结构 类似 Mac 层使用以太网的计算机网络(IEEE802.3)? 首先 RapidIO 是一个互联协议(类似计算机网络 IEEE802.3),包含硬件与软件的定义&…

python makedirs() 详解

在 Python 中,os.makedirs() 函数用于递归地创建目录。也就是说,它不仅会创建指定的目录,还会创建任何必要的父目录。这个函数在处理需要创建多级目录结构时非常有用。 1、语法 os.makedirs(name, mode0o777, exist_okFalse) 1.1、参数 n…