测试框架不关系用例的内容
它关心的是:用例编排和结果收集
1. 适用于python语言
2. 用法符合python风格
3. 有丰富的生态
1. 新建一个项目
2. 在项目终端窗口输入如下命令,用于安装pytest,其中-U是表示更新到最新的版本(如果你已经有了pytest,但是不是最新版,也会进行下载最新版)
pip install pytest -U
3. 下载完成后可以输入如下命令查看pytest是否安装成功
pip list
如果输出的列表中存在pytest,并且版本为最新,则安装成功。
1. 从 以test_开头和以_test为结尾的文件 中收集用例
2. 从 以Test_开头的类 中收集用例(类不能包含__init__()方法)
3. 以test_开头的函数和方法 会作为测试用例
注意:作为测试用例的函数不能含有参数和返回值
编写测试用例就是通过代码实现用例的逻辑,可以通过assert来确定用例是否执行成功
class Test_A:
def test_1(self):
assert 1 == 1
def test_2(self):
assert 2 == 2
方法一:通过执行pytest自带的main方法,该方法会执行项目中的所有用例
方法二:通过在终端输入命令行的方式,如下
pytest
通过在终端中执行如下命令,符合的文件也可以通过此方法执行:
pytest 文件路径
结果缩写:
. | 测试通过 |
F | 测试失败 |
E | 出现错误 |
s | 跳过执行 |
x | 预期内失败 |
X | 预期外通过 |
结果的缩写是按照用例的执行顺序依次往后输出的
约定大于配置对于成熟的工具来说(如:pytest),默认配置是一种比较好的配置,如非必要,请勿修改
1. 新建一个.ini结尾的文件
2. 加上如下内容
[pytest]
3. 查看所有的配置项:在终端中输入如下内容
pytest -h
4. 选择需要添加的配置项,将其按照对应的格式填写到.ini文件中
v | 增加详细程度 |
q | 减少详细程度 |
s | 不进行内容捕捉,让所有的输出内容可以正常展示(成功的用例不会将里面的执行过程打印出来,可以通过-s来设置) |
x | 快速退出(只要发现失败用例就立即停止运行) |
一般情况下可以使用-vs,打印详细执行结果+用例输出内容打印
[pytest]
addopts = -vs
1. 注册标记
在.ini文件中添加mark,并添加标记
# 用户自定义标记
markers =
name1
name2
name3
2. 打上标记
在函数上面添加标记,应该函数可以添加多个标记
class Test_A:
@pytest.mark.name1
def test_1(self):
print('用例1')
@pytest.mark.name1
def test_2(self):
print('用例2')
@pytest.mark.name1
@pytest.mark.name2
def test_3(self):
print('用例3')
@pytest.mark.name2
def test_4(self):
print('用例4')
3. 筛选标记
通过筛选标记,筛选出需要执行的用例
在终端输入如下命令(可以结合前面的筛选文件):
pytest -m 标记名
也支持逻辑运算
pytest -m "标记1 and 标记2" # 执行包含标记1和标记2的用例
pytest -m "标记1 or 标记2" # 执行包含标记1或标记2的用例
特点:
1. 不需要注册,可以直接使用
2. 标记不仅仅用于筛选,还有特殊的效果
常用内置标记:
skip | 无条件跳过用例 |
skipif | 有条件跳过用例 |
sfail | 预期用例失败 |
parametrize | 参数化测试 |
class Test_A:
def test_1(self):
print('用例1')
@pytest.mark.skip()
def test_2(self):
print('用例2')
@pytest.mark.xfail(reason='预期失败')
def test_3(self):
print('用例3')
assert 1 == 2
@pytest.mark.skipif(1 == 2, reason='当1 == 2时用例跳过')
def test_4(self):
print('用例4')
1. 在用例中添加参数
2. 再用力中使用参数
3. 给用例添加parametrize注解
3.1 添加第一个参数:参数名称(与用例参数名相同且对应)
3.2 添加第二个参数:用例传入参数的数据(有几组数据就意味着这个用例要执行几次,只是参数不同)
3.3 添加第三个参数(非必填):给每组参数添加用例名称
如果名称带有中文可以在.ini配置文件中添加如下内容,否则会乱码
# 用例的id可以包含各类字符,并且自负风险
disable_test_id_escaping_and_forfeit_all_rights_to_community_support = true
def add(a, b):
return a + b
@pytest.mark.parametrize( # 3. 添加parametreze标记
'a, b', # 3.1 第一个参数为参数名称(要与用例参数对应)
[
(1, 1), # 3.2 第二个参数添加用例的参数数据(有几组参数就相当于是几个用例,只是参数不一样)
(2, 2),
(3, 3)
],
ids=[
"1 + 1", # 3.3 给每组参数添加用例名称(非必填,且使用中文需要添加相应的配置)
"2 + 2",
"3 加 3"
]
)
def test_add(a, b): # 1. 给用例添加参数
print(f'执行add的结果为: {add(a, b)}') # 2. 再用例中使用参数