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

  • 相关阅读:
    Java 类与类之间的调用
    File类中的list()和listFiles()方法
    关于GITLAB若干权限问题
    JAVA 判断一个字符串是不是一个合法的日期格式
    JAVA日期加减运算
    Java读写文件的几种方法
    在Coding.net创建项目开发
    IntelliJ IDEA 创建项目project和module的关系
    对xml文件的简单解析
    Intellij IDEA使用总结
  • 原文地址:https://www.cnblogs.com/zhaocbbb/p/12830049.html
Copyright © 2011-2022 走看看