Pytest中断言的重要性

目录

  前言 

  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

 

 

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

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

相关文章

Idea Mybatis插件:提高CRUD效率

mybatis-sql-viewer插件主要提供能力&#xff1a;将mybatis xml转成真实SQL语句、参数mock、SQL规范检查、SQL索引检查、SQL运行、SQL压测及Mybatis SQL语句扫描。 1. 简介 虽然写了很久的CRUD&#xff0c;但是依旧觉得写好CRUD是一件非常难且麻烦的事情&#xff0c;以下的情…

南京阿里云代理商:阿里云服务器的可扩展性和弹性如何?是否支持按需付费?

南京阿里云代理商&#xff1a;阿里云服务器的可扩展性和弹性如何&#xff1f;是否支持按需付费&#xff1f;   一、阿里云服务器的可扩展性   阿里云作为业界知名的云服务提供商&#xff0c;其服务器具有极强的可扩展性。可扩展性主要体现在以下几方面&#xff1a;   1. …

C++哈希表

目录 介绍哈希概念哈希冲突哈希函数解决哈希冲突 闭散列介绍线性探测二次探测负载因子 实现哈希表结构哈希函数元素查找插入元素删除元素 开散列介绍实现哈希表结构元素查找插入元素删除元素析构函数 介绍 哈希概念 了解过搜索二叉树与红黑树后&#xff0c;它们的结构特点主要…

测试用例excel转word(Office word篇)

场景 我们在项目中&#xff0c;默认情况下是用我们的Excel用例模版输出测试用例。但是有的项目中&#xff0c;会要求在Word版本的测试计划或者测试报告中&#xff0c;写明测试用例。而我们的测试用例&#xff0c;有的项目有上千条&#xff0c;这个时候如果从Excel往Word中复制…

Cortext-M3系统:异常(3)

1、异常 异常响应系统是再M3内核水平上的&#xff0c;支持众多的系统异常和外部中断。1-15为系统异常&#xff0c;大于16为外部中断。除了个别异常的优先级被定死外&#xff0c;其它异常的优先级都是可编程的。优先级数值越小&#xff0c;优先级越高。CM3支持中断嵌套&#xff…

MyBatis面试题

什么是 MyBatis&#xff1f; MyBatis 是一个半 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;它内部封装了 JDBC&#xff0c;开发时只需要关注 SQL 语句本身&#xff0c;不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。程序员直接编写原生…

机器学习——识别足球和橄榄球

一、选题的背景 橄榄球起源于足球&#xff0c;二者即相似又有所区别。计算机技术发展至今&#xff0c;AI技术也有了极大的进步&#xff0c;通过机器学习不断的训练&#xff0c;AI对于足球和橄榄球的识别能力可以帮助人们对足球和橄榄球的分辨。机器学习是一种智能技术&#xff…

详解Http的Content-Type

目录 1.概述 2.常用类型 2.1.application/x-www-form-urllencoded 2.2.application/json 3.Spring MVC支持的编码 3.1.实验 3.2.适配器 3.3.自定义适配器 1.概述 HTTP&#xff08;HyperText Transfer Protocol&#xff09;&#xff0c;超文本传输协议。超文本&#xf…

GEE:将地形山体阴影和类别概率信息结合起来,绘制概率山体阴影(Probability Hillshade)图

作者:CSDN @ _养乐多_ 本文将介绍使用哨兵数据将地形山体阴影和类别概率信息结合起来,绘制概率山体阴影图的代码。 “Probability Hillshade”(概率山体阴影)是指使用Dynamic World数据集中最可能的类别概率信息创建的一种可视化效果。它结合了地形山体阴影和类别概率信息…

【pytorch】新的windows电脑从头搭建pytorch深度学习环境(完整版+附安装包)

