自动化测试是一种自动执行测试用例的过程,常常被应用于软件开发中。其中,单元测试是一种独立测试,用来确认代码单元的行为是否符合预期。Pytest是Python语言中流行的一个单元测试框架。
本文将详细介绍如何使用Pytest进行单元测试。
-
安装pytest
在使用Pytest之前,需要先安装它。可以通过pip命令安装:
pip install pytest
-
创建测试文件
创建一个名为test_XXX.py的Python文件(其中XXX为任意名称),并编写测试用例。例如,我们创建一个名为test_calculator.py的文件,并编写如下代码:
def test_addition():
assert 2 + 2 == 4
def test_subtraction():
assert 4 - 2 == 2
def test_multiplication():
assert 3 * 3 == 9
def test_division():
assert 6 / 3 == 2
以上测试用例包括四个简单的加减乘除测试,每个测试用例都包含一个断言,如果断言成功,则测试通过。
-
运行测试
打开命令行工具,进入测试文件所在的目录,并运行以下命令:
pytest
这会自动查找该目录下所有以test_开头的Python文件,并执行其中的函数作为测试用例。此时,我们可以看到输出结果如下:
============================= test session starts =============================
platform win32 -- Python 3.7.4, pytest-6.2.1, py-1.10.0, pluggy-0.13.1
rootdir: D:\pytest_demo
collected 4 items
test_calculator.py .... [100%]
============================== 4 passed in 0.05s ==============================
以上输出结果表示,Pytest成功找测试文件,并执行了其中的四个测试用例,所有测试都通过。
-
常用断言
在编写单元测试时,需要使用断言(assert)来确认预期结果是否正确。以下是常见的几种断言方法:
- assertEqual(a, b) : 确认a和b相等
- assertNotEqual(a, b) : 确认a和b不相等
- assertTrue(x) : 确认x为True
- assertFalse(x) : 确认x为False
- assertIs(a, b) : 确认a和b是同一个对象
- assertIsNot(a, b) : 确认a和b不是同一个对象
- assertIn(a, b) : 确认a在b中
- assertNotIn(a, b) : 确认a不在b中
-
参数化测试
有些情况下,我们需要对同一个功能进行多组输入输出的测试,此时可以使用参数化测试。例如,我们需要测试一个加法函数add(a,b),接收两个数作为参数并返回它们之和。可以使用@pytest.mark.parametrize装饰器来实现:
import pytest
def add(a,b):
return a + b
@pytest.mark.parametrize("a, b, expected",[(2, 3, 5), (0, 0, 0), (-1, 1, 0)])
def test_add(a, b, expected):
assert add(a,b) == expected
以上代码中,@pytest.mark.parametrize装饰器将三个参数分别传递给test_add函数,使得该函数被执行三次,分别传入(2, 3, 5)、(0, 0, 0)和(-1, 1, 0)作为参数。
-
跳过测试
在某些情况下,我们需要跳过某个测试用例。可以使用@pytest.mark.skip装饰器来实现:
import pytest
@pytest.mark.skip(reason="testing skip")
def test_skip():
assert False
def test_normal():
assert True
以上代码中,@pytest.mark.skip装饰器将test_skip函数标记为“跳过”状态。当运行pytest时,该测试用例会被跳过。
-
总结
Pytest是一个灵活、易于使用的单元测试框架,适合于Python语言中各种规模的项目。除了本文介绍的功能外,Pytest还有更多高级的使用方法,例如并发测试、覆盖率测试等。希望本文能够帮助读者快速上手Pytest,并提高自己的自动化测试技能。
自动化测试步骤结构框架:
小编还准备了一些小福利,需要的招呼我一声:
【自动化测试交流】:自动化测试交流https://jq.qq.com/?_wv=1027&k=gaZEcqEl