Python @ddt.file_data() 为.yml 文件实例
一,创建login.yml 文件(以登录接口为例)
1,创建 login.yml 文件,内容如下图:

打印login.yml 文件,代码及显示效果如下:
代码:
import yaml,json
f = open(r'C:xxx\login.yml',encoding='utf-8')
print(json.dumps(yaml.load(f),indent=4,ensure_ascii= False))

2,测试代码如下:
import ddt,unittest,requests,time
import BeautifulReport @ddt.ddt
class My_case(unittest.TestCase): @ddt.file_data(r'xxx\login.yml')
@ddt.unpack
def test_run(self,**kwargs):
url = kwargs.get('url')
method = kwargs.get('method')
header = kwargs.get('header')
data =kwargs.get('data')
is_json = kwargs.get('is_json', 0)
cookie = kwargs.get('cookie', {})
check = kwargs.get('check')
if method == 'post':
if is_json:
res = requests.post(url,json = data,headers = header,cookies = cookie)
else:
res = requests.post(url,data = data,headers = header,cookies = cookie)
else:
res = requests.get(url,params= data,headers = header,cookies = cookie)
print(res.text)
# for k,v in check.items(): #校验方法为dict
# self.assertEqual(res.json().get(k),v)
for c in check: # 校验方法为list
self.assertIn(c, res.text) 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='用例描述')
二,创建createTicketOrder.yml 文件(以创建订单接口为例)
1,创建createTicketOrder.yml 文件,内容如下图:

2,创建idcard.py 文件,用来生成身份证号(附上百度代码)
import datetime,random
def getValidateCheckout(id17):
'''获得校验码算法'''
weight=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2] #十七位数字本体码权重
validate=['1','0','X','9','8','7','6','5','4','3','2'] #mod11,对应校验码字符值 sum=0
for i in range(0,len(id17)):
sum = sum + int(id17[i])*weight[i]
mode=sum%11
return validate[mode] def getRandomIdNumber():
addr = [513436]
sex = random.randint(0,1) #产生随机可用身份证号,sex = 1表示男性,sex = 0表示女性
addrId = addr[0]
# addrName = addr[1]
idNumber = str(addrId)
#出生日期码
start, end = "1960-01-01","2018-12-30" #生日起止日期
days = (datetime.datetime.strptime(end, "%Y-%m-%d") - datetime.datetime.strptime(start, "%Y-%m-%d")).days + 1
birthDays = datetime.datetime.strftime(datetime.datetime.strptime(start, "%Y-%m-%d") + datetime.timedelta(random.randint(0,days)), "%Y%m%d")
idNumber = idNumber + str(birthDays)
#顺序码
for i in range(2):#产生前面的随机值
n = random.randint(0,9)# 最后一个值可以包括
idNumber = idNumber + str(n)
# 性别数字码
sexId = random.randrange(sex,10,step = 2) #性别码
idNumber = idNumber + str(sexId)
# 校验码
checkOut = getValidateCheckout(idNumber)
idNumber = idNumber + str(checkOut)
# return idNumber,addrName,addrId,birthDays,sex,checkOut
return idNumber
3,调用接口测试,代码如下:
import ddt,unittest,requests,time
import BeautifulReport
import datetime
from cases.idcard import getRandomIdNumber #随机生成身份证函数
def get_id_card(dic:dict): #随机生成身份证号
if 'id_card' in dic.values():
for k in dic:
if dic.get(k) == 'id_card':
dic[k] = getRandomIdNumber()
return dic 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 @ddt.ddt
class My_case(unittest.TestCase):
@ddt.file_data(r'xxx\createTicketOrder.yml')
@ddt.unpack
def test_run(self,**kwargs):
url = kwargs.get('url')
method = kwargs.get('method')
header = kwargs.get('header')
data =kwargs.get('data')
data = get_cur_time(data) # 将 yml 文件中的cur_time 字段替换为系统当前日期
data = get_id_card(data) #将 yml 文件中的id_card 字段替换为调用函数生成的身份证号
is_json = kwargs.get('is_json', 0)
cookie = kwargs.get('cookie', {})
check = kwargs.get('check')
if method == 'post':
if is_json:
res = requests.post(url,json = data,headers = header,cookies = cookie)
else:
res = requests.post(url,data = data,headers = header,cookies = cookie)
else:
res = requests.get(url,params= data,headers = header,cookies = cookie)
print(res.text)
for k,v in check.items(): #校验方法为dict
self.assertEqual(res.json().get(k),v)
# for c in check: # 校验方法为list
# self.assertIn(c, res.text) 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='用例描述') 三,其他
A,附上check 校验方法

校验方法为
for c in check: # 校验方法为list
# self.assertIn(c, res.text)

