本文转自测试人社区,原文链接:https://ceshiren.com/t/topic/32336
基本介绍
pytest框架是一个成熟,全面的测试框架,具有非常丰富的第三方插件,并且可以自定义扩展
比如:pytest-selenium
, pytest-html
, pytest-rerunfailures(失败case重复执行)
, pytest-xdist(多cpu分发)
pytest还以其简单灵活,上手简单著称,能够支持简单的单元测试和复杂的功能测试,支持参数化操作。
安装指南
pip install pytest
验证安装:
pytest --version # 会展示当前已安装版本
文件基本命名格式
默认满足以下条件:
测试文件满足:test_xxx.py
或xxx_test.py
格式,即以test_为前缀或_test为后缀
测试类满足:以Test开头
,且不能含有init方法
(定义class
时,要以T开头,不然pytest
框架不会识别该类,自然就不会进入该类内部进行搜索)
因为测试类里进行前后置操作不能通过init
等魔法函数,而是通过特定的函数setup_class
和teardown_class
前面半段指定了是前置操作还是后置操作,后半段则是指定了该操作的重复级别:
class
:类重复级别:该类中只执行一次
method
:测试方法重复级别:该类中每个测试用例(方法)执行一次
执行:在命令行执行pytest
命令时,会自动从当前目录及子目录中寻找符合上述约束的测试函数来执行。
模板:
python
import pytest #导入pytest模块
def test_beifan(): #测试用例
pass
class TestBaili: #测试套件
def test_a(self): #测试用例,第一个测试方法
pass
def test_b(self): #测试用例,第二个测试方法
pass
pytest框架断言
常用断言:
- assert xx:判断 xx 为真
- assert not xx:判断 xx 不为真
- assert a in b:判断 b 包含 a
- assert a == b:判断 a 等于 b
- assert a !=b:判断 a 不等于 b
pytest命令行执行
python
指定文件:
pytest ./xxx.py
指定方法
pytest ./xxx.py::类名::方法名
pytest ./xxx.py::TestData::test_demo1
### 常用命令参数
-v 输出用例更加详细的执行信息,比如用例所在文件和用例名称
-k 执行用例中包含'关键字'的用例
-s 输出用例中的调试信息,比如print打印消息,不加参数则不输出待执行的用例
-m 执行标记的内容,执行特定的测试用例,执行有相同标记的测试用例
-x 执行失败则停止执行,后面的用例不会被执行
--maxfail=n 执行失败n次后停止执行,n为最大程度接收失败的次数
--count=n 执行用例n次,n=2则执行两次
--lf (last failed) 重新执行上传失败的用例,若没有失败,则会全部跑
--ff (failed first) 重新运行所有用例,但是首先运行上传失败的用例
### 测试结果的标志
. 代表一个测试用例通过,..代表两个测试用例通过
s 代表skip,即用例跳过执行
F 即failure一般是断言发生错误
E error,一般是用例执行过程中报错
pytest 标记测试用例以及测试用例的指向执行
pytest的标记机制与用例执行的方法
pytest标记是需要通过pytest.mark
来标记使用的,pytest
为了应对各种测试场景也内置了许多标记。
1、参数化标记:pytest.mark.parametrize
通过parametrize
可以将用例数据和用例执行的逻辑代码分离,并实现根据用例,自动生成测试用例
2、
python
@pytest.mark.parametrize('item',[11,22,33,44,55,66])
def test_demo(item)
assert item >50
用法:
格式:pytest.mark.parametrize('每个用例包含的变量列表,以引号括住,变量间以,号隔开',实参列表,当每组变量数量只有一个时,使用一维数组即可,无特殊包裹要求,以逗号隔开,若存在多个变量则输入二维数组即可。)
3、跳过用例执行:pytest.mark.skip
通过skip
装饰的用例,在执行时会无条件跳过。可选参数reason:跳过测试函数的原因
4、
python
@pytest.mark.skip
def test_demo():
assert item>50
@pytest.mark.skip(reason='不需要执行')
def test_demo1():
assert item>50
5、根据条件跳过用例:pytest.mark.skipif
:skipif
可以根据条件来决定是否跳过用例的执行,如果条件为True则跳过测试函数执行。 参数:condition
:跳过条件,reason
:跳过的原因
6、
python
a =10
@pytest.mark.skipif(a>20,reason='条件不成立,不执行')
def test_demo():
assert item >50
7、标记预期失败的用例:pytest.mark.xfail
:xfail
可以将测试用例标记为预期执行失败的用例.
- 参数
condition
:将测试函数标记为xfail
的条件(True/False
)reason
:测试函数被标记为xfail
的原因raises
:预期失败的异常类型run
:是否应该实际执行函数,如果False
,该函数将始终xfail
并且不会被执行strict
:严格模式(True或False)
8、
python
a=10
@pytest.mark.xfail(a>20,reason='条件不成立,不执行',raises = AssertionError)
def test_demo():
assert item>50
推荐学习
【霍格沃兹测试开发】7天软件测试快速入门带你从零基础/转行/小白/就业/测试用例设计实战
【霍格沃兹测试开发】最新版!Web 自动化测试从入门到精通/ 电子商务产品实战/Selenium (上集)
【霍格沃兹测试开发】最新版!Web 自动化测试从入门到精通/ 电子商务产品实战/Selenium (下集)
【霍格沃兹测试开发】明星讲师精心打造最新Python 教程软件测试开发从业者必学(上集)
【霍格沃兹测试开发】明星讲师精心打造最新Python 教程软件测试开发从业者必学(下集)
【霍格沃兹测试开发】精品课合集/ 自动化测试/ 性能测试/ 精准测试/ 测试左移/ 测试右移/ 人工智能测试
【霍格沃兹测试开发】腾讯/ 百度/ 阿里/ 字节测试专家技术沙龙分享合集/ 精准化测试/ 流量回放/Diff
【霍格沃兹测试开发】Pytest 用例结构/ 编写规范 / 免费分享
【霍格沃兹测试开发】JMeter 实时性能监控平台/ 数据分析展示系统Grafana/Docker 安装
【霍格沃兹测试开发】接口自动化测试的场景有哪些?为什么要做接口自动化测试?如何一键生成测试报告?
【霍格沃兹测试开发】面试技巧指导/ 测试开发能力评级/1V1 模拟面试实战/ 冲刺年薪百万!
【霍格沃兹测试开发】腾讯软件测试能力评级标准/ 要评级表格的联系我
【霍格沃兹测试开发】Pytest 与Allure2 一键生成测试报告/ 测试用例断言/ 数据驱动/ 参数化
【霍格沃兹测试开发】App 功能测试实战快速入门/adb 常用命令/adb 压力测试
【霍格沃兹测试开发】阿里/ 百度/ 腾讯/ 滴滴/ 字节/ 一线大厂面试真题讲解,卷完拿高薪Offer !