Python基础介绍 —— 使用pytest进行测试!

​编辑自动化测试

1319 篇文章62 订阅

订阅专栏

Pytest 是 Python 的一种单元测试框架,与 Python 自带的 unittest 测试框架类似,但是比 unittest 框架使用起来更简洁,效率更高。
Pytest 是一个成熟的全功能的 Python 测试工具,可以帮助你写出更好的程序,让我们很方便的编写测试用例。
适合从简单的单元到复杂的功能测试。有很多的第三方插件可以自定义扩展,并且支持 Allure,生成可视化的测试报告和测试结果,并能输出 log 信息。

Pytest官网,简单来说,就是你可以写一个测试的程序,尤其在实现项目之前,这样的好处是能够在一开始的时候(不知道代码逻辑之前)将目标的输出确认好,避免写出为了通过测试而测试的测试。

为什么要写测试?

  • 谁想进行手动测试?
  • 当你修复错误或添加新功能时,测试可以验证你在途中有没有破坏任何内容
  • 如果你有明确的要求,则可以针对每个要求进行匹配测试
  • 你不必害怕重构
  • 测试记录了你的实施 - 它们向其他人展示了你的实施案例
  • 这份清单无穷无尽......

测试驱动开发

简而言之,TDD的基本思想是在编写实际实现之前编写测试。也许这种方法最重要的好处是开发人员专注于编写与程序应该做的匹配的测试。如果测试是在实际实施之后编写的,那么测试的风险很高,这些测试只是为已经编写的逻辑显示绿灯。

测试是现代敏捷软件开发中的重要的一环,这就是为什么在Python学习路径中尽早开始思考TDD的重要性。

TDD的工作流程可归纳如下:

  • 为你要实施的更改/功能/错误修复添加测试用例
  • 运行所有测试并检查新测试是否失败
  • 实施所需的更改
  • 运行测试并验证是否全部通过
  • 重构
 
  1. 现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。

  2. 如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受

  3. 可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛

  4. 分享他们的经验,还会分享很多直播讲座和技术沙龙

  5. 可以免费学习!划重点!开源的!!!

  6. qq群号:680748947

在Notebook中运行pytest

这些是在Jupyter单元格中运行pytest所需的步骤。您可以将此单元格的内容复制到包含测试的Notebook中。

 
  1. # Let's make sure pytest and ipytest packages are installed

  2. # ipytest is required for running pytest inside Jupyter notebooks

  3. import sys

  4. !{sys.executable} -m pip install pytest

  5. !{sys.executable} -m pip install ipytest

  6. import ipytest.magics

  7. import pytest

  8. # Filename has to be set explicitly for ipytest

  9. __file__ = 'testing1.ipynb'

Pytest测试用例

让我们考虑一下sum_of_three_numbers我们想要编写测试的函数。

如函数

 
  1. #This would be in your e.g. implementation.py

  2. def sum_of_three_numbers (num1 , num2 , num3 )中:

  3. return num1 + num2 + num3

Pytest测试用例实际上与您在练习中看到的非常相似。通过将每个练习划分为三个单元格,大多数练习的结构类似于pytest测试用例:

  1. 设置测试中使用的变量
  2. 你的实现
  3. 使用断言验证你的实现是否符合要求

请参阅下面的示例测试用例,以了解练习与测试用例的常见结构之间的相似之处。

 
  1. %%run_pytest[clean]

  2. # Mention this at the top of cells which contain test(s)

  3. # This is only required for running pytest in Jupyter notebooks

  4. # This would be in your test_implementation.py

  5. def test_sum_of_three_numbers():

  6. # 1. Setup the variables used in the test

  7. num1 = 2

  8. num2 = 3

  9. num3 = 5

  10. # 2. Call the functionality you want to test

  11. result = sum_of_three_numbers(num1, num2, num3)

  12. # 3. Verify that the outcome is expected

  13. assert result == 10

现在继续更改该行assert result == 10,使断言无法看到失败测试的输出。

PS:Pytest有一个很重要的功能叫做Fixture

fixture是pytest特有的功能,它用pytest.fixture标识,定义在函数前面。在你编写测试函数的时候,你可以将此函数名称做为传入参数,pytest将会以依赖注入方式,将该函数的返回值作为测试函数的传入参数。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

在VSCode中怎么配置Python开发环境?真的超简单!

前言:VS Code 里是不包括 Python 的,所以你首先得安装一个 Python。 1、终端运行 Python 安装完 python 之后,我们可以用任何一个文本编辑工具开始写 python 代码,然后在 cmd 中运行代码。 在 VS Code 中,在不安装任…

idea maven 项目融合

背景 :项目A 和项目B 是两个独立的多模块项目,项目A 和项目B ,均为独立的数据源 。其中项目B 有两个数据原。 需要将项目B 以多模块的方式融合进项目A。 解决版本。建立项目C,只含有pom的,空项目,项目A和项…

Springboot 整合Mybatis 实现增删改查(二)

续上篇:Springboot整合Mybatis的详细案例图解分析-CSDN博客 mapper层(StudentMapper) //通过id查询student方法Student searchStudentById(int id);//通过id删除student方法int deleteStudentById(int id);//通过id增加student方法int inser…

文件批量管理利器,一键复制备份安全删除原文件,让文件管理更高效!

在数字化时代,我们每天都在与各种文件打交道,从文档、图片到视频、音频,文件的管理和存储变得越来越重要。然而,手动逐个处理文件不仅繁琐,还容易出错。那么,有没有一种方法可以让我们轻松实现文件的批量管…

如何提高Verilog代码编写水平?

