zoukankan      html  css  js  c++  java
  • Pytest学习(二)

    一、前言

    学习pytest总会习惯性的和unittest对比使用,自然就断言pytest和unittest也是有些区别的。

    二、断言对比

    unittest 断言

    assertEqual(a, b)     # 判断a和b是否相等
    
    assertNotEqual(a, b)     # 判断a不等于b
    
    assertTrue(a)    # 判断a是否为Ture
    
    assertFalse(a)    #判断a是否为False
    
    assertIn(a, b)     # a 包含在b里面
    
    asserNotIn(a, b)    # a 不包含在b里面
    

    pytest 断言

    pytest只需要用assert来断言就行,相对更简单而便捷

    assert xx :判断 xx 为真
    assert not xx :判断 xx 不为真
    assert a in b :判断 b 包含 a
    assert a == b :判断 a 等于 b
    assert a != b :判断 a 不等于 b
    

    三、pytest示例代码

    # -*- coding: utf-8 -*-
    # @Time    : 2020/10/20 19:37
    # @Author  : longrong.lang
    # @FileName: test_assert.py
    # @Software: PyCharm
    # @Cnblogs :https://www.cnblogs.com/longronglang
    def f():
        return 5;
    
    
    def test_f():
        n = f()
        assert n % 3 == 0, "判断n 是否能被3整除,当前 n 的值为:%s" % n
    
    

    四、执行结果

    五、异常断言

    结合pytest 断言特点和《Pytest之使用断言指定异常》,再来一个异常的案例,比如除数不能为零,示例代码如下:

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

    知识点:

    使用pytest.raises,来捕获对应的异常示例,exceptionInfo为一个对象示例来接收属性信息,通常是断言异常的 type 和 value 值

    1、使用match断言

    • match 关键字是测试正则表达式与异常的字符串表示形式是否匹配
    • 这种方法只能断言value,不能断言类型

    示例代码如下:

    # match的使用
    def test_zero_division_match():
        with pytest.raises(ZeroDivisionError, match=".*zero.*") as exceptionInfo:
            100 / 0
        # 也可以这样
        with pytest.raises(ZeroDivisionError, match="zero") as exceptionInfo:
            100 / 0
    
    

    match 方法的regexp参数与 re.search 函数匹配,因此在上面的示例中 match='zero' 也可以使用

    2、检查断言装饰器使用

    示例代码如下:

    # 断言装饰器
    @pytest.mark.xfail(raises=ZeroDivisionError)
    def test_f():
        1 / 0
    
    

    个人觉得这个断言装饰器,和java的注解类似,相对更轻量快捷

    3、执行结果

    知识点

    代码抛出异常,但是和raises指定的异常类相匹配,所以不会断言失败
    它相当于一个检查异常装饰器,功能:检查是否有异常,不确定是否有异常
    with pytest.raise(ZeroDivisionError) 对于故意测试异常代码的情况,使用可能会更好
    而@pytest.mark.xfail(raises=ZeroDivisionError) 对于检查未修复的错误(即,可能会发生异常),使用检查断言可能会更好

    装饰器这部分还没学习,后续继续更新,先放一放

    系列参考文章:
    https://www.cnblogs.com/poloyy/category/1690628.html

    优秀不够,你是否无可替代

    软件测试交流QQ群:721256703,期待你的加入!!

    欢迎关注我的微信公众号:软件测试君


  • 相关阅读:
    ADODB.Recordset错误800a0cb3"的解决方
    C++ primer第一章 C++概述 纪要
    [收藏]一些电平转换方法
    “当传递具有已修改行的 DataRow 集合时,更新要求有效的 UpdateCommand”错误解决
    关于句柄的一些知识 Handle (computing) Wiki
    “/”应用程序中的服务器错误。当前标识(NT AUTHORITY/NETWORK SERVICE)没有对“C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/Temporary ASP.NET Files”的写访问权
    C++中 __stdcall,__cdecl, __fastcal区别简介
    [How To]使用Wildfish进行开发新Solution配置篇
    关于ISeries的代码生成器
    [How To]如何使用Wildfish进行ISeries项目开发数据库建立部分
  • 原文地址:https://www.cnblogs.com/longronglang/p/13848899.html
Copyright © 2011-2022 走看看