前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Pytest学习(五) - Pytest用例执行测试后的常见报错

Pytest学习(五) - Pytest用例执行测试后的常见报错

作者头像
软件测试君
发布2020-10-29 10:08:50
1.7K0
发布2020-10-29 10:08:50
举报
文章被收录于专栏:测试人生

常见的状态

  • passed:测试通过
  • failed:断言失败
  • error:代码编写上的错误
  • xfail:预期失败,加了 @pytest.mark.xfail()

测试通过的栗子(passed)

示例代码如下:

代码语言:javascript
复制
# -*- coding: utf-8 -*-
# @Time    : 2020/10/25 17:17
# @Author  : longrong.lang
# @FileName: test_pass.py
# @Software: PyCharm
# @Cnblogs :https://www.cnblogs.com/longronglang
'''
测试通过的例子
'''
import pytest


@pytest.fixture()
# 定义一个测试数据
def data():
    return 1


def test_pass(data):
    assert 1 == data


if __name__ == '__main__':
    pytest.main(["-q", "test_pass.py"])

输出结果:

断言失败的栗子(failed)

1、正常断言失败

示例代码如下:

代码语言:javascript
复制
# -*- coding: utf-8 -*-
# @Time    : 2020/10/25 17:26
# @Author  : longrong.lang
# @FileName: test_failed.py
# @Software: PyCharm
# @Cnblogs :https://www.cnblogs.com/longronglang
'''
断言失败的栗子
'''
import pytest


@pytest.fixture()
def data():
    return 'python'


def test_failed(data):
    assert 'test' in data


if __name__ == '__main__':
    pytest.main(["-q", "test_failed.py"])

输出结果:
2、测试方法里主动抛出异常了

示例代码如下:

代码语言:javascript
复制
# -*- coding: utf-8 -*-
# @Time    : 2020/10/25 17:26
# @Author  : longrong.lang
# @FileName: test_failedException.py
# @Software: PyCharm
# @Cnblogs :https://www.cnblogs.com/longronglang
'''
断言失败的栗子
'''
import pytest


@pytest.fixture()
def data():
    return 'python'


def test_failed(data):
    # 这块随便抛出一个异常了
    raise IOError
    assert 'py' in data


if __name__ == '__main__':
    pytest.main(["-q", "test_failedException.py"])

输出结果:

代码编写上的错误(error)

1、fixture中有错

示例代码如下:

代码语言:javascript
复制
# -*- coding: utf-8 -*-
# @Time    : 2020/10/25 17:34
# @Author  : longrong.lang
# @FileName: test_error.py
# @Software: PyCharm
# @Cnblogs :https://www.cnblogs.com/longronglang
'''
代码编写上的错误栗子
'''
import pytest


@pytest.fixture()
def data():
    str = 'python'
    assert 'test' in str
    return str


def test_error(data):
    assert data == 'python'


if __name__ == '__main__':
    pytest.main(["-q", "test_error.py"])

输出结果:

fixture里面断言失败,导致fixture标记的data会报错,使得data没有返回值;而test_error调用了错误的fixture,所以error表示代码写的有问题了

2、参数不存在

示例代码如下:

代码语言:javascript
复制
# -*- coding: utf-8 -*-
# @Time    : 2020/10/25 17:34
# @Author  : longrong.lang
# @FileName: test_errorNoParam.py
# @Software: PyCharm
# @Cnblogs :https://www.cnblogs.com/longronglang
'''
代码编写上的错误栗子
'''
import pytest


def data():
    str = 'python'
    return str


def test_error(data):
    assert data == 'python'


if __name__ == '__main__':
    pytest.main(["-q", "test_errorNoParam.py"])

输出结果:

data参数并不存在,找不到自然就error了

总结:
  • 测试用例的代码有异常,包括主动抛出异常或代码有异常,都算failed
  • 当测试用例调用的fixture有异常,或传入的参数有异常的时候,都算error
  • 如果一份测试报告中,error的测试用例数量越多,说明测试用例质量越差

预期失败的栗子(xfail)

这个和testng的异常测试差不多了,就是断言预期的异常,可以测试是否需要代码抛出异常或不抛出。示例代码如下:

代码语言:javascript
复制
# -*- coding: utf-8 -*-
# @Time    : 2020/10/25 17:51
# @Author  : longrong.lang
# @FileName: test_xfail.py
# @Software: PyCharm
# @Cnblogs :https://www.cnblogs.com/longronglang
'''
预期失败栗子
'''
import pytest

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

输出结果:

代码有异常,且和raised的异常类匹配,所以是xfail(算测试通过的一种,表示符合期望捕捉到的异常),并不算failed

如果和raised的异常类不匹配,则是failed

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 软件测试君 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 常见的状态
  • 测试通过的栗子(passed)
    • 输出结果:
    • 断言失败的栗子(failed)
      • 1、正常断言失败
        • 输出结果:
          • 2、测试方法里主动抛出异常了
            • 输出结果:
            • 代码编写上的错误(error)
              • 1、fixture中有错
                • 输出结果:
                  • 2、参数不存在
                    • 输出结果:
                      • 总结:
                      • 预期失败的栗子(xfail)
                        • 输出结果:
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档