美文网首页python
pytest使用入门

pytest使用入门

作者: 何小有 | 来源:发表于2018-02-01 18:18 被阅读2273次

    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调用截图

    相关文章

      网友评论

        本文标题:pytest使用入门

        本文链接:https://www.haomeiwen.com/subject/hbudzxtx.html