pytest使用入门

pytest是第三方开发的一个python测试模块,可以轻松地编写小型测试,而且可以扩展以支持应用程序和库的复杂功能测试,帮助我们编写更好的程序。

安装pytest

先在命令行中运行pytest的安装命令:

$ pip install -U pytest

安装完成后,检查是否安装了正确的版本:

$ pytest --version

简单的测试

我们从一个简单的测试例子开始了解pytest,新建一个test_sample.py文件,输入以下代码:

def inc(x):
    return x + 1

def test_answer():
    assert inc(3) == 5

在test_sample.py文件的目录下,执行pytest命令,pytest将运行当前目录及其子目录下所有名称为“test_*.py”或“*_test.py”的文件:

$ pytest

我们使用了assert语句来验证测试期望值,pytest中有一种断言反思机制,能智能地报告assert表达式的中间值,使我们不必再使用传统的JUnit方法。这个测试返回了一个失败报告,因为inc(3)没有返回5,如下图所示:

pytest失败报告截图

断言引发异常

使用raises可以帮助我们断言某些代码会引发某个异常,新建一个test_sysexit.py文件,输入以下代码:

import pytest

def f():
    raise SystemExit(1)

def test_mytest():
    with pytest.raises(SystemExit):
        f()

这样在出现该异常的时候,这个测试用例也不会标记为失败,以quiet报告模式执行测试功能:

$ pytest -q test_sysexit.py

这个测试返回了一个成功报告,如下图所示:

quiet报告模式执行截图

执行多个测试

当我们开发了多个测试时,可能会把它们分组到一个类中,我们现在可以使用pytest创建一个包含多个测试的类,新建一个test_class.py文件,输入以下代码:

class TestClass(object):
    def test_one(self):
        x = "this"
        assert 'h' in x

    def test_two(self):
        x = "hello"
        assert hasattr(x, 'check')

pytest会发现所有“test_*”命名的函数,没有必要继承任何东西,我们可以简单地通过传递它的文件名来运行测试:

$ pytest -q test_class.py

第一个测试通过,第二个测试失败,我们可以轻松地看到断言中的中间值,以帮助我们了解失败的原因,如下图所示:

执行多个测试的截图

使用内置fixture

fixture是pytest中的一个特性,fixture可以请求任意资源,用文字不太好理解,我们就通过实例来理解吧。首先,通过以下命令可以找出所有pytest内置的fixture:

$ pytest --fixtures

我们就以tmpdir这个内置的fixture来演示,tmpdir能返回一个唯一的临时目录路径,新建一个test_tmpdir.py文件,输入以下代码:

def test_needsfiles(tmpdir):
    print (tmpdir)
    assert 0

在测试函数的参数中列出tmpdir,pytest将在执行测试函数之前查找并调用fixture工厂来创建资源:

$ pytest -q test_tmpdir.py

在测试运行之前,pytest会创建一个唯一的,供每个测试调用的临时目录,如下图所示:

pytest的内置fixture调用截图

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

何小有

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值