• 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

  • 相关阅读:
    398. Random Pick Index
    739. Daily Temperatures
    779. K-th Symbol in Grammar
    698. Partition to K Equal Sum Subsets
    783. Minimum Distance Between BST Nodes
    asp.netcore 深入了解配置文件加载过程
    啥叫K8s?啥是k8s?
    Asp.NetCore轻松学-实现一个轻量级高可复用的RabbitMQ客户端
    Asp.Net Core 轻松学-一行代码搞定文件上传
    目录---Asp.NETCore轻松学系列【目录】
  • 原文地址:https://www.cnblogs.com/zhaocbbb/p/12830049.html
Copyright © 2020-2023  润新知