校验方法为
for k,v in check.items(): #校验方法为dict
self.assertEqual(res.json().get(k),v)
B,如果 @ddt.file_data() 为.json 文件
如果value 是json 格式 需加转译符 \
如 入参为:
在json 文件里需写成
C,附上creatTicketOrder.json 文件![]()
Python @ddt.file_data() 为.yml 文件实例的更多相关文章
- python----数据驱动@ddt.file_data结合yaml文件的使用
一.创建yaml文件1. 安装yaml模块 pip install pyyaml2. 新建yaml文件 右键任意文件夹-->New-->File,输入文件名并以.yaml或.yml结尾 二 ...
- python yml 文件处理
安装 pip install pyyaml import yaml import io s = {'host': {'ip00': '10.0.0.1', 'ip01': {'one': '10.0. ...
- python读取配置文件,yaml模块读取yml文件
ymal文件编写语法参考http://www.ruanyifeng.com/blog/2016/07/yaml.html ymal在python中的安装:pip install pyyaml yml文 ...
- python ddt数据驱动(简化重复代码)
在接口自动化测试中,往往一个接口的用例需要考虑 正确的.错误的.异常的.边界值等诸多情况,然后你需要写很多个同样代码,参数不同的用例.如果测试接口很多,不但需要写大量的代码,测试数据和代码柔合在一起, ...
- python DDT读取excel测试数据
转自:http://www.cnblogs.com/nuonuozhou/p/8645129.html ddt 结合单元测试一起用 ddt(data.driven.test):数据驱动测试 由外部 ...
- python ddt及logging(九)
一.安装 ①执行语句: pip install ddt ②在单元测试中DDT用来进行数据驱动,数据与测试代码分离(数据发生变化时,用例可以保持不变),一组数据来执行相同的操作. 一般进行接口测试时,每 ...
- python ddt实现数据驱动
首先安装ddt模块,命令:pip install ddt 通常情况下,data中的数据按照一个参数传递给测试用例,如果data中含有多个数据,以元组,列表,字典等数据,需要自行在脚本中对数据进行分解或 ...
- 使用 Python 进行稳定可靠的文件操作
程序需要更新文件.虽然大部分程序员知道在执行I/O的时候会发生不可预期的事情,但是我经常看到一些异常幼稚的代码.在本文中,我想要分享一些如何在Python代码中改善I/O可靠性的见解. 考虑下述Pyt ...
- Python学习(15)文件/IO
目录 Python 文件I/O 打印到屏幕 读取键盘输入 打开和关闭文件 File对象属性 文件定位 重命名和删除文件 Python的目录 Python 文件I/O 本章只讲述所有基本的的I/O函数, ...
随机推荐
- Python学习(四)数据结构 —— bool
Python 布尔类型 bool python 中布尔值使用常量True 和 False来表示:注意大小写 比较运算符< > == 等返回的类型就是bool类型:布尔类型通常在 if 和 ...
- uva 816 abbott's revenge ——yhx
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAncAAAN5CAYAAABqtx2mAAAgAElEQVR4nOy9sY4jydKezVuoayhH0r
- cocos2d-x v3.0各个环境下创建项目以及编译、执行官方DEMO
摘自:https://github.com/cocos2d/cocos2d-x/ 怎样创建一个新项目 How to start a new game Download the code from co ...
- JMeter压力测试和性能测试工具
Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试,它最初被设计用于Web应用测 试但后来扩展到其他测试领域. 它可以用于测试静态和动态资源例如静态文件 ...
- HTML:几个常见的列表标签
介绍: 在网页中列表是很常见的标签,主要分为有序标签.无序标签.列表嵌套.定义标签 有序标签:<ol><li></li><ol> 无序标签:<ul ...
- 不要让Javascript的等价表格看上去那么难看
时不时的会有人贴出一张表格,用来展现javascript的 '==' 比较出来的结果.像最近的这个例子,看看这张表格有多么的无序. 这些文章基本上都是对的,他们指出 '==' 设计的很糟糕.但是他们通 ...
- powerdesigner 16.5 破解步骤
假设你的PowerDesigner已经安装完成.(PowerDesigner下载地址:http://pan.baidu.com/s/1mgqjmpa) 1. 从网上下载PowerDesigner165 ...
- hadoop中InputFormat 接口的设计与实现
InputFormat 主要用于描述输入数据的格式, 它提供以下两个功能.❑数据切分:按照某个策略将输入数据切分成若干个 split, 以便确定 Map Task 个数以及对应的 split.❑为 M ...
- 十个书写Node.js REST API的最佳实践(上)
收录待用,修改转载已取得腾讯云授权 原文:10 Best Practices for Writing Node.js REST APIs 我们会通过本文介绍下书写Node.js REST API的最佳 ...
- Linux下QTCreator代码自动补全(是真的自动补全,不是手动触发)
在使用Windows下的QTCreator的时候,像visual studio一样代码自动补全十分方便,而在Linux下,QTCreator似乎不能做到. 网上有些说是可以设置成手动补全,今天试了一下 ...

