pytest官网文档の第一章:安装和快速开始

1.1 安装

  • 安装命令
pip install pytest

  • 查看版本
pytest --version

 1.2 创建第一个测试函数

  • 测试代码如下:
# -*- coding: utf-8 -*-
# 开发人员   :RayChou
# 开发时间   :2019-10-12  10:27
# 文件名称   :test_simple.PY
# 开发工具   :PyCharm
def func(x):
    return x + 1

def test_answer():
    assert func(3) == 5
  • 执行结果如下:
(venv) D:workspacedemo1	est_module>pytest
=========================================================================================================================== test session starts ===========================================================================================================================
platform win32 -- Python 3.6.5, pytest-5.2.1, py-1.8.0, pluggy-0.13.0
rootdir: D:workspacedemo1	est_module
collected 1 item

test_simple.py F                                                                                                                                                                                                                                                     [100%]

================================================================================================================================ FAILURES =================================================================================================================================
_______________________________________________________________________________________________________________________________ test_answer _______________________________________________________________________________________________________________________________

    def test_answer():
>       assert func(3) == 5
E       assert 4 == 5
E        +  where 4 = func(3)

test_simple.py:10: AssertionError
============================================================================================================================ 1 failed in 0.12s ============================================================================================================================

(venv) D:workspacedemo1	est_module>

 1.3 执行多个测试用例

pytest通过检测test_module模块下以test_xxx.py和xxx_test.py命名的文件,并识别以test_xxx命名的函数并执行。所以如果一个目录下有多个符合命名规则的文件,则会批量加入执行队列;

 1.4 断言特定异常

  • 测试代码
# -*- coding: utf-8 -*-
# 开发人员   :RayChou
# 开发时间   :2019-10-12  10:39 
# 文件名称   :test_sysexit.PY
# 开发工具   :PyCharm
import pytest

def f():
    raise SystemExit(1)

def test_mytest():
    with pytest.raises(SystemExit):
        f()
  • 使用安静模式(添加参数q,quiet)执行
(venv) D:workspacedemo1	est_module>pytest -q test_sysexit.py
.                                                                                                                                                                                                                                                                    [100%]
1 passed in 0.03s

(venv) D:workspacedemo1	est_module>

 1.5 同一个类中组合多个测试用例

  • 测试代码
# -*- coding: utf-8 -*-
# 开发人员   :RayChou
# 开发时间   :2019-10-12  10:46 
# 文件名称   :test_class.PY
# 开发工具   :PyCharm
class TestClass:
    def test_one(self):
        x = "this"
        assert "h" in x

    def test_two(self):
        x = "hello"
        assert hasattr(x, "check")
  • 执行结果
(venv) D:workspacedemo1	est_module>pytest -q test_class.py
.F                                                                                                                                                                                                                                                                   [100%]
================================================================================================================================ FAILURES =================================================================================================================================
___________________________________________________________________________________________________________________________ TestClass.test_two ____________________________________________________________________________________________________________________________

self = <test_module.test_class.TestClass object at 0x0000000003463E10>

    def test_two(self):
        x = "hello"
>       assert hasattr(x, "check")
E       AssertionError: assert False
E        +  where False = hasattr('hello', 'check')

test_class.py:13: AssertionError
1 failed, 1 passed in 0.11s

(venv) D:workspacedemo1	est_module>

 1.6 功能测试中获取一个唯一的临时路径

  • 执行代码
# -*- coding: utf-8 -*-
# 开发人员   :RayChou
# 开发时间   :2019-10-12  11:00 
# 文件名称   :test_tmpdir.PY
# 开发工具   :PyCharm

def test_needfiles(tmpdir):
    print(tmpdir)
    assert 0
  • 执行结果
(venv) D:workspacedemo1	est_module>pytest test_tmpdir.py
=========================================================================================================================== test session starts ===========================================================================================================================
platform win32 -- Python 3.6.5, pytest-5.2.1, py-1.8.0, pluggy-0.13.0
rootdir: D:workspacedemo1	est_module
collected 1 item

test_tmpdir.py F                                                                                                                                                                                                                                                     [100%]

================================================================================================================================ FAILURES =================================================================================================================================
_____________________________________________________________________________________________________________________________ test_needfiles ______________________________________________________________________________________________________________________________

tmpdir = local('C:\Users\raychou\AppData\Local\Temp\pytest-of-raychou\pytest-6\test_needfiles0')

    def test_needfiles(tmpdir):
        print(tmpdir)
>       assert 0
E       assert 0

test_tmpdir.py:9: AssertionError
-------------------------------------------------------------------------------------------------------------------------- Captured stdout call ---------------------------------------------------------------------------------------------------------------------------
C:Userszhoulei17344AppDataLocalTemppytest-of-zhoulei17344pytest-6	est_needfiles0
============================================================================================================================ 1 failed in 0.12s ============================================================================================================================

(venv) D:workspacedemo1	est_module>

从执行结果中我们可以知道当传入tmpdir时,pytest会在执行程序前,会为程序申请资源并且创建一个唯一的临时路径。

原文地址:https://www.cnblogs.com/raychou1995/p/11660338.html