文章目录 新的windows电脑搭建pytorch深度学习环境电脑环境的配置显卡驱动cudacudnn pytorch开发软件的安装minicondavscode pytorch环境的安装conda安装python环境安装pytorch和torchvision 附录1&#xff1a;部分torch、torchvision、torchaudio版本对应关系附录2&#xff1a…

iOS App 上架流程图文教学

在上架App 之前必须先准备好开发者帐号&#xff0c;但申请开发者帐号因法兰克早在之前已经申请好了&#xff0c;故就跳过此步骤&#xff0c;直接从产生凭证到上传App开始讲起。首先&#xff0c;要将自己辛苦写好的App 送审的话&#xff0c;则要依序做完下列几件事情即可。 在开…

常见面试题之框架篇

1.Spring框架中的单例bean是线程安全的吗&#xff1f; 不是线程安全的&#xff0c;是这样的。 当多用户同时请求一个服务时&#xff0c;容器会给每一个请求分配一个线程&#xff0c;这是多个线程会并发执行该请求对应的业务逻辑&#xff08;成员方法&#xff09;&#xff0c;…

TensorFlow Core—基本分类:对服装图像进行分类

现在人工智能很火的&#xff0c;看到了这篇文章&#xff0c;给自己普及一下基础知识&#xff0c;也分享给大家&#xff0c;希望对大家有用。 本指南将训练一个神经网络模型&#xff0c;对运动鞋和衬衫等服装图像进行分类。即使您不理解所有细节也没关系&#xff1b;这只是对完…

3ds Max - Pivot Painter Tool

很久之前的笔记&#xff0c;整理归档&#xff1b; Pivot Painter Tool是3dsMax中的插件&#xff0c;主要是辅助将Mesh中每个Element生成自己的Pivot Position&#xff0c;方便如使用World Position Offset对每个Element进行精确控制&#xff0c;导入使用Pivot Painter Tool工具…

二进制搭建 Kubernetes v1.20

k8s集群master01&#xff1a;192.168.179.25 kube-apiserver kube-controller-manager kube-scheduler etcd k8s集群master02&#xff1a;192.168.179.26 k8s集群node01&#xff1a;192.168.179.23 kubelet kube-proxy docker k8s集群node02&#xff1a;192.168.179.22 …

统信UOS系统开发笔记(六):提取在线安装软件后,提取其安装包,部署目标机使用离线软件包方式安装软件

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/131348876 红胖子(红模仿)的博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软…

【性能设计篇】数据库拓展

前两篇文章介绍了分布式存储的机制&#xff0c;为保证数据的高性能以及可拓展&#xff0c;采用分片/分区机制。为保证数据的高可用性&#xff0c;采用复制/镜像机制存储数据。一份数据存储多份。而这两种方式在数据中&#xff0c;就是分片/分区机制。分库分表/读写分离。 读写…

深入理解深度学习——Transformer:解码器(Decoder)部分

分类目录&#xff1a;《深入理解深度学习》总目录 相关文章&#xff1a; 注意力机制&#xff08;Attention Mechanism&#xff09;&#xff1a;基础知识 注意力机制&#xff08;Attention Mechanism&#xff09;&#xff1a;注意力汇聚与Nadaraya-Watson核回归 注意力机制&…

一文了解RabbitMQ安装使用

什么是RabbitMQ? 官网&#xff1a;Messaging that just works — RabbitMQ RabbitMQ是一种开源的消息中间件软件&#xff0c;用于构建可扩展的分布式应用程序。它实现了高级消息队列协议&#xff08;AMQP&#xff09;&#xff0c;这是一种网络协议&#xff0c;用于在应用程序之…

C++ 新的类型转换

文章目录 前言一、静态转换&#xff08;static_cast&#xff09;二、动态转换&#xff08;dynamic_cast&#xff09;&#xff1a;三、常量转换&#xff08;const_cast&#xff09;&#xff1a;四、重新解释转换&#xff08;reinterpret_cast&#xff09;&#xff1a;总结 前言 …