zoukankan      html  css  js  c++  java
  • pytest(十一)--assert断言

    前言

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

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

    assert

    pytest允许您使用标准Python断言来验证Python测试中的期望和值。例如,你可以写下

    #test.sa.py
    def f():
        return 3
    def test_a():
        assert f()==4
    

    断言f()函数的返回值,接下来会看到断言失败,E assert 3==4,因为返回的值是3,判断等于4.所以失败了。

     异常信息

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

    #test.sa.py
    def f():
        return 3
    def test_a():
        a=f()
        assert a%2==0,"判断a为偶数?a的值:{}".format(a)

    运行结果

     这样当断言失败的时候,会给出自己写的失败原因了E AssertionError: 判断a为偶数?a的值:3

    异常断言

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

    #test.sa.py
    import pytest
    def test_z():
        with pytest.raises(ZeroDivisionError):
            1/0
            #1/2#报错  

    运行结果

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

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

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

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

    注意:断言type的时候,异常类型是不需要加引号的,断言value值的时候需要转str

    在上下文管理器窗体中,可以使用关键字参数消息指定自定义失败消息:

     报错,不晓得怎么办?

    常用断言

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

     assert xx判断xx为真

    assert not xx判断xx不为真

    assert a in b 判断b包含a

    assert a==b 判断a等于b

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

    #test.sa.py
    import pytest
    def is_true(a):
        if a>0:
            return True
        else:
            return False
    def test_10():
        a=5
        b=-1
        assert is_true(a)#真
        assert is_true(b) #假
    def test_20():
        a="he"
        b="h he"
        assert a in b#真
        #assertIn(a,b)#报错#unittest中语法
    def test_30():
        a="py"
        b="py"
        assert a==b#真
        #assertEqual(a,b)#报错,assertEqual未定义
    def test_40():
        a=5
        b=6
        assert a!=b#真
    
    if __name__=="__main__":
        #pytest.main(["-s","test_sa.py"])
        pytest.main(["-s","test_case1.py"])#和上面执行结果一样
    

      

    越努力,越幸运!!! good good study,day day up!!!
  • 相关阅读:
    js自定义回调函数
    python:sql建表语句转换为json
    简单list转化为tree结构
    JSP中页面定时刷新
    struts2中<s:select/>标签的运用详解
    Redis 的 Sentinel
    redis持久化(persistence)
    java验证身份证合理性
    js 里面的键盘事件对应的键码
    Struts2中使用OGNL表达式语言访问静态方法和静态属性
  • 原文地址:https://www.cnblogs.com/canglongdao/p/13400115.html
Copyright © 2011-2022 走看看