Pytest中断言的重要性

news2025/1/15 18:11:55

目录

  前言 

  pytest断言

  增加断言详细信息

  异常断言

  .type

  .value

  .traceback

  pytest常用断言


  前言 

      在pytest中,断言是非常重要的一部分。断言可以帮助我们验证代码的正确性,检查函数返回的值是否符合要求,以及判断程序中预期行为是否发生。如果代码没有进行足够的断言验证,就不能保证代码质量和正确性。

  pytest断言

  前面说到pytest的断言比较强大,它直接可以使用python自带的断言内容,当然不止而已,pytest还有一个重要的功能是可以重写assert关键字,pytest会截断对python中自带的assert的调用然后替换成自己定位的assert,从而可以获取更多的错误信息,让我们知道具体哪里出现了问题。

  编写一个加法进行通过断言验证。

  import pytest
  class Test_01:
      def add(self,x,y):
              c = x + y
              return c
      def test_001(self):
          c = self.add(1,2)
          assert c == 4
  if __name__ == '__main__':
      pytest.main(['-s'

  看到上面的代码大家都知道是会失败的, 那么我们一起看下pytest断言会给我们增加哪些新的报错信息。

  从上图的结果中可以看出带“>”的是python自带的错误解释,而带E的则是pytest进行添加的,这样就能很清楚的看到错误信息,比如这个3==4结果是错误的。

  增加断言详细信息

  在编写用例的时候,断言的时候想要获取一些更加有用的信息,比如参数化的时候,需要知道哪个参数进行传入的,如果出错了可以帮助我们进行调试,那么这一点pytest中的assert也可以帮助我们进行增加。

  import pytest
  class Test_01:
      def add(self,x,y):
              c = x + y
              return c
      def test_001(self):
          a = 1
          b = 2
          assert self.add(a,b) == 4 , '当前传入的a值:%s,传入的b值:%s' %(a,b)
  if __name__ == '__main__':
      pytest.main(['-s

  很清楚的看到了python自带的assert和pytest增加的对比,python自带的没有把值传入,pytest帮助我们把值传入进去,更加清楚的帮助查看错误信息。

  异常断言

  pytest断言方法内容应该没有unittests多,但是比unittest更加方便,更加灵活。这里安静在举一个栗子。比如我们在执行一条错误的用例的时候,已经知道错误类型,这个时候我们也可以通过判断这个错误类型,如果错误类型和预期一致,那么就直接通过用例,反之失败。

  安静先写一个错误的函数,然后找到他的错误类型,下面的函数错误类型为"AssertionError"。

  def cake():
          a = 'anjing'
          b = 'test_anjing'
          assert  a == b
  cake()
  ------------执行结果--------------
   File "E:/auto_test/test_01.py", line 5, in <module>
      cake()
    File "E:/auto_test/test_01.py", line 4, in cake
      assert  a == b
  AssertionError
  这里可以使用?pytest.raises(错误类型)? 进行对比断言。

  import pytest
  class Test_01:
      def cake(self):
          a = 'anjing'
          b = 'test_anjing'
          assert  a == b
      def test_001(self):
          print('Test_01下的用例001')
          with pytest.raises(AssertionError):
              self.cake()
  if __name__ == '__main__':
      pytest.main(['-v

  这个从表面上运行结果肯定是失败的,因为a不等于b,但是加入pytest的断言运行后就成功了。

  上文中的异常断言,可以进行实例化,实例化过后存在三个可以用的方法,分别是.type,.value,.traceback安静简单的进行举例说明。

  .type

  我们这里也可以通过pytest.raises进行断言,我们可以根据返回的tpye进行对比,查看我们预期的与实际的是否一致。

  import pytest
  class Test_01:
      def cake(self):
          a = 'anjing'
          b = 'test_anjing'
          assert  a == b
      def test_001(self):
          print('Test_01下的用例001')
          with pytest.raises(AssertionError) as excinfo:
              self.cake()
          print('错误的类型是:%s' %excinfo.type)
          assert excinfo.type == AssertionError
  if __name__ == '__main__':
      pytest.main(['-s

  .value

  如果还不知道具体的错误出现在哪里,我们也可以通过value进行查看具体的错误类型。

  import pytest
  class Test_01:
      def cake(self):
          a = 'anjing'
          b = 'test_anjing'
          assert  a == b
      def test_001(self):
          print('Test_01下的用例001')
          with pytest.raises(ZeroDivisionError) as excinfo:
              self.cake()
          print('错误的类型是:%s' %excinfo.type)
          print('错误的值:%s'%excinfo.value)
          assert excinfo.type == ZeroDivisionError
  if __name__ == '__main__':
      pytest.main(['-s

 

  可以看出具体错误的值是assert中的两个字符串不相等导致的。

  .traceback

  这里这个方法表示可以把代码中哪行出现了错误进行打印出来,此方法必须在str下进行打印。

  pytest常用断言

  前面也介绍了pytest的断言可以复用python的断言,安静简单的列举几个python的断言:

  1、判断是否为真:??assert xx ?

  2、判断不为真:??assert not xx ?

  3、判断a是否包含b:??assert a in b ?

  4、判断a不包含b:?assert a not in b?

  5、判断两值相等:??assert b == a ?

  6、判断两值不相等:??assert a != b ?

  安静对常用断言简单的举几个例子。

  import pytest
  class Test:
      def is_true(self):
          '''返回True'''
          return True
      def test_01(self):
          '''判断是否为真'''
          assert self.is_true()
      def is_false(self):
          '''返回False'''
          return False
      def test_02(self):
          '''判断不为真'''
          assert not self.is_false()
      def test_03(self):
          '''判断是否相等'''
          a = 'test_anjing'
          b = 'test_anjing'
          assert a == b
      def test_04(self):
          '''判断两值不相等'''
          a = 'test_anjing'
          b = 'anjing'
          assert a != b
      def test_05(self):
          '''判断a包含b'''
          a = 'test_anjing'
          b = 'anjing'
          assert b in a
      def test_06(self):
          '''判断a不包含b'''
          a = 'anjing'
          b = 'test'
          assert b not in a
  if __name__ == '__main__':
      pytest.mai

 

 作为一位过来人也是希望大家少走一些弯路,希望能对你带来帮助。(WEB自动化测试、app自动化测试、接口自动化测试、持续集成、自动化测试开发、大厂面试真题、简历模板等等),相信能使你更好的进步!

留【自动化测试】即可【自动化测试交流】:574737577(备注ccc)icon-default.png?t=N5F7http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=hIqEQD5B5ZyLT0S-vFq64p5MCDBc8jJU&authKey=O%2B3T95fjNUNsYxXnPIrOxvkb%2BbuFd1AxuUP5gCbos34AQDjaRG2L6%2Fm9gGakvo94&noverify=0&group_code=574737577

 

 

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

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

相关文章

MySQL数据库(二)

前言 本文是关于MySQL数据库的第二弹。 临时表不受原表数据类型的约束&#xff01;&#xff01; SQL语法不区分大小写。 一、列的使用 &#xff08;一&#xff09;列的增加 1、全列插入 insert into 表名 values (数据,数据); 也可以同时插入多条数据: insert into 表名 va…

小程序跳转多次返回首页

小程序跳转多次返回首页 小程序跳转多个页面后直接返回首页 问题 例&#xff1a; 跳转&#xff1a;A(首页) - > B -> C -> D 返回&#xff1a;D -> A(首页) 1、页面中按钮跳转 <!--D页面 WXML--> <view class"-btn"><button bindtap&q…

6月第3周榜单丨飞瓜数据B站UP主排行榜(哔哩哔哩)发布!

飞瓜轻数发布2023年6月12日-6月18日飞瓜数据UP主排行榜&#xff08;B站平台&#xff09;&#xff0c;通过充电数、涨粉数、成长指数三个维度来体现UP主账号成长的情况&#xff0c;为用户提供B站号综合价值的数据参考&#xff0c;根据UP主成长情况用户能够快速找到运营能力强的B…

浅谈智能配电房的系统设计和技术方案

张心志acrelzxz 安科瑞电气股份有限公司 上海嘉定 201801 摘 要&#xff1a;为了进一步提升配网运维工作质量和效率&#xff0c;支撑配网技术发展向数字化、精益化、智能化转型。在大量的配电房现状问题分析以及新监测技术调研的基础上&#xff0c;文章提出了智能配电房…

WebGL/Threejs瀑布水流粒子效果

webgl瀑布效果 初始化场景 function init () {scene new THREE.Scene();camera new THREE.PerspectiveCamera (45, scr.w / scr.h, 0.1, 10000);renderer new THREE.WebGLRenderer ({ antialias: true });renderer.gammaInput true;renderer.gammaOutput true;renderer.…

盘点中国顶级黑客Top10,最后一位你猜是谁

第一名&#xff1a;袁仁广 别名&#xff1a;大兔子(datuzi)&#xff0c;人称袁哥。提起袁任广&#xff0c;知道的人或许并不多。但如果提起袁哥或者大兔子&#xff0c;在国内安全业界称得上尽人皆知。在国内&#xff0c;他的windows系统方面的造诣可谓首屈一指&#xff0c;早在…

centos系统socket5安装与使用

一、socket5安装 1、安装依赖 yum -y install gcc openldap-devel pam-devel openssl-devel 2、安装socket5 wget http://nchc.dl.sourceforge.net/project/ss5/ss5/3.8.9-8/ss5-3.8.9-8.tar.gztar -xzvf ss5-3.8.9-8.tar.gzcd ss5-3.8.9./configuremakemake install 二、…

Android Jetpack Compose — Slider滑动条

在Android Jetpack Compose中&#xff0c;Slider(滑动条&#xff09;是一个常用的用户界面控件&#xff0c;它允许通过滑动条来选择一个范围或数值。Slider控件非常适用于调整音量、亮度、进度等需要连续调整的场景。 一、Slider的属性 Slider是Android Jetpack Compose中的一个…

html实现多种风格步骤条

文章目录 1.设计来源1.1 线性风步骤条1.2 进度风步骤条1.3 花式风步骤条1.4 格子风步骤条 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/131308246 html实现多种风格步骤…

Java版本+企业电子招投标系统源代码

一、立项管理 1、招标立项申请 功能点&#xff1a;招标类项目立项申请入口&#xff0c;用户可以保存为草稿&#xff0c;提交。 2、非招标立项申请 功能点&#xff1a;非招标立项申请入口、用户可以保存为草稿、提交。 3、采购立项列表 功能点&#xff1a;对草稿进行编辑&#x…

浅析景区慢直播的需求与基于视频技术的解决方案

一、行业背景 从春节到“五一”假期&#xff0c;旅游市场高开稳走&#xff0c;复苏持续提速。“慢直播”是一种特别的直播形式&#xff0c;没有主持人&#xff0c;也没有绚丽的镜头切换以及精美的后期制作&#xff0c;只用固定机位拍摄来更加真实地展现事件现场&#xff0c;以…

文件上传413状态码报错解决方案

目录 前言 解决办法 前言 我的前端Vue项目部署在Nginx上&#xff0c;当我上传一个3M多的图片时&#xff0c;发生413错误&#xff0c;刚开始我以为是数据库字段不对&#xff0c;但我看后确实是大数据类型&#xff08;text、blob&#xff09;&#xff0c;这种数据类型应对一张…

《后端存储实战课》课程学习笔记(三)

流量大、数据多的商品详情页系统该如何设计&#xff1f; 电商的商品系统主要功能就是增删改查商品信息&#xff0c;没有很复杂的业务逻辑&#xff0c;支撑的主要页面就是商品详情页。设计这个系统的存储&#xff0c;你仍然需要着重考虑两个方面的问题。 第一&#xff0c;要考虑…

First De-Trend then Attentd: Rethinking Attention for Time-Series Forecasting

论文题目&#xff1a;重新思考注意力在时间序列预测任务中应用 作者单位&#xff1a;亚马逊 访问学者、亚马逊云科技 摘要&#xff1a; 基于Transformer的一系列方法在长时间序列预测任务中很有效&#xff0c;除了在时域部分学习注意力外&#xff0c;最近的工作也在频域中探…

心中的TOP4编程语言❤

编程语言心动值排名&#xff1a; java&#xff1a;❤❤❤❤❤ python&#xff1a;❤❤❤❤ C&#xff1a;❤❤❤ C&#xff1a;❤❤❤❤ 一&#xff1a;关于编程语言优劣的评选标准 个人认为一门语言的优劣势标准评判主要是这门语言解决了哪一类问题&#xff0c;为人类创造了多…

Linux0.11内核源码解析-pipe.c

目录 什么是PIPE&#xff1f; PIPE注意事项 有名和匿名管道 内核管道通信 管道读函数 管道写函数 管道创建 什么是PIPE&#xff1f; 进程间通信&#xff08;IPC&#xff0c;Inter-Process Communication&#xff09;是指在不同进程间进行数据通信和交换的过程。管道&am…

生成式AI数据中心网络来了,NVIDIA抢占加速计算高端市场

在大模型和生成式AI的大风口下&#xff0c;NVIDIA大力倡导并率先进军传统数据中心的高端市场——加速计算数据中心。自进入AI和大数据时代&#xff0c;业界就开始出现“加速计算”的概念。简单理解&#xff0c;加速计算即使用GPU、FPGA以及各种DPU等加速芯片以及相关的软件技术…

【Java】POJO类的属性不要命名为isXXX的问题描述,复现,解决方法

问题描述 POJO的属性是布尔类型的时候&#xff0c;采用is_xxx的命名方式&#xff0c;出现参数无法找到的情况 问题复现 Boolean 的属性命名为isA&#xff0c;但是它的getter和setter自动取消了is public class Person { Boolean isA; public Boolean getA() { return is…

locust学习教程(4) - 命令行参数

前言 一句话总结&#xff1a;命令行参数、环境变量、配置文件 1、所有命令行参数 1.1、常用场景参数解读 1.1.1、无web界面&#xff0c;定时运行&#xff0c;数据存储在csv中&#xff1a; locust -f per_01_test.py --headless -u 10 -r 1 -t 1m -s 120 --csvexample --head…

locust学习教程(1)- 概念相关

前言 一句话总结&#xff1a;本文是基于2.4.1的版本去学习locust&#xff0c;如果你想完全搞懂它&#xff0c;那么就从最新的产品文档从头到尾去研读一遍吧。 1、locust是什么&#xff1f; 1.1、相关资料 官网&#xff1a;www.locust.io/产品文档&#xff1a;docs.locust.io…