一,创建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 文件实例的更多相关文章

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

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

  2. python yml 文件处理

    安装 pip install pyyaml import yaml import io s = {'host': {'ip00': '10.0.0.1', 'ip01': {'one': '10.0. ...

  3. python读取配置文件,yaml模块读取yml文件

    ymal文件编写语法参考http://www.ruanyifeng.com/blog/2016/07/yaml.html ymal在python中的安装:pip install pyyaml yml文 ...

  4. python ddt数据驱动(简化重复代码)

    在接口自动化测试中,往往一个接口的用例需要考虑 正确的.错误的.异常的.边界值等诸多情况,然后你需要写很多个同样代码,参数不同的用例.如果测试接口很多,不但需要写大量的代码,测试数据和代码柔合在一起, ...

  5. python DDT读取excel测试数据

    转自:http://www.cnblogs.com/nuonuozhou/p/8645129.html ddt   结合单元测试一起用 ddt(data.driven.test):数据驱动测试 由外部 ...

  6. python ddt及logging(九)

    一.安装 ①执行语句: pip install ddt ②在单元测试中DDT用来进行数据驱动,数据与测试代码分离(数据发生变化时,用例可以保持不变),一组数据来执行相同的操作. 一般进行接口测试时,每 ...

  7. python ddt实现数据驱动

    首先安装ddt模块,命令:pip install ddt 通常情况下,data中的数据按照一个参数传递给测试用例,如果data中含有多个数据,以元组,列表,字典等数据,需要自行在脚本中对数据进行分解或 ...

  8. 使用 Python 进行稳定可靠的文件操作

    程序需要更新文件.虽然大部分程序员知道在执行I/O的时候会发生不可预期的事情,但是我经常看到一些异常幼稚的代码.在本文中,我想要分享一些如何在Python代码中改善I/O可靠性的见解. 考虑下述Pyt ...

  9. Python学习(15)文件/IO

    目录 Python 文件I/O 打印到屏幕 读取键盘输入 打开和关闭文件 File对象属性 文件定位 重命名和删除文件 Python的目录 Python 文件I/O 本章只讲述所有基本的的I/O函数, ...

随机推荐

  1. exchange 升级顺序导致的邮件被发不出的问题?

    最近在做一个项目POC,准备升级过程目前的2007 环境到exchange 2010,由于客户环境是exchange 2007 sp1 不满足升级的基本条件,我们必须将exchange 2007 sp ...

  2. Iometer教程

    Iometer Tutorial and Introduction http://www.itechstorm.com/iometer-tutorial-introduction

  3. [Python爬虫] 之一 : Selenium+Phantomjs动态获取网站数据信息

    本人刚才开始学习爬虫,从网上查询资料,写了一个利用Selenium+Phantomjs动态获取网站数据信息的例子,当然首先要安装Selenium+Phantomjs,具体的看 http://www.c ...

  4. java中构建同时兼容linux和windows程序时遇到的文件路径分割符问题解决方案

    最近在做一个自动上传文件的客户端,因为 file.getAbsolutePath()  在Mac和linux下的分割符是“/”,而在windows操作系统下的分割符则是“\”,我们程序中固然可以通过调 ...

  5. Asp 将MSXML2.serverXMLHTTP返回的responseBody 内容转换成支持中文编码

    参考:ASP四个小技巧,抓取网页:GetBody,字节转字符BytesToBstr,正则表达式测试方法,生成静态页 Function GetBody(weburl) '创建对象 Dim ObjXMLH ...

  6. (转)使用百度 BAE做SVN服务器

    转自:https://www.sinosky.org/bae-svn.html#comment-1775 从这里下载 目前,无论是Windows平台.Linux平台还是Mac平台都有比较成熟的SVN客 ...

  7. Elasticsearch 数据搜索篇

    curl 'localhost:9200/_cat/indices?v' health index pri rep docs.count docs.deleted store.size pri.sto ...

  8. Install certificates needed for Visual Studio offline installation

    Visual Studio is primarily designed for installation from an internet-connected machine, since many ...

  9. (剑指Offer)面试题5:从尾到头打印链表

    题目: 输入一个链表的头结点,从尾到头反过来打印每个结点的值. 链表结点定义: struct ListNode{ int value; ListNode* pNext; }; 思路: 1.改变链表结构 ...

  10. IOS APP开发UI上的尺寸注意问题(屏幕、适配、分辨率)