精华内容
下载资源
问答
  • pytest断言
    2021-05-10 22:54:40

    pytest单元测试框架并没有提供专门的断言方法,而是直接使用Python的assert进行断言。

    import pytest
    
    def add(a,b):
        return a+b
    
    def prime(n):
        if n<=1:
            return False
        for i in range(2,n):
            if n % i == 0:
                return False
            return True
    
    #测试相等
    def test_add_1():
        assert add(3,4) == 7
    
    #测试不相等
    def test_add_2():
        assert add(1,2) != 4
    
    #测试大于等于
    def test_add_3():
        assert add(4,5) <= 10
    
    #测试小于等于
    def test_add_4():
        assert add(13,43) >= 10
    
    #测试包含
    def test_in():
        a = "hello"
        b = "he"
        assert b in a
    
    #测试不包含
    def test_in():
        a = "hello"
        b = "hi"
        assert b not in a
    
    #判断是否为True
    def test_true_1():
        assert prime(13)
    
    #判断是否为True
    def test_true_2():
        assert prime(7) is True
    
    #判断是否不为True
    def test_true_3():
        assert not prime(7)
    
    #判断是否不为True
    def test_true_4():
        assert prime(6) is not True
    
    #判断是否为False
    def test_false_1():
        assert prime(8) is False
    
    
    if __name__ == '__main__':
        pytest.main()

     

    更多相关内容
  • Pytest断言使用

    2022-03-03 14:00:09
    pytest断言功能

    一、Assert常规断言

    #若断言为真,代码会继续往下执行
    def test_start():
        assert 1
        print("2")
    
    
    #若断言为假,代码不会继续往下执行,只会影响该条用例后续步骤
    def test_start():
        assert 0
        print("2")

    断言真:

    断言假:

     二、Assert断言异常

            主要是用来断言抛出的异常是不是想到的,多用于单元测试,使用pytets.raises(异常类型)上下文管理器。

    import  pytest
    
    def test_start():
        #捕获异常并断言,断言类型符合ZeroDivisionError为真
        with pytest.raises(ZeroDivisionError) as e:
         #产生异常代码块
            1 / 0
    

            上一种方法当异常类型断言为假时,在allure中报的是故障不是失败,建议用下面一种方法断言异常类型或者异常值。

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

    三、Pytest_assume多重断言

            多重断言可以在断言失败后继续执行后续代码,多重断言需要全部断言为真用例执行结果才为pass。

    #需要安装pip install pytest_assume
    from pytest_assume.plugin import assume
    def test_start(log):
    
        with assume:assert 0
        print("测试")
        with assume: assert 1
    

     多重断言结果:

    展开全文
  • 上一章学习了pytest的基本用法,今天学习一下断言。 assert 基本用法 unitest单元测试框架中提供了丰富的断言方法,如assertEqual()、assertIn()、assertTrue()、assertIs()等,但是pytest没有。直接使用Python的...

    上一章学习了pytest的基本用法,今天学习一下断言。

    assert 基本用法

    unitest单元测试框架中提供了丰富的断言方法,如assertEqual()、assertIn()、assertTrue()、assertIs()等,但是pytest没有。直接使用Python的assert进行断言

    # MyPytest.py
    import pytest
    
    def inc(x):
        return x+1
    
    # 判断结果不等于5
    def test_inc_01():
        assert inc(3) != 5
    
    # 判断结果等于4
    def test_inc_02():
        assert inc(3) == 4
    
    # 判断结果小于等于5
    def test_inc_03():
        assert inc(3) <= 5
    
    # 判断结果包含在列表内
    def test_inc_04():
        assert inc(3)  in  [1,2,3,4]
    
    
    # 判断结果不为True
    def test_inc_06():
        a = 1 
        assert a ==  True
        assert a is not  True
    
    
    
    if __name__ =="__main__":
        pytest.main(['MyPytest.py'])
    

    执行结果:

    collected 5 items
    
    MyPytest.py .....                                                        [100%]
    
    ============================== 5 passed in 0.08s ==============================
    
    ***Repl Closed***
    

    assert断言失败提示

    当我们为了脚本报错后更容易的定位到原因时候,可以在断言的地方输出断言失败提示信息,比如:

    # MyPytest.py
    import pytest
    
    def division(x):
        return 100/x
    
    
    def test_division_01():
        res = division(3)
        assert res == 50 , f"判断 res 为50 ,当前 res 的值为{res}" 
    
    
    if __name__ =="__main__":
        pytest.main(['MyPytest.py'])
    

    执行结果:

    collected 1 item
    
    MyPytest.py F                                                            [100%]
    
    ================================== FAILURES ===================================
    ______________________________ test_division_01 _______________________________
    
        def test_division_01():
            res = division(3)
    >       assert res == 50 , f"判断 res 为50 ,当前 res 的值为{res}"
    E       AssertionError: 判断 res 为50 ,当前 res 的值为33.333333333333336
    E       assert 33.333333333333336 == 50
    
    MyPytest.py:10: AssertionError
    =========================== short test summary info ===========================
    FAILED MyPytest.py::test_division_01 - AssertionError: 判断 res 为50 ,当前 r...
    ============================== 1 failed in 0.21s ==============================
    
    ***Repl Closed***
    
    

    预期内异常报错断言

    有时候一些场景我们明知道它会报错,也知道这种报错,是正常的预期,比如:

    # MyPytest.py
    import pytest
    
    def division(x):
        return 100/x
    
    
    def test_division_01():
        res = division(0)
    
    
    if __name__ =="__main__":
        pytest.main(['MyPytest.py'])
    

    执行结果:

    collected 1 item
    MyPytest.py F                                                            [100%]
    
    ================================== FAILURES ===================================
    ______________________________ test_division_01 _______________________________
        def test_division_01():
    >       res = division(0)
    MyPytest.py:9: 
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
    x = 0
        def division(x):
    >       return 100/x
    E       ZeroDivisionError: division by zero
    MyPytest.py:5: ZeroDivisionError
    =========================== short test summary info ===========================
    FAILED MyPytest.py::test_division_01 - ZeroDivisionError: division by zero
    ============================== 1 failed in 0.21s ==============================
    
    ***Repl Closed***
    

    100 \ 0的时候报错ZeroDivisionError: division by zero。为了对这种异常场景进行断言,我们需要使用pytest.raises,用法如下:

    # MyPytest.py
    import pytest
    
    def division(x):
        return 100/x
        
    def test_division_01():
        with pytest.raises(ZeroDivisionError) as e:
            division(0)
        assert e.type == ZeroDivisionError
        assert "division by zero" in str(e.value) 
    
    if __name__ =="__main__":
        pytest.main(['MyPytest.py'])
    

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

    非预期内异常

    如果我们不知道预期异常的是什么,我们可以使用matchraise进行自定义异常

    # MyPytest.py
    import pytest
    
    def division(x):
        if x == 0:
            raise ValueError('value not 0 or None')
        if isinstance(x,str):
            raise TypeError('value not String')
        return 100/x
    
    
    def test_division_01():
        with pytest.raises(ValueError,match = 'value not 0 or None') as e:
            division(0)
        assert e.type == ValueError
        assert "value not 0 or None" in str(e.value) 
    
    
    def test_division_02():
        with pytest.raises(TypeError,match = 'value not String') as e:
            division("String")
        assert e.type == TypeError
        assert "value not String" in str(e.value) 
    
    if __name__ =="__main__":
        pytest.main(['MyPytest.py'])
    

    pytest-assume插件

    pytest-assume是一个可以允许pytest测试用例中执行多个失败的断言的插件。
    安装

    pip install pytest-assume

    对比assert :

    import pytest
    
    def inc(x):
        return x+1
    
    # assert断言
    def test_inc_01():
        assert inc(3) == 5
        assert inc(3) == 4
        assert inc(3) == 3
    
    
    # pytest.assume断言
    def test_inc_02():
        pytest.assume(inc(3) == 5)
        pytest.assume(inc(3) == 4)
        pytest.assume(inc(3) == 3)
    
    
    if __name__ =="__main__":
        pytest.main(['MyPytest.py'])
    

    结果:

    collected 2 items
    
    MyPytest.py FF                                                           [100%]
    
    ================================== FAILURES ===================================
    _________________________________ test_inc_01 _________________________________
        def test_inc_01():
    >       assert inc(3) == 5
    E       assert 4 == 5
    E        +  where 4 = inc(3)
    MyPytest.py:8: AssertionError
    _________________________________ test_inc_02 _________________________________
    
    tp = <class 'pytest_assume.plugin.FailedAssumption'>, value = None, tb = None
        def reraise(tp, value, tb=None):
            try:
                if value is None:
                    value = tp()
                if value.__traceback__ is not tb:
    >               raise value.with_traceback(tb)
    E               pytest_assume.plugin.FailedAssumption: 
    E               2 Failed Assumptions:
    E               
    E               MyPytest.py:15: AssumptionFailure
    E               >>	pytest.assume(inc(3) == 5)
    E               AssertionError: assert False
    E               
    E               MyPytest.py:17: AssumptionFailure
    E               >>	pytest.assume(inc(3) == 3)
    E               AssertionError: assert False
    
    D:\software\python\lib\site-packages\six.py:718: FailedAssumption
    =========================== short test summary info ===========================
    FAILED MyPytest.py::test_inc_01 - assert 4 == 5
    FAILED MyPytest.py::test_inc_02 - pytest_assume.plugin.FailedAssumption: 
    ============================== 2 failed in 0.26s ==============================
    ***Repl Closed***
    

    对比发现,pytest.assume在第一个断言失败的情况下继续执行后续的断言,不会终止~

    展开全文
  • 七、Pytest自动化测试框架 — Pytest断言

    多人点赞 热门讨论 2022-05-30 13:32:17
    ###文章内容有配套的学习视频和笔记都放在了...2、Pytest断言 与Unittest不同,Pytest使用的是Python自带的assert关键字来进行断言。 assert关键字后面可以接一个表达式,只要表达式的最终结果为True,那么断言通过,

    ###文章内容有配套的学习视频和笔记都放在了文章末尾###

    1、什么是断言

    对于测试来讲,不管是功能测试,自动化测试,还是单元测试,一般都会预设一个正确的预期结果,而在测试执行的过程中会得到一个实际的结果。
    测试的成功与否就是拿实际的结果与预期的结果进行比较,这个比的过程就是断言(assert)。

    2、Pytest断言

    • 与Unittest不同,Pytest使用的是Python自带的assert关键字来进行断言。
    • assert关键字后面可以接一个表达式,只要表达式的最终结果为True,那么断言通过,用例执行则为成功,否则用例执行失败。

    3、Pytest的断言方式及应用场景

    1)使用assert语句
    Pytest里面的断言实际上就是Python里面的assert断言方法。
    比较大小与是否相等:

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

    判断包含或不包含:

    • assert a in b:判断b包含a
    • assert a not in b:判断b不包含a

    提示:b可以是字符串,可以是列表,元组等都可以。
    对类型的判断:

    • assert isinstance(a,int):判断a是否是int类型数据。

    判断方法或者函数的返回值是否为真:

    • assert xx:判断xx结果为真。
    • assert not xx:判断xx结果不为真。

    例如

    #用于判断素数
    def is_prime(n):
        if n <= 1:
            return False
        for i in range(2, n):
            if n % i == 0:
                return False
            return True
    
    
    # 判断是否为素数
    def test_true():
        assert is_prime(13)
        # 或者不为素数
        assert not is_prime(13)


    基本上常用的就这么几种。
    2)断言预期的异常
    将异常信息存储到一个变量中,变量的类型则为异常类,包含异常的typevaluetraceback等信息

    import pytest
    
    
    def test_exception_value():
        with pytest.raises(ZeroDivisionError) as zero:
            1 / 0  # 此处可以是方法,也可以是表达式
    
        # print(zero) <ExceptionInfo ZeroDivisionError('division by zero') tblen=1>
        # print(zero.tb)# <traceback object at 0x0000021B6068BD48>
        # print(zero.typename)  # 字符串"ZeroDivisionError"
        # print(zero.type)  # 异常类型<class 'ZeroDivisionError'>
        print(zero.traceback)
        assert "division by zero" in str(zero.value)
        assert zero.type == ZeroDivisionError
        assert zero.typename == "ZeroDivisionError"
    
    
    if __name__ == '__main__':
        pytest.main()

    注意:在上下文管理器的作用域中,raises代码必须是最后一行,否则其后面的代码将不会执行。

    拓展:
    如果我们不知道预期异常的是什么,我们可以使用 match 和 raise 进行自定义异常。
    pytest.raises()函数传递一个关键字参数match,通过match设置的字符串正则表达式匹配异常信息。
    Unittest中的TestCase.assertRaisesRegexp方法类似。
    示例:

    import pytest
    
    
    # myfunc函数会抛出一个异常,
    def myfunc():
        raise ValueError("Exception 123 raised")
    
    
    def test_match():
        # pytest.raises()函数,
        # 可以用元组的形式传递参数,只需要触发其中任意一个即可。
        # 通过match可以设置通过正则表达式匹配异常。
        with pytest.raises((ValueError, RuntimeError), match=r'.* 123 .*') as ve:
            myfunc()  
            # 说明:myfunc()抛出的异常被match设置的字符串匹配到
            # 也就是捕获到了该异常。
            # 然后下面是断言,123是否包含在捕获异常的说明中。
    
        assert "123" in str(ve.value)
    
    
    if __name__ == '__main__':
        pytest.main()

    4、优化断言

    我们可以在异常的时候,输出一些提示信息,这样报错后,可以方便我们来查看原因。
    示例如下:

    import pytest
    
    def func():
        return 100
    
    def test_case_666():
        a = func()
        assert a % 3 == 0, "判断a是否能被3整除,当前a的值为:%s" %a
    
    
    if __name__ == '__main__':
        pytest.main()
    
    """
    运行结果:
    
    ========没加注释的测试结果==========
    Expected :0
    Actual   :1
    <Click to see difference>
    
    def test_case_666():
            a = 100
    >       assert a % 3 == 0
    E       assert 1 == 0
    
    test_01.py:55: AssertionError
    
    Assertion failed
    
    
    ========添加注释的测试结果==========
    Expected :0
    Actual   :1
    <Click to see difference>
    
    def test_case_666():
            a = 100
    >       assert a % 3 == 0, "判断a是否能被3整除,当前a的值为:%s" %a
    E       AssertionError: 判断a是否能被3整除,当前a的值为:100
    E       assert 1 == 0
    
    test_01.py:53: AssertionError
    
    Assertion failed
    """

    5、使用标记检查异常

    @pytest.mark.xfail(raises=ZeroDivisionError)
    示例:

    import pytest
    
    @pytest.mark.xfail(raises=ZeroDivisionError)
    def test_exception_value():
        1 / 0
    
    if __name__ == '__main__':
        pytest.main()
        
    # 说明代码:
    # 预期抛出ZeroDivisionError异常,
    # 实际测试用例执行也抛出了ZeroDivisionError异常。
    # 测试结果:该用例是xfailed

    重点:配套学习资料和视频教学

    那么在这里我也精心准备了上述大纲的详细资料在下方链接如下

    展开全文
  • Pytest断言assert

    2021-12-28 16:14:48
    pytest 断言实际上就是 python 里面的 assert 断言方法,常用的有以下几种 assert xx :判断 xx 为真 assert not xx :判断 xx 不为真 assert a in b :判断 b 包含 a assert a == b :判断 a 等于 b assert a ...
  • 文章目录(1)什么是断言(2)Pytest断言(3)Pytest的断言方式及应用场景(4)优化断言(5)使用标记检查异常 (1)什么是断言 对于测试来讲,不管是功能测试,自动化测试,还是单元测试,一般都会预设一个正确的...
  • pytest断言及执行

    千次阅读 2020-12-14 10:18:35
    一、断言-assert,pytest允许你在测试用例中使用标准的python断言,支持显示最常见的子表达式的值,包括调用,属性,比较以及二元和一元运算符 assert '不能为空' in '实际输出的结果' assert 'h' in 'hello'...
  • Python自带的assert就可以: assert xx:判断xx为真  assert not xx:判断xx不为真  assert a in b:判断b包含a  assert a == b:判断a等于b ...多个断言同时需要满足加and就可以 如:assert a !=b and a!=0 ...
  • 视频来源B站《冒死上传!pytest接口自动化测试框架(基础理论到项目实战及二次开发)教学视频【软件测试】》一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持!......
  • 使用 pytest 编写测试用例过程中,需要用到断言是否抛出一个预期中的异常。 什么意思呢? 通过这个实例了解一下。 例:在网页中有一个滑块 ele_drag,需要拖拽到指定位置 ele_drop(class=“item”),当滑块填充...
  • pytest 使用python自带的assert关键字,后边可以接一个表达式,只要表达式最终结果为True就可,断言成功,测试用例也会成功,否则是失败 二、断言常用方式: assert xx :判断xx为真 assert not xx:判断xx不为真 ...
  • Pytest断言

    千次阅读 2019-05-30 18:32:57
    断言说明 pytest允许使用python标准的assert来验证Python测试中期望值和值 pytest支持显示最常见的子表达式的值,包括调用、属性、比较、以及二元和一元运算符 这允许使用没有样板代码的惯用python构造,同时不会...
  • Pytest断言方式及应用场景使用assert语句断言预期的异常断言预期的告警利用上下文信息进行断言自定义断言方式使用assert语句进行断言pytest允许使用python的标准ass...
  • Pytest断言方式及应用场景 使用assert语句 断言预期的异常 断言预期的告警 利用上下文信息进行断言 自定义断言方式 使用assert语句进行断言 pytest允许使用python的标准assert语句...
  • 三、pytest断言

    2022-07-10 17:16:45
    pytest断言
  • 接口测试 Pytest断言处理_告警断言

    千次阅读 2018-04-09 20:12:57
    pytest中对告警进行断言采用pytest.warns()方法,其断言的方法与pytest.raises()类似。pytest.warns()除了能断言告警外,还能够捕获告警信息,并对捕获的告警信息进行分类处理,可以设定出现特定告警信息时,则用例...
  • 【Pytest】pytest断言

    千次阅读 2015-06-15 16:46:54
    pytest除了支持正常情况的断言,还支持异常断言。 1、正常断言 正常的断言在上一篇博客中已经有所体现,pytest使用最基本的python中的assert语句进行断言,下面我们再举一个例子: # content of test_assert1.py def...
  • Pytest断言

    2021-08-28 15:24:24
    在上一篇Pytest系列文章...在pytest中,使用assert进行断言,格式为:assert 表达式。 如果表达式返回结果为True,则断言成功,否则断言失败。 二、常用断言 unittest的三种断言: assertIn(expect,result)断言
  • import json,pytest response = [{"result1":["结果1","结果2",{"结果3":["abc",{"wrong":"结果5","结果6":["结果7","结果8",["结果9",\ {"结果10":123}]]}]}],"result5":{"结果4":"wrong"}},"re...
  • pytest篇3-断言详解

    千次阅读 2021-02-07 10:31:15
    1、pytest断言 在unitest单元测试框架中提供了丰富的断言方法,如assertEqual()、assertIn()、assertTrue()、assertIs()等。unittest断言详解可见我另外博客(链接)。pytest单元测试框架并没有提供专门的断言方法,...
  • pytest断言的用法

    千次阅读 2021-08-17 16:42:27
    与unittest不同,pytest使用的是python自带的assert关键字来进行断言 assert关键字后面可以接一个表达式,只要表达式的最终结果为True,那么断言通过,用例执行成功,否则用例执行失败 举例 # 异常信息 def f():...
  • assume 是pytest断言的另一种方式,两者的区别在于: assert 出现断言失败,则后续断言不再执行 assume 如果出现断言失败的情况,会继续执行该断言后续的语句及断言 二、assert断言 说明 assert是python自带的...
  • python测试框架之pytest (三)断言

    千次阅读 2022-01-29 15:28:18
    一、pytest断言 Pytest中断言是通过 assert 语句实现的,确定预期值和实际值是否一致。 1.1、pytest等值类型断言 import allure class TestAssert: @allure.story("pytest-assert方式") def test_equals(self): ...
  • Pytest 断言

    2018-10-11 01:07:00
    pytest 断言 断言:一个标准的用例都包含了断言,编写pytest自动化脚本的时候,也需要设置断言 assert使用 常用分三种 1:比较大小与是否相等 2:包含或不包含 3:验证boolean 例子 比较大小 #...
  • Pytest里面使用关键字assert,断言为一个表达式,只要表达式的最终结果为True,那么断言通过,用例执行成功,否则用例执行失败 Assert 常用断言方式 pytest里面断言实际上就是python里面的assert断言方法,常用的有...
  • pytest断言异常

    2021-07-20 14:48:20
    import pytest def test_raises(): with pytest.raises(TypeError) as e: a = 1 + "1" exec_msg = e.value.args[0] print("___",exec_msg) assert exec_msg == "unsupported operand type(s) for +: 'int' and ...
  • 1pytest插件,运行规则以及参数,pytest.ini配置文 件,跳过用例,用例执行顺序,夹具等 2Fixture固件,contest.py,断言以及Allure报告生成! 3Allure报告定制以及Parametrize数据驱动 4requests模块详解以及Cookie...
  • pytest,多条断言,存在失败时仍运行用例

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,185
精华内容 2,074
关键字:

pytest断言