在实际的测试工作中,我们经常需要对多组不同的输入数据,进行同样的测试操作步骤,以验证我们的软件。这种测试,在功能测试中非常耗费人力物力,但是在自动化中,却比较好实现,只要实现了测试操作步骤,然后将多组测试数据以数据驱动的形式注入,就可以实现了,在java中,我们可以用testng测试框架中的DataProvider注解来实现,在python中,我们也可以实现,来一起看看。
要实现数据驱动,首先,我们得先实现测试操作步骤。
image
我们首先实现一个简单的unittest测试用例,该测试用例实现的是一对明星夫妻的输出,比如男:张国立对应女:邓婕。
在PyCharm中创建一个名为testsample的文件,在其中创建一个名为Test_sample的class,并集成unittest.TestCase,并在Test_sample中创建一个名为test的方法:
import unittest
class Test_ddt(unittest.TestCase):
def test(self):
print("############# start #############")
print("男: 张国立 —> 女: 邓婕" ) # 通过字典的key获取value
print("############# end #############")
image
这是一个简单的测试用例,在实际的测试中,我们会输入多组数据对同一个功能进行测试,接下来,我们用数据驱动来实现多组明星夫妻的输出。
在unittest中,没有自带的数据驱动,我们得借助ddt来实现,首先,我们得在python运行环境中安装ddt,用下列命令安装
pip install ddt
◆ ◆ ◆ ◆ ◆
安装之后,我们在刚刚的代码中进行改写,为了创建数据驱动测试,需要在测试类上使用@ddt装饰符,在测试方法上使用@data装饰符。@data装饰符把参数当作测试数据,参数可以是单个值、列表、元组、字典。
对上面的测试用例进行改写
import ddt
import unittest
data = [{"search": "赵丽颖", "result": "冯绍峰"},
{"search": "张国立", "result": "邓婕"},
{"search": "邓超", "result": "孙俪"}]
@ddt.ddt
class Test_ddt(unittest.TestCase):
@ddt.data(*data)
def test(self, data): # 传参测试数据列表
print("############# start #############")
print("男: %s —> 女: %s" % (data["search"], data["result"])) # 通过字典的key获取value
print("############# end #############")
◆ ◆ ◆ ◆ ◆
在unittest中我们得借助ddt来实现数据驱动,但是对于另外一个测试框架pytest,它自带数据驱动实现,是通过@pytest.mark.parametrize(argnames,argvalues) 来实现参数化的。我们首先来实现一个同样的测试用例。
在PyCharm中创建一个名为test_sample的文件,在其中创建一个名为Test_sample的class,并在Test_sample中创建一个名为test的方法:
class Test_ddt():
def test(self):
print("############# start #############")
print("男: 张国立 —> 女: 邓婕" ) # 通过字典的key获取value
print("############# end #############")
从上面的步骤可以看出来,pytest中实现测试用例比unittest要简洁很多。在此基础上,我们来实现数据驱动。
修改代码如下
测试数据构造
import pytest
data = [("张国立", "邓婕"),("邓超","孙俪"),("冯绍峰","赵丽颖"),("绿巨人","黑寡妇")]
引入数据驱动
@pytest.mark.parametrize('a,b',data)
class Test_ddt():
def test(self, a, b):
print("############# start #############")
print("男: %s —> 女: %s" %(a, b) ) # 通过字典的key获取value
print("############# end #############")
数据驱动是自动化测试中很重要的一种应用,我们不止要会用它,还需要理解它的思维,它可以帮我们做什么。