• 12
  • 12
分享
  • Pytest中断言的重要性,就不需要我重复了吧——软件测试圈
  • 曼倩诙谐 2020-12-23 11:51:41 字数 4221 阅读 2446 收藏 12

  前言 

  我们在写自动化的过程中,用例的断言也是至关重要的,断言可以帮助我们判断用例测试点是否成功和失败。当然在我们这么强大的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断言会给我们增加哪些新的报错信息。

1.png

  从上图的结果中可以看出带“>”的是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

2.png

  很清楚的看到了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的断言运行后就成功了。

3.png

  上文中的异常断言,可以进行实例化,实例化过后存在三个可以用的方法,分别是.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

4.png

  .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

 5.png

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

  .traceback

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

6.png

  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

7.png

   


作者:测试安静   

来源:51Testing软件测试网原创


  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 基础环境安装安装与配置首先从Node.js官网下载node-v14.15.1-x64.msi下载完成后,双击安装,在Custom Setup阶段,注意确保添加系统环境变量的选项(Add to PATH)是选中的否则后续还需要自行配制环境验证C:\Users\Administrator>node --version v14.15.1 C:\Users\Administrator>npm --version 6.14.8Cypress安装与配置通过npm安装及配置(推荐模式)新建一个Cypress的文件夹,然后在文件夹内执行命令npm init从而生成package...
            13 13 3927
            分享
          •   公共应用系统一般是指某个系统或平台最基本且重要的应用系统模块,作为系统或平台中基础服务系统为其他子系统提供统一的基础参数和公共功能,对整个系统或平台具有奠基作用,在测试过程中常会涉及到多个系统模块的联调测试和演练测试。常言道“基础不牢,地动山摇”,那么我们如何合理有效地设计公共应用系统的测试环境呢?以下分五个方面进行介绍:图1 系统或平台下公共应用系统与各子系统模块之间的功能关系  1、环境架构设计  原则上,在环境资源允许的情况下,要求统一规格的服务器和数据库,且测试环境配置尽量保证与生产环境一致。结合系统项目测试实践经验,给出系统或平台下公共应用系统环境与各子系统模块环境之间的架构设计...
            14 15 1458
            分享
          • 摘要:通过自动化测试工具模拟正常、异常场景来对系统的各项性能指标进行性能测试可以分析一个系统能力、瓶颈、关键问题等,本文结合nGrinder工具的特点,主要介绍了nGrinder在性能测试过程中的应用。1、性能测试工具性能测试范围较广,负载与压力测试都属于性能测试,两者可以相结合进行测试。通过逐渐增加负载根据系统资源的变化情况,可找到系统瓶颈所在,通过压力测试能确定系统的最大服务级别,一般系统上线前均会进行性能测试。本文使用nGrinder作为性能测试工具,直接部署成web服务,通过对不同场景进行测试,确定系统瓶颈及系统最大服务级别。2、nGrinder安装2.1.安装Controller从n...
            0 0 2643
            分享
          •   在软件测试行业,许多人渴望攀登到领导层,但往往缺乏明确的方向和策略。本文将基于亲身经历和对身边领导的观察,总结不同领导风格的特点,并提供一些实用的建议,帮助你找到成为领导的正确路径。  一、不同领导风格特点  a. 实干型领导  实干型领导以结果为导向,他们通常对其他方面不太关注,更看重最终的成果。例如,一个项目管理者可能会给团队设定一个明确的交付日期,而不太关心团队成员是如何达成这个目标的。这种风格的优点是能够推动团队高效完成任务,但缺点是可能会忽视团队成员的创新和个人成长。  案例  比如我的前领导就是这种性格的,比较关注她想要的东西,性格比较直,沟通方式优点伤人,下属需要有一点自我情...
            0 0 539
            分享
          •   调查问卷福利礼包准备就绪,如果你也想拥有畅销的测试书籍、实用的京东购物卡。那就点击链接参与调查问卷活动吧!机不可失时不再来!链接:http://vote.51testing.com/  大厂喜欢什么样的人才  ·学历  第一个,大厂在学历方面,会刷掉一批人,大家都知道大厂都喜欢到名校去找人,为什么呢,因为名校的话呢,至少是通过重重筛选,就我们中国的应式教育来说,虽然说现在叫素质教育,但是他的本质也还可以叫做应式教育,不断的考试,能够进到这一些重点学校的985/211这一些学校的,那他至少第一个通过了我们的中考高考,然后跟一大批人PK,竞争掉了很多人,素质是比较全面的。  所以说在学历这一块...
            0 0 836
            分享
      • 51testing软件测试圈微信