自动化测试框架中Pytest使用规则及参数化
- 使用pytest规则
- 测试文件以test_开头(以_test结尾也行)
- 测试类以Test开头,并且不能带有init方法
- 测试函数以test_开头
- 断言使用基本的assert即可
- 运行
# coding:utf-8
import pytest
class Test:
def test_01(self):
print('第一条用例')
assert 1==1
def test_02(self):
print('第二条用例')
assert 2==3
if __name__ == '__main__':
pytest.main()
- main pytest.main
加参数
-s 结果显示出来
-v 详细的结果显示出来
# 多个测试文件时,main方法中输入文件名来指定运行的文件
pytest.main(['-v','-s','py_test.py'])
- 终端中运行命令 pytest py_test.py
- 特殊函数
- 测试方法的前置后置脚本
def setup(self):
print('单个测试方法的前置脚本')
def teardown(self):
print('单个测试方法的后置脚本')
- 整个测试类中的前置后置脚本
def setup_class(self):
print('类的前置脚本')
def teardown_class(self):
print('类的后置脚本')
- 同一文件中有多个测试类时,整体的前置、后置脚本
# coding:utf-8
import pytest
def setup_module():
print('整个模块的前置脚本')
def teardown_module():
print('整个模块的后置脚本')
class Test:
def setup_class(self):
print('类的前置脚本')
def teardown_class(self):
print('类的后置脚本')
def setup(self):
print('单个测试方法的前置脚本')
def teardown(self):
print('单个测试方法的后置脚本')
def test_01(self):
print('第一条用例')
assert 1==1
def test_02(self):
print('第二条用例')
assert 2==3
class Test2:
def test_01(self):
print('第一条用例')
assert 1==1
if __name__ == '__main__':
# 多个测试文件时,main方法中输入文件名来指定运行的文件
pytest.main(['-v','-s','py_test.py'])
- 执行顺序
- 默认从上到下顺序执行
- mark标记
@pytest.mark.run(order=1)
def test_01(self):
print('第一条用例')
assert 1==1
@pytest.mark.run(order=3)
def test_02(self):
print('第二条用例')
assert 2!=3
@pytest.mark.run(order=2)
def test_03(self):
print('第三条用例')
assert 3==3
- 冒烟测试
mark标记 mark.smoke
@pytest.mark.smoke
def test_03(self):
print('第三条用例')
assert 3==3
mark后的标记可以随便写,写完后在文件中配置pytest.ini文件
[pytest]
markers=smoke
运行 加入’-m’,’名字’
pytest.main(['-v','-s','-m','smoke','py_test.py'])
- 跳过
skip
@pytest.mark.skip
def test_03(self):
print('第三条用例')
assert 3==3
加条件跳过
@pytest.mark.skipif(1>2,reason='1不大于2所以不跳过')
def test_03(self):
print('第三条用例')
assert 3==3
pytest.ini 修改后可以生效新的规则
- 测试用例参数化
# 读取数据后循环执行
@pytest.mark.parametrize('date',[{'a':2222,'b':333},{'c':21}])
def test_01(self,date):
print('第2个测试类中一条用例')
print(date)
assert 1==1
# 从文件中读取数据后循环执行
@pytest.mark.parametrize('date', read_yaml(file_path='../testDate/createtask.yaml')['第一个'])
def test_02(self, date):
print('第2个测试类中一条用例')
print(date)
assert 1 == 1
- 读取yaml文件的方法
import yaml
file_path ='../testDate/createtask.yaml'
def read_yaml(file_path):
file = open(file_path, 'r', encoding='utf-8')
data = yaml.load(stream=file, Loader=yaml.FullLoader)
print(type(data))
print(data)
return data
- Yaml文件
第一个:
taskname: 第一个任务名
comment: 第一个描述
第二个:
taskname: 第2个任务名
comment: 第2个描述