数据驱动 :其实就是把我们测试用例的数据放到excel,yaml,csv,mysql,然后通过去改变数据达到改变测试用例的执行结果 。
@pytest.mark.parametrize(args_name,args_value)
args_name:参数名,字符串,多个参数中间用逗号隔开
args_value:参数值(列表,元组,字典列表,字典元组),有多个值用例就会执行多少次,是list,多组数据用元祖类型;传三个或更多参数也是这样传。list的每个元素都是一个元组,元组里的每个元素和按参数顺序一一对应
例如:
1、传一个参数 @pytest.mark.parametrize('参数名',list) 进行参数化
2、传两个参数@pytest.mark.parametrize('参数名1,参数名2',[(参数1_data[0], 参数2_data[0]),(参数1_data[1], 参数2_data[1])]) 进行参数化
第一种方式:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2021/4/6 11:37
# @File : test_class.py
import pytest
class TestApi:
def test_01_jame(self):
print('\n测试JAME')
@pytest.mark.parametrize('args', ['张三', '李四', '王五'])
def test_02_lucy(self, args):
print('\n测试Lucy')
print('---------'+str(args))
if __name__ == '__main__':
pytest.main(['-vs', '--html=../report/report.html'])
运行结果 :
testcase/test_mark.py::TestApi::test_01_jame
测试JAME
PASSED
testcase/test_mark.py::TestApi::test_02_lucy[\u5f20\u4e09]
测试Lucy
---------张三
PASSED
testcase/test_mark.py::TestApi::test_02_lucy[\u674e\u56db]
测试Lucy
---------李四
PASSED
testcase/test_mark.py::TestApi::test_02_lucy[\u738b\u4e94]
测试Lucy
---------王五
PASSED
第二种方式:跟unittest的ddt里边的@unpack解包一样
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2021/4/6 11:37
# @File : test_class.py
import pytest
class TestApi:
def test_01_jame(self):
print('\n测试JAME')
@pytest.mark.parametrize('name,age', [['小明', '18'], ['王林', '16']])
def test_02_lucy(self, name, age):
print('\n测试Lucy')
print(name, age)
if __name__ == '__main__':
pytest.main(['-vs', '--html=../report/report.html'])
testcase/test_mark.py::TestApi::test_01_jame
测试JAME
PASSED
testcase/test_mark.py::TestApi::test_02_lucy[\u5c0f\u660e-18]
测试Lucy
小明 18
PASSED
testcase/test_mark.py::TestApi::test_02_lucy[\u738b\u6797-16]
测试Lucy
王林 16
PASSED
使用另一种方式:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2021/4/6 11:37
# @File : test_class.py
import pytest
class TestApi:
def test_01_jame(self):
print('\n测试JAME')
@pytest.mark.parametrize('args', [['小明', '18'], ['王林', '16']])
def test_02_lucy(self, args):
print('\n测试Lucy')
print(args)
if __name__ == '__main__':
pytest.main(['-vs', '--html=../report/report.html'])
运行结果:
testcase/test_mark.py::TestApi::test_01_jame
测试JAME
PASSED
testcase/test_mark.py::TestApi::test_02_lucy[args0]
测试Lucy
['小明', '18']
PASSED
testcase/test_mark.py::TestApi::test_02_lucy[args1]
测试Lucy
['王林', '16']
PASSED