在IC设计端的诸多岗位中,只要提到基础知识和必备技能,就一定少不了Verilog。 按照20年芯片设计老兵的说法“1. 知道module的基本框架。2. 知道怎么写assign,和always块。3. 其他没有了。” 也就是说用VerilogHDL做设计不要追求花架子&#…

鸿蒙开发系列教程(二十五)--样式处理(一)

1、样式属性 参考网址:https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-universal-attributes-text-style-0000001427902436-V3 属性方法以 . 链式调用的方式配置系统组件的样式和其他属性 Entry Component struct Index {build() …

由浅到深认识Java语言(1):前提概要

该文章Github地址:https://github.com/AntonyCheng/java-notes 在此介绍一下作者开源的SpringBoot项目初始化模板(Github仓库地址:https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址:https://blog.c…

linux常用命令指南

什么是Linux命令? Linux命令是在Linux操作系统中用于执行特定任务的命令行工具。它们被用于管理文件和目录、执行程序、配置系统设置等。Linux命令通常由一个命令名称和一些选项或参数组成,并且可以通过命令行界面(CLI)或脚本文件…

C语言例3-24:赋值表达式的例子

代码如下&#xff1a; #include<stdio.h> int main(void) {int i1,j;float f2.0f;// printf("fi-1 :%0.1f\n",fi-1); //ff(i-1)2.0// printf("ii>f :%d\n",ii>f); //i>f -->0 -->i0// printf("j!(i1) :%d\n",j…

智能ai文生视频,文生动漫小程序,系统搭建开发

目录 前言&#xff1a; 一、文生动漫系统搭建常规步骤 二、文生漫画是怎么操作的 总结&#xff1a; 前言&#xff1a; 小说推文是继短视频之后的又一个黄金赛道&#xff0c;它最大的特点就是&#xff0c;有一个人观看了你推荐的小说就有一份收益。那么使用系统小说转漫功能…

AI换脸软件rope最新更新的蓝宝石中文版下载

rope换脸软件蓝宝石版下载地址&#xff1a;点击下载 最近AI软件非常的火爆&#xff0c;今天就给大家带来一个可以AI替换人脸的工具rope&#xff0c;得益于机器学习技术的不断发展&#xff0c;rope经过深度神经网络的无数次迭代优化&#xff0c;最终得出的模型可以自动学习和识…

八大排序算法

排序算法 排序的概述排序的分类分为5大类&#xff1a;优点及缺点如何选择排序算法 八种排序之间的关系:一、插入排序直接插入排序动图详解代码实现 希尔排序动图详解代码实现 二、交换排序冒泡排序:动图详解代码实现 快速排序:动图详解代码实现 三、选择排序直接选择排序动图详…

Echo服务器学习__01(基础)

ASIO是一个跨平台&#xff0c;主要用于实现异步网络和其他一些底层I/O操作的C库 可以基于ASIO实现Echo服务端&#xff0c;在这之前&#xff0c;学习一些基础的知识和概念 ​ 1&#xff1a;IO多路复用 简单的来说&#xff0c;一个线程同时监听多个I/O事件就是I/O多路复用。任…

边缘计算+WEB端应用融合:AI行为识别智能监控系统搭建指南 -- 边缘设备图像识别及部署(二)

专栏目录 边缘计算WEB端应用融合&#xff1a;AI行为识别智能监控系统搭建指南 – 整体介绍&#xff08;一&#xff09; 边缘计算WEB端应用融合&#xff1a;AI行为识别智能监控系统搭建指南 -- 边缘图像识别及部署&#xff08;二&#xff09; 前言边缘图像识别与推流整体思路原始…

【人工智能】Gitee AI 天数智芯有奖体验开源AI模型,一定能有所收货,快来体验吧

大家好&#xff0c;我是全栈小5&#xff0c;欢迎阅读小5的系列文章。 这是《人工智能》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。 目录 前言两大赛道天数智芯1.模型地址2.天数智芯专区3.选择模型4.模型详情页5.部署模型6.成功部署7.执行例子8.移除模型 千模盲…

Flutter-仿淘宝京东录音识别图标效果

效果 需求 弹起键盘&#xff0c;录制按钮紧挨着输入框收起键盘&#xff0c;录制按钮回到初始位置 实现 第一步&#xff1a;监听键盘弹起并获取键盘高度第二步&#xff1a;根据键盘高度&#xff0c;录制按钮高度计算偏移高度&#xff0c;并动画移动第三步&#xff1a;键盘收起…

Unbuntu20.04 git push和pull相关问题

文章目录 Unbuntu20.04 git push和pull使用&#xff11;&#xff0e;下载[Git工具包](https://git-scm.com/downloads)&#xff12;&#xff0e;建立本地仓库&#xff13;&#xff0e;将本地仓库与github远程仓库关联&#xff14;&#xff0e;将本地仓库文件上传到github远程仓…

nuxt3项目总结

nuxt3项目总结 仓库 前言 大半年的时间&#xff0c;项目从秋天到春天&#xff0c;从管理后台到APP再到数据大屏&#xff0c;技术栈从vue3到uniApp再到nuxt3&#xff0c;需求不停的改&#xff0c;注释掉代码都快到项目总体的三分之一。 一、准备-搭建项目架子 1.1 创建一个…

图片怎么转jpg格式?一键完成图片格式转换

jpg图片格式作为最常用的图片类型之一&#xff0c;经常出现在不同的使用场景中&#xff0c;如果遇到手上的图片不是jpg格式的话&#xff0c;就需要图片转jpg之后再操作&#xff0c;那么该如何进行图片转换格式呢&#xff1f;试试本文分享的这个图片转格式的方法吧&#xff0c;利…