在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自动生成接口测试用例相关推荐

  1. python测试管理平台_Python + flask+ selenium 自动化测试用例管理、执行平台

    写在开篇 这个项目放到论坛之后,有很多热心的小伙伴试用,并且在github上面也点赞和 fork. 感谢各位的支持! 不过可能大家使用习惯的问题, 遇到有什么问题,或者看到我在下面的回帖里回复了 qq ...

  2. python 枪表情包_Python自动生成表情包,python在手,从此斗图无敌手

    作为一个数据分析师,应该信奉一句话----"一图胜千言".不过这里要说的并不是数据可视化,而是一款全民向的产品形态----表情包!!!! 表情包不仅仅是一种符号,更是一种文化:是促 ...

  3. python 枪表情包_Python自动生成表情包 Python在手 从此斗图无敌手

    作者 | Python雁横 如需转载,请联系原作者授权 作为一个数据分析师,应该信奉一句话--"一图胜千言".不过这里要说的并不是数据可视化,而是一款全民向的产品形态--表情包!! ...

  4. Python实现输入电影名字自动生成豆瓣评论词云图(带GUI界面)小程序

    Python实现输入电影名字自动生成豆瓣评论词云图(带GUI界面)小程序 一.项目背景 电影逐渐成为人们生活的不可或缺的一部分,而了解一部电影的可以通过电影评分与大众推荐度,但以上的方式都太过于片面, ...

  5. python api接口生成_Django 自动生成api接口文档教程

    最近在写测试平台,需要实现一个节点服务器的api,正好在用django,准备使用djangorestframework插件实现. 需求 实现一个接口,在调用时,通过传递的参数,直接运行对应项目的自动化 ...

  6. python自动化代码生成_python 自动生成C++代码 (代码生成器)

    Python代码自动生成方法(代码生成器)遇到这种事在工作遇到问题,你需要写很多c++基础数据库类,但这些类是一样的,只不过是添加,删除,修改并检查.如果你手动编写代码,它是费力而容易出错;它可以很容 ...

  7. 人生苦短我学python表情包_Python自动生成表情包

    原标题:Python自动生成表情包 源| 创业智库文| 唐一 作为一个数据分析师,应该信奉一句话----"一图胜千言".不过这里要说的并不是数据可视化,而是一款全民向的产品形态-- ...

  8. python自动生成表格_Python自动生成绩效考核表并发送邮件

    相信大家经常在工作中见到一些数据报告,比如周报啊,月报啊,绩效考核表之类的数据表格,这些表格每个月我们都需要发送给固定的人,比如领导,对于这些报告,有的需要手工导入数据,而有的其实都是一些固定数据,所 ...

  9. python drop函数_用python帮财务小姐姐自动生成财务报表

    ↑↑↑关注后"星标"简说Python 人人都可以简单入门Python.爬虫.数据分析简说Python严选 来源:python数据分析之禅   作者:小dull鸟 One old w ...

最新文章

  1. 实施Kubernetes可以实现多云架构安全
  2. 烂泥:SQL Server 2005数据库备份与恢复
  3. Intelij IDEA 2016.3安装mybatis插件并激活教程
  4. 什么是对象?——摘自《设计模式精解》(熊节 译,清华大学出版社,2004.12,P20)...
  5. centos删除php_Linux CentOS完全卸载PHP
  6. 同步Android与PC的时间
  7. iview 可以选择当天 禁用_人脸识别刚要普及,怎么就被禁用了?|人脸识别|人脸信息|世超|rekognition...
  8. Java实现 给定三个 int 变量, 求其中的最大值和最小值
  9. mysql中同一天入职怎么表示_ORACLE入职考试题及答案
  10. 如何用 ASP.NET Core 实现熔断和降级?
  11. find ctime 加减n时间范围
  12. 深入浅出设计模式(影印版 ) 读书笔记
  13. 字模提取软件的使用(pctolCD2002,基于FPGA的VGA显示汉字)
  14. socks v5 协议解析
  15. 《淘宝技术这十年》读书笔记
  16. 日语学习网站分类汇总
  17. 如何查看服务器bmc信息,服务器查看bmcip地址
  18. Verilog学习笔记(5):Verilog高级程序设计
  19. host速度 mtk usb_[MTK] 如何修改usb驱动能力
  20. EDA技术 一:EDA技术概况及大规模可编程逻辑器件

热门文章

  1. Python爬虫教程:requests模拟登陆github
  2. Handler处理器 和 自定义Opener
  3. Flask 正则路由匹配——转换器
  4. 【CCF】201609-2火车购票
  5. 浅说深度学习(4):增强学习
  6. Uploadify jquery+flash+UploadHandler.ashx .(用)
  7. GoogleMap API入门使用
  8. Python《使用Selenium 和pyautogui 实现自动登录淘宝》
  9. 深入浅出强化学习_皋兰县举办科级干部学习贯彻党的十九届五中全会精神培训班...
  10. leetcode - 46. 全排列(对vector容器的元素进行搜索,判断是否存在vector中)