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函数, ...
随机推荐
- Informatica 常用组件Source Qualifier之五 User Defined Join
User defined join : 输入用户定义的联接与输入自定义 SQL 查询类似.但是,只需输入 WHERE 子句的内容,而不是整个查询. 添加用户定义的联接时,源限定符转换包括默认 ...
- Servlet学习笔记(一):生命周期
一.Servlet 生命周期: Servlet 生命周期可被定义为从创建直到毁灭的整个过程.以下是 Servlet 遵循的过程:初始化——响应请求——终止——回收 Servlet 通过调用 init ...
- 【转】 Python 中,matplotlib绘图无法显示中文的问题
在python中,默认情况下是无法显示中文的,如下代码: import matplotlib.pyplot as plt # 定义文本框和箭头格式 decisionNode = dict(boxsty ...
- 【python】如何安装requests
在cmd窗口输入pip install requests 即可,如下 C:\Users\horn1\Desktop\python\4>pip install requestsCollecting ...
- 【树莓派】树莓派raspi-config配置
发现有些树莓派盒子,输入的结果和键盘的实际字符有差异,比如输入 | ,结果显示为 ~. 这是因为树莓派的键盘设置问题. 可以通过设置raspi-config进行配置: 第一次使用树莓派的时候需要进行一 ...
- UNIX网络编程读书笔记:简介
认知套接口编程接口 理解原始套接口(raw socket)的概念 值得注意的是,客户和服务器是典型的用户进程,而TCP和IP协议则通常是系统内核协议栈的一部分. 上图中在TCP和UDP之间留有间隙 ...
- android 实现摇一摇功能
实现“摇一摇”功能,其实很简单,就是检测手机的重力感应,具体实现代码如下: 一.在 AndroidManifest.xml 中添加操作权限 二.实现代码 package com.xs.test; im ...
- Python continue
continue继续循环在循环过程中,可以用break退出当前循环,还可以用continue跳过后续循环代码,继续下一次循环.假设我们已经写好了利用for循环计算平均分的代码: L = [75, 98 ...
- 自己主动化測试使用mybatis更新数据库信息实例
代码例如以下: mybatis配置文件: <? xml version="1.0" encoding="UTF-8"?> <!DOCTYPE ...
- HDU 5361 In Touch (2015 多校6 1009 最短路 + 区间更新)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5361 题意:最短路.求源点到全部点的最短距离.但与普通最短路不同的是,给出的边是某点到区间[l,r]内随意 ...

