在python中进行数据驱动测试

在实际的测试工作中,我们经常需要对多组不同的输入数据,进行同样的测试操作步骤,以验证我们的软件。这种测试,在功能测试中非常耗费人力物力,但是在自动化中,却比较好实现,只要实现了测试操作步骤,然后将多组测试数据以数据驱动的形式注入,就可以实现了,在java中,我们可以用testng测试框架中的DataProvider注解来实现,在python中,我们也可以实现,下面来一起看看。

要实现数据驱动,首先,我们得先实现测试操作步骤。

我们首先实现一个简单的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  #############")

这是一个简单的测试用例,在实际的测试中,我们会输入多组数据对同一个功能进行测试,接下来,我们用数据驱动来实现多组明星夫妻的输出。

在python中进行数据驱动测试

在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  #############")

数据驱动是自动化测试中很重要的一种应用,我们不止要会用它,还需要理解它的思维,它可以帮我们做什么。好了,胖友们,我们下次见。

源自公众号 自动化软件测试



留言