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函数, ...
随机推荐
- Qt控件中的属性sizePolicy说明
1. Fixed: 大小不能改变 2. Minimum: 已经是最小, 不能再被缩小, 但能放大. 3. Maximum: 已经是最大, 不能再被放大, 但能缩小. 4. Preferred: 控件 ...
- PTC点击网赚入门
第一次接触PTC大概是11月19号左右,那时候第一感觉是"这不就是传销吗,肯定是骗人的",但是由于利润十分之大,又忍不住仔细研究了一下,我还是十分还是十分谨慎的,再加上程序员的头脑 ...
- 【USACO1.2_2】★Transformations 方块转换
一块N x N(1<=N<=10)正方形的黑白瓦片的图案要被转换成新的正方形图案.写一个程序来找出将原始图案依照下面列转换方法转换成新图案的最小方式: 1:转90度:图案按顺时针转90度. ...
- go语言基础之包和自定义包与main包
1.包 所有 Go 语言的程序都会组织成若干组文件,每组文件被称为一个包.这样每个包的代码都可以作为很小的复用单元,被其他项目引用. 一个包的源代码保存在一个或多个以.go为文件后缀名的源文件中,通常 ...
- 《java 语言程序设计》第3、4章编程练习
3.1 public class test { public static void main(String[] args) { System.out.println("Enter a, b ...
- 【云计算】使用docker搭建nfs实现容器间共享文件
首先介绍下今天的两个主角:nfs和docker nfs 是什么 NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TC ...
- SSIS实践入门2:批量包的调度和SQLServer代理作业配置
趁着上一篇文章的余温,我们继续研究一下SSIS中多个包如何调度,难道需要一个包一个包的配置调度程序吗?显然不是的,接下来我们就说一说在SSIS应用中如何批量的调度所有的作业,本文只讲述一个基本的逻辑过 ...
- Cognos权限认证CJP方式之用户密码加密
在项目开发过程中,用户往往对系统的安全都有明确的要求,下面针对cognos门户认证用户密码如何加密来提供一个简单的wf 1Cognos权限认证方式:CJP 2Cognos用户数据库类型:Oracle ...
- C#基础视频教程6.2 如何简单读写数据库
上一节我们简单介绍了数据库的读写,所使用的数据库都是随便写的(用水果代替,但不是真正的食品零售数据表,至少没有价格,销量等等).这一节我们思考如何实现一个测试题的数据库,所谓的测试题数据库就是假定系统 ...
- 第十六周oj刷题——Problem I: 改错题:类中私有成员的訪问
Description 改错题: 设计一个日期类和时间类,并编写全局函数display用于显示日期和时间. 要求:display函数作为类外的普通函数,而不是成员函数 在主函数中调用display函数 ...

