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:\workspace\demo1\test_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:\workspace\demo1\test_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:\workspace\demo1\test_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:\workspace\demo1\test_module>pytest -q test_sysexit.py . [100%] 1 passed in 0.03s (venv) D:\workspace\demo1\test_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:\workspace\demo1\test_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:\workspace\demo1\test_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:\workspace\demo1\test_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:\workspace\demo1\test_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:\Users\zhoulei17344\AppData\Local\Temp\pytest-of-zhoulei17344\pytest-6\test_needfiles0
============================================================================================================================ 1 failed in 0.12s ============================================================================================================================
(venv) D:\workspace\demo1\test_module>
从执行结果中我们可以知道当传入tmpdir时,pytest会在执行程序前,会为程序申请资源并且创建一个唯一的临时路径。