• pytest合集(8)— API Functions


    一、API Functions

    1、pytest.approx

    断言两个数字(或两组数字)在某个容差范围内彼此相等。

    from pytest import approx
    
    
    def test_one():
        assert 0.1 + 0.2 == 0.3
    
    
    # 断言两个数字(或两组数字)在某个容差范围内彼此相等。
    def test_two():
        assert 0.1 + 0.2 == approx(0.3)
    
    
    def test_three():
        assert (0.1 + 0.2, 0.2 + 0.4) == approx((0.3, 0.6))
    
    
    def test_four():
        assert {'a': 0.1 + 0.2, 'b': 0.2 + 0.4} == approx({'a': 0.3, 'b': 0.6})
    

    2、pytest.fail,pytest.skip,pytest.xfail

    将用例置为失败,跳过用例,用例预期失败。

    import pytest
    
    
    def test_one():
        pytest.fail(msg='使用给定消息显式地设置用例为失败状态')
    
    
    def test_two():
        pytest.skip(msg='使用给定消息跳过测试用例。')
    
    
    def test_three():
        pytest.xfail(reason='由于给定的原因,强制标记失败测试用例或测试准备函数。')

    3、pytest.importorskip

    导入并返回请求的模块名,如果无法导入模块,则跳过当前测试。

    import pytest
    
    
    # 导入并返回请求的模块名,如果无法导入模块,则跳过当前测试。
    def test_one():
        mod1 = pytest.importorskip(modname='selenium')
        print(mod1)
    
    
    def test_two():
        mod2 = pytest.importorskip(modname='python-module')
        print(mod2)
    

    4、pytest.exit

    退出测试

    import pytest
    
    
    def test_one():
        pass
    
    
    def test_two():
        pass
        pytest.exit(msg='退出测试,注意test_two也没有执行')
    
    
    def test_three():
        pass
    

    5、pytest.main

    主函数模式

    import pytest
    
    
    def test_one():
        pass
    
    
    def test_two():
        pass
    
    
    # 主函数模式运行测试用例
    if __name__ == '__main__':
        pytest.main()
    

    6、pytest.param

    与mark.parametrize()一起使用,标记参数化的子用例。

    import pytest
    
    
    # 和parametrize结合使用,指定参数,标记子用例预期失败状态XFAIL
    @pytest.mark.parametrize("test_input,expected", [("3+5", 8), pytest.param("6*9", 42, marks=pytest.mark.xfail)])
    def test_eval(test_input, expected):
        assert eval(test_input) == expected
    

    7、pytest.raises

    with pytest.raises(),结合上下文管理器,用来捕获异常。

    import pytest
    
    exception_tuple = (ZeroDivisionError, AssertionError)
    
    
    # with pytest.raises(),结合上下文管理器,用来捕获异常
    def test_one():
        with pytest.raises(AssertionError) as exc_info:
            assert 1 == 2
        print(exc_info)
    
    
    # 多个异常元组
    def test_two():
        with pytest.raises(exception_tuple) as exc_info:
            print(1 / 0)
    
    
    # 如果代码块没有引发预期的异常AssertionError,则置为失败FAILED
    def test_three():
        with pytest.raises(ZeroDivisionError):
            assert 1 == 2
    
    
    # 如果代码块没有异常,,则置为失败FAILED
    def test_four():
        with pytest.raises(exception_tuple):
            assert 1 == 1
    

    8、pytest.warns

    with pytest.warns() ,结合上下文管理器,可以检查代码是否发出特定的警告信息,使用方法与 raises 类似。

    import warnings
    import pytest
    
    
    def my_warning():
        warnings.warn("my warning", UserWarning)
    
    
    # with pytest.warns() ,结合上下文管理器,可以检查代码是否发出特定的警告信息,使用方法与 raises 类似。
    def test_warning():
        with pytest.warns(UserWarning):
            my_warning()
    

    9、pytest.deprecated_call

    with deprecated_call(),结合上下文管理器,可用于确保代码块触发 DeprecationWarning 或 PendingDeprecationWarning:

    import warnings
    from pytest import deprecated_call
    
    
    def api_call_v2():
        warnings.warn('use v3 of this api', DeprecationWarning)
        return 200
    
    
    # with deprecated_call(),结合上下文管理器,可用于确保代码块触发 DeprecationWarning 或 PendingDeprecationWarning:
    def test_deprecated_call():
        with deprecated_call():
            assert api_call_v2() == 200

    10、pytest.register_assert_rewrite

    参考: 断言重写。

    register_assert_rewrite(*names): 注册一个或多个要在导入时重写的模块名称。

    此函数将确保此模块或程序包内的所有模块将重写其assert语句。因此,您应确保在实际导入模块之前调用此方法,如果您是使用包的插件,则通常在__init__.py中调用。

    抛出:TypeError- 如果给定的模块名称不是字符串。

    11、pytest.freeze_includes

    参考: 冻结pytest。

    freeze_includes(): 返回pytest使用的模块名称列表,应由cx_freeze包含。


    reference:

    API Reference — pytest documentation

  • 相关阅读:
    【区块链 | OpenZeppelin】手把手交易使用OpenZeppelin Upgrades部署可升级智能合约
    FreeRtos-10任务通知
    了解三层架构:表示层、业务逻辑层、数据访问层
    阶乘分解(筛素数+分解质因数C++)
    Excel函数
    程序员男盆友给自己做了一款增进感情的小程序
    最近项目上线太忙了-后期会发布大厂物流进厂文章
    猿创征文|Java之static关键字【实例变量与类变量、实例方法与类方法】
    自绘 控件
    Golang 开发实战day04 - Standard Library
  • 原文地址:https://blog.csdn.net/panc_guizaijianchi/article/details/126146325