python DDT读取excel测试数据

ddt 结合单元测试一起用

ddt(data.driven.test):数据驱动测试

由外部数据集合来驱动测试用例

核心的思想:数据和测试代码分离

应用场景:一组数据来执行相同的操作

当测试数据发生大量变化的情况下测试代码,(或者说测试用例)可以保持不变

excel存储测试数据,ddt读取测试数据到 单元测试框架(测试用例中)-输出到html报告

python.ddt框架

安装:pip install ddt

使用之前先导入ddt

import ddt

ddt结合单元测试来使用

1.在测试类定义定义之前使用:@ddt.ddt

2.在测试用例定义之前使用,@ddt.data(测试数据) 测试数据之间用逗号隔开

3.在2的基础上定义测试用例时,参数接收2中的测试数据

例:

@ddt.ddt

class Demo Test(unittest.TestCase):

@ddt.data(2,3,4)

def test_print(self,a)

print("简单调用@data查看输出的是什么?",a)

例子

import ddt

import unittest

@ddt.ddt

class test_PersonInfo(unittest.TestCase):

@classmethod

def setUp(self):

print("==========开始测试==========")

@classmethod

def tearDown(self):

print("==========结束测试==========")

@ddt.data(1,2,3,4)

def test_print(self,a):

print(a)

ddt-data 数据

一组数据之间用逗号隔开

data的参数可以为如下几种

1.一组数据中,每个数据为单个值

2.一组数据中,每个数据为一个列表或者一个字典

3.文件对象:jason,yaml

一组数据中的数据为列表或者字典:

@data([a,b],[c,d])

如何从以上数据中获取到字典中每一项值

@unpack

若变量A=[{a:b,a1:b1},{c:d,c1:d1}]

如何将变量A中的每一组元素作为测试数据

@ddt.data(*A)

import ddt

import unittest

@ddt.ddt

class test_PersonInfo(unittest.TestCase):

@classmethod

def setUp(self):

print("==========开始测试==========")

@classmethod

def tearDown(self):

print("==========结束测试==========")

@ddt.data([1,2],[3,4])

def test_print(self,a):

print(a)

==========开始测试==========

[1, 2]

==========结束测试==========

==========开始测试==========

[3, 4]

==========结束测试==========

print(a[0])

==========开始测试==========

1

==========结束测试==========

==========开始测试==========

3

==========结束测试==========

@ddt.data([1,2],[3,4])

@ddt.unpack

def test_print(self,a,b):

print(a,b)

==========开始测试==========

1 2

==========结束测试==========

==========开始测试==========

3 4

==========结束测试==========

@ddt.data([{"a":2,"b":3},{"c":4,"d":8},{"e":5,"f":7}])

def test_print(self,a):

print(a)

==========开始测试==========

[{'a': 2, 'b': 3}, {'c': 4, 'd': 8}, {'e': 5, 'f': 7}]

==========结束测试==========

@ddt.data(*datas)

def test_print(self,datas):

print(datas)

==========开始测试==========

{'class': 'python2', 'name': 'xiaoshitou', 'id': '0001', 'sex': 'male'}

==========结束测试==========

==========开始测试==========

{'class': 'python2', 'name': 'nuonuo', 'id': '0002', 'sex': 'female'}

==========结束测试==========

==========开始测试==========

{'class': 'python2', 'name': 'fly', 'id': '0003', 'sex': 'male'}

==========结束测试==========

==========开始测试==========

{'class': 'python2', 'name': 'haiyang', 'id': '0004', 'sex': 'male'}

==========结束测试==========

==========开始测试==========

{'class': 'python2', 'name': 'shuangshuang', 'id': '0005', 'sex': 'female'}

==========结束测试==========

dat-data数据

数据为文件对象:Json yaml

json格式里面必须为双引号“”,且必须为键值对,不存在纯列表格式,值作为测试数据

{"name":"nick","gender":"male","age":29}

@ddt.file_data(jason文件路径)

@ddt.file_data(os.getcwd()+"/test.json")

def test_json(self,data):

print(data)

==========开始测试==========

[1, 2, 3]

==========结束测试==========

==========开始测试==========

python2

==========结束测试==========

==========开始测试==========

male

==========结束测试==========

==========开始测试==========

xiaoshitou

==========结束测试==========

==========开始测试==========

0001

==========结束测试==========