• Pytest学习(三)


    如果我们事先知道测试函数会执行失败,但又不想直接跳过,而是希望显示的提示。

    Pytest 使用 pytest.mark.xfail 实现预见错误功能:

    # test_xfail.py
    
    @pytest.mark.xfail(gen.__version__ < '0.2.0',
                       reason='not supported until v0.2.0')
    def test_api():
        id_1 = gen.unique_id()
        id_2 = gen.unique_id()
        assert id_1 != id_2

    执行结果:

    $ pytest tests/test-function/test_xfail.py
    ============================= test session starts =============================
    platform win32 -- Python 3.6.4, pytest-3.6.1, py-1.5.2, pluggy-0.6.0
    rootdir: F:self-repolearning-pytest, inifile:
    collected 1 item
    
    tests	est-function	est_xfail.py x                                      [100%]
    
    ========================== 1 xfailed in 0.12 seconds ==========================

    pytest 使用 x 表示预见的失败(XFAIL)。

    如果预见的是失败,但实际运行测试却成功通过,pytest 使用 X 进行标记(XPASS)。

    参数化

    当对一个测试函数进行测试时,通常会给函数传递多组参数。比如测试账号登陆,我们需要模拟各种千奇百怪的账号密码。

    当然,我们可以把这些参数写在测试函数内部进行遍历。不过虽然参数众多,但仍然是一个测试,当某组参数导致断言失败,测试也就终止了。

    通过异常捕获,我们可以保证程所有参数完整执行,但要分析测试结果就需要做不少额外的工作。

    在 pytest 中,我们有更好的解决方法,就是参数化测试,即每组参数都独立执行一次测试。使用的工具就是 pytest.mark.parametrize(argnames, argvalues)

    这里是一个密码长度的测试函数,其中参数名为 passwd,其可选列表包含三个值:

    # test_parametrize.py
    
    @pytest.mark.parametrize('passwd',
                          ['123456',
                           'abcdefdfs',
                           'as52345fasdf4'])
    def test_passwd_length(passwd):
        assert len(passwd) >= 8

    运行可知执行了三次测试:

    $ pytest tests/test-function/test_parametrize.py
    ============================= test session starts =============================
    platform win32 -- Python 3.6.4, pytest-3.6.1, py-1.5.2, pluggy-0.6.0
    rootdir: F:self-repolearning-pytest, inifile:
    collected 3 items
    
    tests	est-function	est_parametrize.py F..                              [100%]
    
    ================================== FAILURES ===================================

    详情见:learning-pytest

    以前-好记性不如烂笔头 现在-好记性不如烂键盘
  • 相关阅读:
    [课程设计]Scrum 1.6 多鱼点餐系统开发进度
    [课程设计]Scrum 1.7 多鱼点餐系统开发进度
    [课程设计]Scrum 1.5 多鱼点餐系统开发进度
    [课程设计]Scrum 1.4 多鱼点餐系统开发进度
    [课程设计]Scrum 1.3 多鱼点餐系统开发进度
    [课程设计]Scrum 1.2 Spring 计划&系统流程&DayOne燃尽图
    [课程设计]Scrum 1.1 NABCD模型&产品Backlog
    [课程设计]Scrum团队分工及明确任务1.0 ----多鱼点餐
    学习进度条
    [课程设计]多鱼点餐系统个人总结
  • 原文地址:https://www.cnblogs.com/gexbooks/p/15007714.html
Copyright © 2020-2023  润新知