zoukankan      html  css  js  c++  java
  • python-pytest学习(八)-assert断言

    一、前言

      断言是自动化测试基本最重要的一步,一个用例没有断言,就等于失去自动化测试的意义了。什么是断言呢?

      简单来讲就是实际结果和期望结果去对比,符合预期就测试pass,不符合预期结果就测试failed

    二、assert

      pytest允许您使用标准python断言来验证python测试中的期望和值。例如

    def f():
        return 3
    
    def test_function():
        assert f()==4

    运行结果:

     从报错信息可以看到断言失败原因:E assert 3 == 4

    三、异常信息

      接下来再看一个案例,如果想在异常的时候,输出一些提示信息,这样报错后就知道什么原因了

    def f():
        return 3
    
    def test_function():
        a=f()
        assert a%2==0,"判断a为偶数,当前a的值为:%s"%a

    运行结果:

      这样当断言失败的时候,会给出自己写的失败原因了

      E AssertionError: 判断a为偶数,当前a的值为:3

    四、异常断言

      为了写关于引发异常的断言,可以使用pytest.raises作为上下文管理器,如下

    import pytest
    
    def test_zero_division():
        with pytest.raises(ZeroDivisionError):
            1/0

    运行结果:

      如果我们要断言它抛的异常是不是预期的,比如执行:1/0,预期结果是抛异常:ZeroDivisionError:dision by zero,那我们要断言这个异常,通常是断言异常的type和value值了。

      这里1/0的异常类型是ZeroDivisionError,异常的value值是division by zero,于是用例可以这样设计。

    import pytest
    def test_zero_division():
        """断言异常"""
        with pytest.raises(ZeroDivisionError) as excinfo:
            1/0
            
        # 断言异常类型type
        assert excinfo.type == ZeroDivisionError
        # 断言异常value值
        assert "division by zero" in str(excinfo.value)

      excinfo是一个异常信息实例,它是围绕实际引发的异常的包装器。主要属性是.type、.value和.traceback

    五、常用断言

      pytest里面断言实际上就是python里面的assert断言方法,常用的有以下几种

      1.assert xx判断xx为真

      2.assert not xx判断xx不为真

      3.assert a in b 判断b包含a

      4.assert a == b 判断a等于b

      5.assert a != b 判断a不等于b

    import pytest
    
    def is_true(a):
        if a>0:
            return True
        else:
            return False
    
    def test_01():
        """断言xx为真"""
        a = 5
        b = -1
        assert is_true(a)
        assert not is_true(b) # 一个用例可以支持多个断言
    
    def test_02():
        """断言b包含a"""
        a = "hello"
        b = "hello world"
        assert a in b
    
    def test_03():
        """断言相等"""
        a = "bibi"
        b = "bibi"
        assert a == b
    
    def test_04():
        """断言不等于"""
        a = 5
        b = 6
        assert a != b
    
    if __name__ == "__main__":
        pytest.main(["-s","test_assert4.py"])

    参考文章:https://www.jianshu.com/p/983412a7c2ae

  • 相关阅读:
    Azure CosmosDB (4) 在一致性(Consistency)可用性(Availability)和性能(Performance)之间的权衡
    Azure CosmosDB (3) 选择适当的一致性级别
    (转)Xen Server删除Local Storage
    ESXI安装时卡在loading ipmi_si_drv的解决方案
    Red Hat Enterprise Linux AS release 4 yum源
    ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
    未能加载文件或程序集“Microsoft.SqlServer.Sqm, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91”或它的某一个依赖项。系统找不到指定的文件。 (SqlMgmt)
    form表单自动回车提交
    Hibernate中得fetch
    form表单的reset
  • 原文地址:https://www.cnblogs.com/zhaocbbb/p/12830049.html
Copyright © 2011-2022 走看看