数据驱动:
分隔代码块和数据。再unittest中通过ddt实现,ddt(data driver test数据驱动测试)
1、数据驱动的第一种方式 data传参
通过data传一个list集合,unpack解包,参数有值
@是python语法,装饰器
可以多个用例一起执行
2、数据驱动的第二种方式 通过.txt传测试用例数据,如果是csv等也是open file这样的形式
要做元组的形式,*,不定长参数,不限制参数个数
*以元组的形式去解读
**以字典的形式去解读
3、数据驱动第三种方式 可以直接读取yaml文件
yaml的安装:pip install pyyaml
代码:
#导入unittest包
import unittest
from ddt import ddt,data,unpack,file_data
#读文件的方法,放在类的外面
def read_file():
file=open('data.txt','r',encoding='utf-8')
li=[]
#每行遍历
for line in file.readlines():
li.append(line.strip('\n').split(','))
file.close()
return li
@ddt
class UnitDemo(unittest.TestCase):
#前置条件
#->Noneunittest更新以后默认在调用**补全,可以去掉不影响
def setUp(self)->None:
print('setUp')
#后置条件
deftearDown(self)->None:
print('tearDown')
#传入的参数是字典格式
@file_data('data.yaml')
def test_1(self,**user):
username=user.get('username')
password=user.get('password')
#print(username+"+"+password)
print(password)
print(username)
if__name__=='__main__':
#运行unittest测试用例
#正常测试用例是前后关联的,如果不使用main函数调用,直接执行很可能会报错
unittest.main()
@ddt不可缺少,每一种数据驱动都需要@ddt
为什么file_data不需要加unpack
unpack的作用是解析list,list.split(',')
字典里面可以通过key直接查到value,字典里面不会有一样的值
不通过ddt进行yaml文件读取
1、通过文件读取到测试数据read_file()方法,可以读取.txt,保存到list,通过@data(*read_file())函数解析数值,通过@unpack对数据进行二次拆包,拆完之后传递到方法中运行
2、使用file_data读取yaml文件,@file_data('test.yaml'),这样是不管yaml文件中有多少条数据,我们都可以通过file_data直接解析,不需要@unpack拆包
yaml文件读取数据操作:
代码:
import yaml
file=open('test.yaml',encoding='UTF-8')
#loader=yaml.FullLoader必须要添加
res=yaml.load(file,Loader=yaml.FullLoader)
注意事项:python3导入pyyaml,如下图:
使用file_data读取yaml文件,@file_data('test.yaml'),
传入的参数是字典形式,不需要添加@unpack进行数据解包
@file_data是做文件的读取,里面封装的方法如果读取yaml文件就是上面的open和yaml.load方法
如果读取其他形式的文件,比如.txt 等可能有其他操作