当前位置: 首页 > news >正文

一篇文章了解Pytest单元测试框架

文章目录

  • 1.Pytest是什么
  • 2.Pytest的安装
  • 3.Pytest快速入门
  • 4.Pytest文件规范
  • 5.常用的断言类型

1.Pytest是什么

pytest 是一个功能强大且灵活的 Python 测试框架,主要优点包括简洁易用、自动测试发现、丰富的插件生态系统、参数化测试、详细的断言错误信息、以及强大的 fixtures 机制。

2.Pytest的安装

对于所有的第三方库都可以使用pip install xxx进行安装.

对于pytest的安装,可以直接在pycharm中打开终端,输入

pip install pytest

即可开始安装.如果下载比较慢可以使用国内镜像源进行下载

3.Pytest快速入门

创建一个pytest_learn的包,在包下面创建test_demo1.py:

输入以下内容:

def test_one():assert 1 == 1

然后在命令行中输入pytest

运行结果:

image-20240910215322995

可以看到找到了一条测试用例以及文件路径,一条测试用例通过加上执行的时间

将文件内容改成:

def test_one():assert 1 == 2

再次执行:

image-20240910215613857

可以看到这里就报错了,有很明显的红色,红线中的内容就是错误的原因

除了上述运行pytest用例的方式,还可以旁边的小三角执行用例

image-20240910215927817

不过这种方式只适合单个测试用例的执行

如果没有小三角,可以在设置中进行配置

image-20240910220022688

4.Pytest文件规范

⭐文件命名规范:

  1. .py测试文件必须以“test_”开头或者以“_test”结尾
  2. 测试方法必须以“test_”开头
  3. 测试类必须以Test开头,并且不能有init方法

如果命名不规范就会造成找不到测试用例的情况

我这个包下面有两个文件,一个符合规范,一个不符合规范.

image-20240910220419906

两个文件中都写好了对应的用例

image-20240910220545441

在命令行中输入pytest 加上路径

image-20240910220525262

可以看到只执行了一条测试用例.

但是如果直接执行具体的文件下面,即使文件命名不规范但是方法命名规范也是可以执行的,如图所示:

image-20240910220744007

如果文件是以test_开头,默认就是以pytest去运行的

image-20240910221214293

如果不想用pytest去运行,有两种解决方案:

  1. 修改文件名称

  2. 在设置中修改测试框架为Unittests

    image-20240910221556007

测试类必须以Test开头,并且不能有init方法

例如:

class TestCase:def __init__(self):passdef test_1(self):assert 1==1def test_2(self):assert "a" == "abc"

运行结果:

image-20240910221921625

执行测试类中的测试用例的方法除了在命令行中输入pytest "想要运行文件的测试路径"和点击测试类的小三角之外,还可以创建main方法

if __name__ == '__main__':pytest.main()

运行main方法即可

5.常用的断言类型

  1. 基本等价性检查:
    • assert x == y: 检查变量x是否等于y。
    • assert x != y: 检查变量x是否不等于y。
    • assert x is y: 检查变量x和y是否引用相同的对象。
    • assert x is y: 检查变量x和y是否引用不相同的对象。
  2. 集合操作:
    • assert x in y: 检查x是否是y的成员。
    • assert x not in y: 检查x是否不是y的成员。
  3. 比较操作:
    • assert x < y: 检查x是否小于y。
    • assert x > y: 检查x是否大于y。
    • assert x <= y: 检查x是否小于或等于y。
    • assert x >= y: 检查x是否大于或等于y。

示例:

    def test_3(self):assert 1 == 1assert 1 != 2assert  1 < 2assert  2 > 1assert  3 >= 3assert 3 <= 3assert  "a" in "abc"assert "a" not in "xxx"e = [1, 2, 3]f = eg = [2, 3, 4]assert e is fassert g is not f

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Vue3前端框架学习记录
  • Leetcode sql high frequency questions 50 (based)
  • Go日志系统
  • 【Go】-Gin框架
  • 什么是Aware注入?
  • Python之异常处理与程序调试(Exception Handling and Program Debugging in Python)
  • 银河麒麟v10-sp3 -x86系统创建新分区扩展lvm
  • java基础-IO(6)转换流InputStreamReader、OutputStreamWriter
  • 内存分区学习
  • Qt使用绿色pdf阅读器打开文件
  • java spring定时任务-动态任务
  • 认知杂谈59《实力为王:用硬本事赢得尊重,开启人生逆袭路》
  • Python3中函数的用法
  • linux-用户与权限管理-组管理
  • 防患于未然,智能监控新视角:EasyCVR视频平台在高校安全防控中的关键角色
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • 「面试题」如何实现一个圣杯布局?
  • AngularJS指令开发(1)——参数详解
  • chrome扩展demo1-小时钟
  • co.js - 让异步代码同步化
  • CSS 提示工具(Tooltip)
  • go语言学习初探(一)
  • iOS小技巧之UIImagePickerController实现头像选择
  • Java-详解HashMap
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • Redis中的lru算法实现
  • spring boot 整合mybatis 无法输出sql的问题
  • Spring Boot快速入门(一):Hello Spring Boot
  • Vim 折腾记
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 构建工具 - 收藏集 - 掘金
  • UI设计初学者应该如何入门?
  • ​如何防止网络攻击?
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • #QT 笔记一
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (vue)el-cascader级联选择器按勾选的顺序传值,摆脱层级约束
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (十三)MipMap
  • (算法)前K大的和
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (转)关于pipe()的详细解析
  • (自适应手机端)响应式服装服饰外贸企业网站模板
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .NET/C# 的字符串暂存池
  • .NET_WebForm_layui控件使用及与webform联合使用
  • .NET设计模式(2):单件模式(Singleton Pattern)
  • /tmp目录下出现system-private文件夹解决方法
  • @ 代码随想录算法训练营第8周(C语言)|Day57(动态规划)
  • @Builder注释导致@RequestBody的前端json反序列化失败,HTTP400
  • @Controller和@RestController的区别?