python----数据驱动@ddt.file_data结合yaml文件的使用

一、创建yaml文件
1. 安装yaml模块
 pip install pyyaml
2. 新建yaml文件
 右键任意文件夹-->New-->File,输入文件名并以.yaml或.yml结尾

二、yaml文件格式

1. 列表
 列表中的所有元素缩进相同,且均已“- ”(一个横杠和一个空格)开头

- 苹果
- 橙子
- 香蕉

代码读取yaml文件的数据

import yaml

f = open(r'C:\Users\yitai\Desktop\python相关\综评_json\test1.yaml',encoding='utf-8')
res = yaml.load(f)
print(type(res))
print(res)

最后打印结果为:
 python----数据驱动@ddt.file_data结合yaml文件的使用
2. 字典
 字典中同级别的元素缩进相同,由简单的键 : 值的形式组成(必须得是英文冒号,且冒号后面要跟一个空格)

name : 张三
age : 25
phone : 18700000000

同上代码读取yaml文件的数据,最后打印结果为:
python----数据驱动@ddt.file_data结合yaml文件的使用
3. 复合结构

-
cookieType : 1
dataType: 0
url : user/login
method : post
detail : 登录
data :
username: 张三
password : 123456
check :
- 操作成功

最后打印结果为:
python----数据驱动@ddt.file_data结合yaml文件的使用

三、测试代码

import unittest,requests
import ddt
from urllib import parse
from conf.setting import BASE_URL,COOKIE
@ddt.ddt
class My_case(unittest.TestCase):
base_url = BASE_URL
@ddt.file_data(r'C:\Users\****\Desktop\****\case_data\test1.yaml')#ddt帮你读文件,获取文件内容,循环调用函数
def test_request(self,**kwargs):
detail = kwargs.get('detail','没写用例描述')
self._testMethodDoc = detail #动态的用例描述
url = kwargs.get('url')#url
url = parse.urljoin(self.base_url,url)#拼接好url
method = kwargs.get('method','get')#请求方式
data = kwargs.get('data',{}) #请求参数
header = kwargs.get('header',{})#请求头
cookieType = kwargs.get('cookieType')
check = kwargs.get('check')
dataType = kwargs.get('dataType')
method = method.lower() #便于处理 if cookieType:
cookie = COOKIE
else:
cookie={}
try:
if method=='post':
if dataType:
res = requests.post(url,json=data,cookies=cookie,headers=header).text
else:
res = requests.post(url,data=data,cookies=cookie,headers=header).text
else:
res = requests.get(url,params=data,cookies=cookie,headers=header).text
except Exception as e:
print('接口请求出错')
res = e
# 列表
for c in check:
self.assertIn(c,res,msg='预计结果不符,预期结果:'+c +','+ '实际结果:' +res)
if __name__ == '__main__':
unittest.main()
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(My_case))
report_html = BeautifulReport.BeautifulReport(suite)
# report_html.report(filename='test', description='用例描述')
fmt = '{date}_TestReport.html'.format(date=time.strftime('%Y%m%d%H%M%S'))
#生成报告的文件名格式20180329190544_TestReport.html
report_html.report(filename=fmt, description='用例描述')

四、yaml文件中参数化
下面以创建体育考试为例

import datetime
def get_cur_time(dic: dict): #取系统当前日期
if 'cur_time' in dic.values():
for k in dic:
if dic.get(k) == 'cur_time':
dic[k] = '%s' % datetime.date.today()
return dic
import unittest,requests
@ddt.ddt
class Physical(unittest.TestCase):
base_url = BASE_URL
@ddt.file_data(r'C:\Users\yitai\Desktop\python相关\综评_json\case_data\setxqjy.yaml')#ddt帮你读文件,获取文件内容,循环调用函数
def test_request(self,**kwargs):
detail = kwargs.get('detail','没写用例描述')
self._testMethodDoc = detail #动态的用例描述
url = kwargs.get('url')#url
url = parse.urljoin(self.base_url,url)#拼接好url
method = kwargs.get('method','get')#请求方式
data = kwargs.get('data',{}) #请求参数
data = get_cur_time(data) #将yaml文件中的cur_time字段替换为系统当前时间
header = kwargs.get('header',{})#请求头
cookieType = kwargs.get('cookieType')
check = kwargs.get('check')
dataType = kwargs.get('dataType')
method = method.lower() #便于处理 if cookieType:
cookie = COOKIE
else:
cookie={}
try:
if method=='post':
if dataType:
res = requests.post(url,json=data,cookies=cookie,headers=header).text
else:
res = requests.post(url,data=data,cookies=cookie,headers=header).text
else:
res = requests.get(url,params=data,cookies=cookie,headers=header).text
except Exception as e:
print('接口请求出错')
res = e
# 列表
for c in check:
self.assertIn(c,res,msg='预计结果不符,预期结果:'+c +','+ '实际结果:' +res) if __name__ == '__main__':
unittest.main()
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(Physical))
report_html = BeautifulReport.BeautifulReport(suite)
# report_html.report(filename='test', description='用例描述')
fmt = '{date}_TestReport.html'.format(date=time.strftime('%Y%m%d%H%M%S'))
#生成报告的文件名格式20180329190544_TestReport.html
report_html.report(filename=fmt, description='用例描述')
上一篇:201521123089 《Java程序设计》第8周学习总结


下一篇:Treap和名次树