Python 的自动化测试框架
测试 是最基本的测试单位,而自动化测试则是使用机器进行批量、频繁、重复地去做测试,而 自动化测试框架就是对自动化测试代码的一个封装,优点有很多:
- 大大提高测试的效率
- 复用性非常高,大大减少重复工作
- 覆盖面非常广,测试的范围大
- 不需要人工干预,降低出错率
Pytest
Pytest 是什么
Pytest是一个Python测试框架,可用于编写和执行各种类型的软件测试,如单元测试、集成测试、端到端测试和功能测试,它主要用于API测试,但也可以测试数据库、UI和其他组件。它具有参数化测试、固定装置、断言重写和并行测试等功能。可以使用命令 pip-install-pytest 进行安装,也可以使用命令 pytest --version 进行验证。
Pytest 的优点可以总结为:
- Pytest 能够同时执行多个测试用例,从而缩短执行时间
- Pytest 能够在执行过程中跳过一组测试方法中的一个测试方法
- Pytest 是免费的
- Pytest 既快速又易于学习
Python 使用 Pytest 做自动化测试
Pytest 的安装
我们需要使用 pip 对 Pytest 进行安装。
pip install -U pytest
安装完之后,在终端输入,如果显示版本号,则说明安装成功。
pytest --version
Pytest 用例编写规范
- 被测试的文件,必须以
test_
开头或_test
结尾; - Pytest 运行的时候,会寻找
test_
或_test
的文件,把他们当做测试文件进行测试; - 测试的类名,需要以 Test 开头,并且不能有 init 函数,不然会触发警告:
ytestCollectionWarning: cannot collect test class 'TestXXX'
; - 测试的方法函数要以
test_
开头; - 使用 assert 进行断言。
运行命令
pytest -k "类名"
pytest -k "方法名"
pytest -k "类名 and not 方法名"
运行
Pytest 提供了多种运行模式,可以只运行某个模块,也可以运行某个模块下的某个方法。
pytest 文件名.py
pytest 文件名.py::类名
pytest 文件名.py::类名::方法名
例子
我们可以编写一段测试代码,进行测试,我们需要创建一个 test_ 开头的 .py
文件。
在一个test开头的py文件里面,编写一下脚本:
def setup_module():
print('\n 这是setup_module方法,只执行一次,当有多个测试类的时候使用')
def teardown_module():
print('这是 teardown_module方法,只执行一次,当有多个测试类的时候使用')
def teardown_module():
print('这是 teardown_module方法,只执行一次,当有多个测试类的时候使用')
def setup_function():
print('这是 setup_function方法,只执行一次,当有多个测试类的时候使用')
def teardown_function():
print('这是 teardown_function方法,只执行一次,当有多个测试类的时候使用')
def test_five():
print('this is test_five method')
def test_six():
print('this is test_six method')
class TestPytest01:
def setup_class(self):
print('调用了setup_class1方法')
def teardown_class(self):
print('调用了teardown_class1方法')
def setup_method(self):
print('执行测试方法前的setup1操作')
def teardown_method(self):
print('执行测试方法后的teardown1操作')
def test_one(self):
print('this is test_one method')
def test_two(self):
print('this is test_two method')
def setup(self):
print('this is setup 方法')
def teardown(self):
print('this is teardown 方法')
class TestPytest02:
def setup_class(self):
print('调用了setup_class2方法')
def teardown_class(self):
print('调用了teardown_class2方法')
def setup_method(self):
print('执行测试方法前的setup2操作')
def teardown_method(self):
print('执行测试方法后的teardown2操作')
def test_three(self):
print('this is test_three method')
def test_four(self):
print('this is test_four method')
运行,得到的结果为:
控制用例顺序
如果想要制定用例的顺序,可以使用 pytest-order 插件,并结合装饰器 @pytest.mark.run(order=num)
。
pip install pytest-ordering
我们可以编写一段代码来验证。
import pytest
class TestPytest:
@pytest.mark.run(order=-2)
def test_03(self):
print('test_03')
@pytest.mark.run(order=-3)
def test_01(self):
print('test_01')
@pytest.mark.run(order=4)
def test_02(self):
print('test_02')
执行的结果为:
使用 Apifox 测试 Python 接口
上面讲的是使用 Pytest 测试 Python 写的一些函数方法,那如果是 Python 写的一些 API,应该怎么去测呢?
涉及到 API 的测试,我推荐是 Apifox ,它是集测试、文档、mock 于一身的超级好用的 API 调试工具。
比如我已经使用 Python 写了一个简单的接口:
/api/test/python
我们来使用 Apifox 测试一下吧~
创建请求
我们需要创建一个 API 请求,用来对我们刚刚写的那个 API 进行请求,填入:
- 请求路径
- 请求方法
- 请求名
设置断言
接着我们点开后置脚本这一项,然后选择自定义脚本,Apifox 为我们提供了可视化的脚本选项。
我们点击右边的 Apifox 为我们提供的现成的脚本命令,我们预期是返回的 code 是 200。
设置完断言脚本,点击 保存 按钮。
运行调试
到运行页,点击 发送,可以看到响应结果,以及断言成功通过的提示。
关于Apifox
欢迎体验一下,完全免费的哦:在线使用 Apifox。
Apifox 是一体化 API 协作平台,可以实现 API 文档、API 调试、API Mock、 API 自动化测试,是更先进的 API 设计/开发/测试工具。
Apifox 提供了一种全面的 API 管理解决方案。使用 Apifox ,你可以在统一的平台上设计、调试、测试以及协作你的 API,消除了在不同工具之间切换和数据不一致的问题。
个人使用体验还是不错的,推荐使用~
知识扩展: