zoukankan      html  css  js  c++  java
  • pytest使用详解

    pytest:帮助你写出更好的程序:

    • 开源,免费。
    • 升级pytest,严格的向后兼容性。
    • 丰富的第三方插件。
    • 内置assert断言

    基础用法

    def test_due():
        x="why"
        assert  'w' in x

    常用断言: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

    异常信息提示:如果想在异常的时候输出一些提示信息,这样报错后就方便查看是什么原因了

    def add(a,b):
        return a+b
    
    def test_assert():
        assert 6 == add(3,4),"方法返回的值不等于6,而是等于{0}".format(add(3,4))

    异常信息的断言

    我们要断言它抛的异常是不是预期的,比如执行:1/0,预期结果是抛异常:ZeroDivisionError: division by zero,那我们要断言这个异常。通常是断言异常的type和value的值。这里1/0的异常类型是ZeroDivisionError,异常的value值是"integer division or modulo by zero",于是以下是代码的设计用例

    import pytest
    
    def test_zero_division():
        with pytest.raises(ZeroDivisionError,message="Exceptions ZeroDivisionError") as exinfo:    
            1/0
    
        assert exinfo.type == ZeroDivisionError
        assert str(exinfo.value) == "integer division or modulo by zero","{0}".format(exinfo.value)
    message:如果失败,显示失败的原因
    def test_zero_division():
        with pytest.raises(ZeroDivisionError,message='0不能被除')as exec:
            pass

      

    fixture可以声明function,module,fixture。也可以使用xunit的fixture的格式,setup和teardown。使用fixtures作为function的参数使用

    小编最常用识货大概就是关联测试接口时候,比如保单的查询,前提条件必须要生成一个新的保单再去查询

    @pytest.fixture()
    def before():
        print '
    before each test'
    
    def test_1(before):
        print 'test_1()'
    
    def test_2(before):
        print 'test_2()'
        assert 0
    执行结果:test_1、test_2执行前都要执行before,可以做关联接口测试使用
    test_fixture_basic.py::test_1 before each test test_1() PASSED test_fixture_basic.py::test_2 before each test test_2() FAILED

    scope控制fixtrue调用的频率,默认是function。可选的有:

    • function:每个测试函数之前执行一次
    • class:每个测试类之前执行一次
    • module:每个module之前执行一次
    • session:每次session之前执行一次,即每次测试执行一次

    跳过某个测试 skip

    如果有个API接口暂不确定,或者需要单独测试你应当跳过这个API的测试

    @pytest.mark.skip(reason="原因")

    意料之中的失败 xfail

    可以使用xfail标记指示您希望测试失败。一个常见的用例是当你发现在你的软件中的错误,你写一个测试记录软件如何应该的行为。在您修复错误之前,此测试当然会失败。为避免测试失败,请将测试标记为xfail。修复错误后,删除xfail标记并进行回归测试,确保错误不会再次发生

    strict参数

    建议设置strict=True以确保XPASS(意外通过)时,测试的记录为失败
    如果预期失败的代码,意外通过了测试将很容易导致开发人员的误解。

    @pytest.mark.xfail(strict=True)
    

    reason参数

    与skipif一样,可以标记对故障的期待

    # 标记对故障的期待,如果测试失败且未在加注中提及,则将报告为常规故障
    @pytest.mark.xfail(sys.version_info >= (3,6),
                       reason="python3.6 api changes")
    def test_function():
        ...
    

    raises参数

    具体的说明测试失败的原因。可以在raises参数中指定单个异常或异常组

    @pyest.mark.xfail(raises=RuntimeError)
    

    如果测试失败且没有提到指定的异常,那么测试将被报告为常规失败raises

     
     
    相关不错的地址:https://www.jianshu.com/p/7a7432340f02
  • 相关阅读:
    Vue 应用 nginx 配置 前后端不分离模式
    解决使用antd Modal组件时数据污染问题
    关于antd怎么在父组件中控制子组件的表单提交
    Web前端工程师面试题1-1
    Web前端工程师面试题7-4
    react 的 生命周期
    字符串的方法
    栈的基本算法
    node.js 获取文件目录
    bat脚本文件启动UG NX软件,动态调用外挂,以及设置环境变量
  • 原文地址:https://www.cnblogs.com/yingfei/p/10059759.html
Copyright © 2011-2022 走看看