Yaml是什么:
Yaml与json类似,都是用来描述数据的一种文件格式
Yaml有自格式化的特点,风格与python一致
Yaml与xml、json一样,具有自我描述性
Yaml与unittest有着完美的支持
Yaml与json对比(左边是json,右边是yaml):
Yaml的基础语法:
1.YAML使用可打印的Unicode字符,建议使用UTF-8编码
2.使用空白字符(不能使用Tab)分层,同层元素左侧对齐
3.Yaml文件使用.yaml或者.yml作为扩展名
4.单行注解由井号(#)开始,可以出现在行中任意位置
5.每个清单成员以单行表示,并用短杠+空白(- )起始
6.每个杂凑表的成员用冒号+空白(: )分开键和值
7.字符串一般不使用引号,但必要的时候可以用引号框柱
yaml数据类型中常用:整数、小数、空值、布尔值、字符串、日期
Yaml的其他语法:初学者用不到
unittest中使用Yaml,代码示例:
'''
ddt 数据驱动测试
将数据从py文件中分离,真正做到数据与代码分离,便于维护之-----
yaml文件的数据读取:要先安装yaml三方库(pip install pyyaml)
'''
import unittest
from ddt import ddt,data,unpack,file_data
# 使用yaml数据文件
@ddt
class TestMyCase(unittest.TestCase): # 需要继承父类unittest.TestCase
# 单一参数的数据驱动
@unittest.skip
@file_data("phone.yaml")
def test_1(self,phone):
print('测试手机号注册流程:',phone)
# 多参数的数据驱动
# 注:file_data在处理多个参数传递需求的时候,无法满足要求,就算加上unpack也不能自动解包,解决方法见test_3
@unittest.skip
@file_data("userdata.yaml")
@unpack # 装饰器:解包
def test_2(self,username,password=None):
print('测试用户登录流程:',username,password)
# 在yaml数据文件中采用对象的定义方式来定义数据内容,见文件userdata1.yaml(推荐使用test_3中的方法来定义数据)
# 注意:yaml数据文件的key和程序测试方法的入口参数必须同名,如本例中为username和password,如果不同名,解决方法见test_4
@unittest.skip
@file_data("userdata1.yaml")
def test_3(self, username, password=None):
print('测试用户登录流程:', username, password)
# 如果key和入口参数不一致,处理方法如下(使用到的文件userdata1.yaml,将入口参数转化成字典,再通过获取字典中的值拿到用户名和密码):
@file_data("userdata2.yaml")
def test_4(self, **userdata):
username = userdata['name']
password = userdata.get('pwd') # 等同于password = userdata['pwd']
print('测试用户登录流程:', userdata)
print('测试用户登录流程:', username,password)
if __name__ == '__main__':
unittest.main()