python 测试用例管理 生成_python自动生成接口测试用例
在python中Template可以将字符串的格式固定下来,重复利用。 同一套测试框架为了可以复用,所以我们可以将用例部分做参数化,然后运用到各个项目中。
代码如下:
coding=utf-8
'''
作者:大石
功能:自动生成pyunit框架下的接口测试用例
环境:python2.7.6
用法:将用户给的参数处理成对应格式,然后调用模块类生成函数,并将参数传入即可
'''
from string import Template
#动态生成单个测试用例函数字符串
def singleMethodCreate(MethodList,interfaceNamePara):
code=Template('''\n def test_${testcase}(self):
u"""${testcaseName}"""
headers = $headers
data = $data
re = requests.$method(url='$url',headers=headers,data=data)
status_code = re.status_code
s = str(status_code)
json = re.text
logging.info('-'*5+'返回状态码是'+s+'-'*5)
logging.info('-'*5+'返回结果集是'+json+'-'*5)
assert status_code == 200
assert json['status'] == 'ok'
''')
string = code.substitute(testcase=MethodList["testcase"],testcaseName=MethodList["TestcaseName"],
method=MethodList['method'],url=MethodList['url'],headers=MethodList['headers'],data=MethodList['data'],
)
return string
#拼接单个的测试用例函数字符串为完整字符串并传回主函数
#MethodParaList获取测试用例部分list
def methodCreate(MethodParaList,interfaceNamePara):
string = ""
for MethodPara in MethodParaList:
string2=singleMethodCreate(MethodPara,interfaceNamePara)
string=string+string2
return string
#构造单个测试集
def singleTestsuitCreate(MethodList,parameters):
code = Template('''suite.addTest(${className}("test_${testcase}"))''')
string = code.substitute(testcase = MethodList["testcase"],className = parameters[0])
return string
#添加测试集
def addtestsuit(MethodParaList,interfaceNamePara):
string = ""
for MethodPara in MethodParaList:
string2 = singleTestsuitCreate(MethodPara,interfaceNamePara)
string=string+string2
return string
#生成测试用例类函数字符串
def modelClassCreate(parameters):
modelCode = methodCreate(parameters[2],parameters[1])
adtestsuit = addtestsuit(parameters[2],parameters)
code = Template('''#coding: utf-8
"""
作者:大石
功能:待执行的接口测试用例
环境:python2.7.6
用法:通过框架自动触发调用
"""
import unittest,requests,datetime,sys,logging,BSTestRunner,time,os
from Log import Log
class ${className}(unittest.TestCase):
u"""待测试接口:${interfaceName}"""
def setUp(self):
logging.info('-'*5+"begin test"+"-"*5)
def tearDown(self):
logging.info('-'*5+"end test"+'-'*5)
${model}
if __name__ == "__main__":
#解决UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 97: ordinal not in range(128)
reload(sys)
sys.setdefaultencoding('utf8')
#构造测试集
suite = unittest.TestSuite()
${testsuite}
#定义date为日期,time为时间
date=time.strftime("%Y%m%d")
time1=time.strftime("%H%M%S")
now=time.strftime("%Y-%m-%d-%H_%M_%S",time.localtime(time.time()))
#创建路径
path='F:/test/study/yaml/test_log/'+now+"/"
#解决多次执行时报路径已存在的错误
try:
os.makedirs(path)
except:
if path!= None:
logging.error(u'当前路径已经存在')
filename=path+'Report.html'
fp=file(filename,'wb')
#日志记录
Log.log()
#执行测试
runner =BSTestRunner.BSTestRunner(stream=fp,title=u'下单平台接口测试用例',description=u'接口用例列表:')
runner.run(suite)
fp.close()
''')
fileStr = code.substitute(className=parameters[0],interfaceName=parameters[1],testsuite=adtestsuit,model=modelCode)
f=open(parameters[0]+".py",'w')
f.write(fileStr)
f.close()
然后测试用例部分如下:
parameters=["Testcase_Orders",
"/login",
[
{"TestcaseName":"测试登录","method":"post","url":"http://www.senbaba.cn/login","headers":{'content-type': 'application/json',
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko',
'Accept':'application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, */*',
'Accept-Language':'zh-CN'},"data":{"uname":"187071484771","pwd":"123456"},
"testcase":"login"},
{"TestcaseName":"测试登录","method":"post","url":"http://www.senbaba.cn/login1","headers":{'content-type': 'application/json',
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko',
'Accept':'application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, */*',
'Accept-Language':'zh-CN'},"data":{"uname":"187071484771","pwd":"123457"},
"testcase":"login_failed"}
]
]
自动生成的测试用例如下:
#coding: utf-8
"""
作者:大石
功能:待执行的接口测试用例
环境:python2.7.6
用法:通过框架自动触发调用
"""
import unittest,requests,datetime,sys,logging,BSTestRunner,time,os
from Log import Log
class Testcase_Orders(unittest.TestCase):
u"""待测试接口:/login"""
def setUp(self):
logging.info('-'*5+"begin test"+"-"*5)
def tearDown(self):
logging.info('-'*5+"end test"+'-'*5)
def test_login(self):
u"""测试登录"""
headers = {'Accept-Language': 'zh-CN', 'content-type': 'application/json', 'Accept': 'application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, */*', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko'}
data = {'uname': '187071484771', 'pwd': '123456'}
re = requests.post(url='http://www.senbaba.cn/login',headers=headers,data=data)
status_code = re.status_code
s = str(status_code)
json = re.text
logging.info('-'*5+'返回状态码是'+s+'-'*5)
logging.info('-'*5+'返回结果集是'+json+'-'*5)
assert status_code == 200
assert json['status'] == 'ok'
def test_login_failed(self):
u"""测试登录"""
headers = {'Accept-Language': 'zh-CN', 'content-type': 'application/json', 'Accept': 'application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, */*', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko'}
data = {'uname': '187071484771', 'pwd': '123457'}
re = requests.post(url='http://www.senbaba.cn/login1',headers=headers,data=data)
status_code = re.status_code
s = str(status_code)
json = re.text
logging.info('-'*5+'返回状态码是'+s+'-'*5)
logging.info('-'*5+'返回结果集是'+json+'-'*5)
assert status_code == 200
assert json['status'] == 'ok'
if __name__ == "__main__":
#解决UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 97: ordinal not in range(128)
reload(sys)
sys.setdefaultencoding('utf8')
#构造测试集
suite = unittest.TestSuite()
suite.addTest(Testcase_Orders("test_login"))
suite.addTest(Testcase_Orders("test_login_failed"))
#定义date为日期,time为时间
date=time.strftime("%Y%m%d")
time1=time.strftime("%H%M%S")
now=time.strftime("%Y-%m-%d-%H_%M_%S",time.localtime(time.time()))
#创建路径
path='F:/test/study/yaml/test_log/'+now+"/"
#解决多次执行时报路径已存在的错误
try:
os.makedirs(path)
except:
if path!= None:
logging.error(u'当前路径已经存在')
filename=path+'Report.html'
fp=file(filename,'wb')
#日志记录
Log.log()
#执行测试
runner =BSTestRunner.BSTestRunner(stream=fp,title=u'下单平台接口测试用例',description=u'接口用例列表:')
runner.run(suite)
fp.close()
20171019添加测试集的一个简单方法:
#添加测试集
def addtestsuit(parameters):
string = ""
temp = Template('''\n suite.addTest(${className}("test_${testcase}"))
''')
l = len(parameters[2])
for i in range(0,l):
testcase1 = parameters[2][i]['testcase']
string2 = temp.substitute(className = parameters[0],testcase = testcase1)
string=string+string2
print string
return string
python 测试用例管理 生成_python自动生成接口测试用例相关推荐
- python测试管理平台_Python + flask+ selenium 自动化测试用例管理、执行平台
写在开篇 这个项目放到论坛之后,有很多热心的小伙伴试用,并且在github上面也点赞和 fork. 感谢各位的支持! 不过可能大家使用习惯的问题, 遇到有什么问题,或者看到我在下面的回帖里回复了 qq ...
- python 枪表情包_Python自动生成表情包,python在手,从此斗图无敌手
作为一个数据分析师,应该信奉一句话----"一图胜千言".不过这里要说的并不是数据可视化,而是一款全民向的产品形态----表情包!!!! 表情包不仅仅是一种符号,更是一种文化:是促 ...
- python 枪表情包_Python自动生成表情包 Python在手 从此斗图无敌手
作者 | Python雁横 如需转载,请联系原作者授权 作为一个数据分析师,应该信奉一句话--"一图胜千言".不过这里要说的并不是数据可视化,而是一款全民向的产品形态--表情包!! ...
- Python实现输入电影名字自动生成豆瓣评论词云图(带GUI界面)小程序
Python实现输入电影名字自动生成豆瓣评论词云图(带GUI界面)小程序 一.项目背景 电影逐渐成为人们生活的不可或缺的一部分,而了解一部电影的可以通过电影评分与大众推荐度,但以上的方式都太过于片面, ...
- python api接口生成_Django 自动生成api接口文档教程
最近在写测试平台,需要实现一个节点服务器的api,正好在用django,准备使用djangorestframework插件实现. 需求 实现一个接口,在调用时,通过传递的参数,直接运行对应项目的自动化 ...
- python自动化代码生成_python 自动生成C++代码 (代码生成器)
Python代码自动生成方法(代码生成器)遇到这种事在工作遇到问题,你需要写很多c++基础数据库类,但这些类是一样的,只不过是添加,删除,修改并检查.如果你手动编写代码,它是费力而容易出错;它可以很容 ...
- 人生苦短我学python表情包_Python自动生成表情包
原标题:Python自动生成表情包 源| 创业智库文| 唐一 作为一个数据分析师,应该信奉一句话----"一图胜千言".不过这里要说的并不是数据可视化,而是一款全民向的产品形态-- ...
- python自动生成表格_Python自动生成绩效考核表并发送邮件
相信大家经常在工作中见到一些数据报告,比如周报啊,月报啊,绩效考核表之类的数据表格,这些表格每个月我们都需要发送给固定的人,比如领导,对于这些报告,有的需要手工导入数据,而有的其实都是一些固定数据,所 ...
- python drop函数_用python帮财务小姐姐自动生成财务报表
↑↑↑关注后"星标"简说Python 人人都可以简单入门Python.爬虫.数据分析简说Python严选 来源:python数据分析之禅 作者:小dull鸟 One old w ...
最新文章
- 实施Kubernetes可以实现多云架构安全
- 烂泥:SQL Server 2005数据库备份与恢复
- Intelij IDEA 2016.3安装mybatis插件并激活教程
- 什么是对象?——摘自《设计模式精解》(熊节 译,清华大学出版社,2004.12,P20)...
- centos删除php_Linux CentOS完全卸载PHP
- 同步Android与PC的时间
- iview 可以选择当天 禁用_人脸识别刚要普及,怎么就被禁用了?|人脸识别|人脸信息|世超|rekognition...
- Java实现 给定三个 int 变量, 求其中的最大值和最小值
- mysql中同一天入职怎么表示_ORACLE入职考试题及答案
- 如何用 ASP.NET Core 实现熔断和降级?
- find ctime 加减n时间范围
- 深入浅出设计模式(影印版 ) 读书笔记
- 字模提取软件的使用(pctolCD2002,基于FPGA的VGA显示汉字)
- socks v5 协议解析
- 《淘宝技术这十年》读书笔记
- 日语学习网站分类汇总
- 如何查看服务器bmc信息,服务器查看bmcip地址
- Verilog学习笔记(5):Verilog高级程序设计
- host速度 mtk usb_[MTK] 如何修改usb驱动能力
- EDA技术 一:EDA技术概况及大规模可编程逻辑器件
热门文章
- Python爬虫教程:requests模拟登陆github
- Handler处理器 和 自定义Opener
- Flask 正则路由匹配——转换器
- 【CCF】201609-2火车购票
- 浅说深度学习(4):增强学习
- Uploadify jquery+flash+UploadHandler.ashx .(用)
- GoogleMap API入门使用
- Python《使用Selenium 和pyautogui 实现自动登录淘宝》
- 深入浅出强化学习_皋兰县举办科级干部学习贯彻党的十九届五中全会精神培训班...
- leetcode - 46. 全排列(对vector容器的元素进行搜索,判断是否存在vector中)