python+jinja2实现接口数据批量生成工具


Posted in Python onAugust 28, 2019

在做接口测试的时候,我们经常会遇到一种情况就是要对接口的参数进行各种可能的校验,手动修改很麻烦,尤其是那些接口参数有几十个甚至更多的,有没有一种方法可以批量的对指定参数做生成处理呢。

答案是肯定的!

python的jinja2模板库可以很好的满足我们的需求,通过维护一个原始数据模板,将我们想要动态生成的变量模板化,就可以实现需求。

现在我们有这样的一个请求数据

{
 "abc":"123",
 "p2p":"123",
 "smid":"20180807220733939b66d80092eea34ce9e77f30bedff12345b7d5a3faa11b",
 "test":{
  "test1":"1",
  "test2":"2"
 },
 "test3":"3"
}

如果想对其中的smid字段进行批量修改并生成新的请求数据就可以进行如下操作:

1、首先新建一个名为fp_template.txt的文本文件;

2、将上面的接口请求数据复制粘贴进这个txt文件中,我们以此作为“模板文件”;

3、新建一个predata文件夹用来存放生成后的数据文件;

4、对smid字段进行模板化(模板格式可以参考jinja2的语法,这里不做赘述),于是上面的请求参数就变成了下面这样:

{
 "abc":"123",
 "p2p":"123",
 "smid":"{{ smid }}",
 "test":{
  "test1":"1",
  "test2":"2"
 },
 "test3":"3"
}

实现代码代码如下:

# -*- coding: UTF-8 -*-
from jinja2 import Environment,FileSystemLoader
import os

class DataTemplateFaker:
 def __init__(self):
  self.aesPath = os.getcwd()#获取启动路径
  self.resultPath = self.aesPath + "/predata/"#指定用来保存生成数据的路径
  self.templateFile = "fp_template.txt"

 #修改我们要批量生成smid的格式
 def init_smid(self,start,end):
  smidArg = [x for x in range(start, end)]
  re = []
  for n in smidArg:
   re.append("20180807220733939b66d80092eea34ce9e77f30bedff" + str(n) + "b7d5a3faa11b")
  return re

 #操作模板文件
 def preContent(self,arg):
  env = Environment(loader=FileSystemLoader('./'))
  tpl = env.get_template(self.templateFile)
  renderContent = tpl.render(smid=arg)
  return renderContent

 #通过修改的smid列表批量替换模板文件并写入指定文件中
 def makeContent(self,preList):
  x = 0
  for i in preList:
   x = x + 1
   filename = str(self.resultPath) + 'data_' + str(x) + '.txt' #用以区分存放新生成的请求数据(也可以写到一个文件中)
   renderContent = self.preContent(i)
   with open(filename, 'w') as f:
    f.writelines(renderContent)
    f.close()

if __name__ == "__main__":
 AT = DataTemplateFaker()
 reList = AT.init_smid(1,10)#控制生成数据的范围
 AT.makeContent(reList)

运行程序,就能得到新生成的数据

python+jinja2实现接口数据批量生成工具

当然,我们也可以对其他的参数进行指定修改,如修改p2p,只需要修改模板文件:

{
 "abc":"123",
 "p2p":"{{ p2p }}",
 "smid":"20180807220733939b66d80092eea34ce9e77f30bedff12345b7d5a3faa11b",
 "test":{
  "test1":"1",
  "test2":"2"
 },
 "test3":"3"
}

然后在代码中加入一个方法init_p2p()

# -*- coding: UTF-8 -*-
from jinja2 import Environment,FileSystemLoader
import os

class DataTemplateFaker:
 def __init__(self):
  self.aesPath = os.getcwd()#获取启动路径
  self.resultPath = self.aesPath + "/predata/"#指定用来保存生成数据的路径
  self.templateFile = "fp_template.txt"

 #修改我们要批量生成smid的格式
 def init_smid(self,start,end):
  smidArg = [x for x in range(start, end)]
  re = []
  for n in smidArg:
   re.append("20180807220733939b66d80092eea34ce9e77f30bedff" + str(n) + "b7d5a3faa11b")
  return re
 #修改我们要批量生成p2p的格式 
 def init_p2p(self,start,end):
  p2pArg = [x for x in range(start, end)]
  return p2pArg

 #操作模板文件
 def preContent(self,arg):
  env = Environment(loader=FileSystemLoader('./'))
  tpl = env.get_template(self.templateFile)
  renderContent = tpl.render(smid=arg)
  return renderContent

 #通过修改的smid列表批量替换模板文件并写入指定文件中
 def makeContent(self,preList):
  x = 0
  for i in preList:
   x = x + 1
   filename = str(self.resultPath) + 'data_' + str(x) + '.txt' #用以区分存放新生成的请求数据(也可以写到一个文件中)
   renderContent = self.preContent(i)
   with open(filename, 'w') as f:
    f.writelines(renderContent)
    f.close()

if __name__ == "__main__":
 AT = DataTemplateFaker()
 reList = AT.init_p2p(1,10)#控制生成数据的范围
 AT.makeContent(reList)

这只是一个很简单的demo,当然还有很多可优化的地方,比如多字段同时修改、引入faker库进行关联生成伪造数据等,越是复杂且参数繁多的接口越适用,其他的方法就可以天马行空,任君发挥了。

总结

以上所述是小编给大家介绍的python+jinja2实现接口数据批量生成工具,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
python中的reduce内建函数使用方法指南
Aug 31 Python
python利用装饰器进行运算的实例分析
Aug 04 Python
使用Python解析JSON数据的基本方法
Oct 15 Python
Python 探针的实现原理
Apr 23 Python
Python第三方库xlrd/xlwt的安装与读写Excel表格
Jan 21 Python
Python装饰器原理与用法分析
Apr 30 Python
python之验证码生成(gvcode与captcha)
Jan 02 Python
使用Python中的reduce()函数求积的实例
Jun 28 Python
基于h5py的使用及数据封装代码
Dec 26 Python
Python CategoricalDtype自定义排序实现原理解析
Sep 11 Python
深入浅析python3 依赖倒置原则(示例代码)
Jul 09 Python
python 详解turtle画爱心代码
Feb 15 Python
解决Atom安装Hydrogen无法运行python3的问题
Aug 28 #Python
opencv实现简单人脸识别
Feb 19 #Python
Atom Python 配置Python3 解释器的方法
Aug 28 #Python
python聚类算法解决方案(rest接口/mpp数据库/json数据/下载图片及数据)
Aug 28 #Python
Numpy的简单用法小结
Aug 28 #Python
Python 通过截图匹配原图中的位置(opencv)实例
Aug 27 #Python
Python 转换文本编码实现解析
Aug 27 #Python
You might like
thinkphp中多表查询中防止数据重复的sql语句(必看)
2016/09/22 PHP
php事件驱动化设计详解
2016/11/10 PHP
PHP实现广度优先搜索算法(BFS,Broad First Search)详解
2017/09/16 PHP
laravel model 两表联查示例
2019/10/24 PHP
csdn 博客中实现运行代码功能实现
2009/08/29 Javascript
Extjs中通过Tree加载右侧TabPanel具体实现
2013/05/05 Javascript
javascript生成随机数的方法
2014/05/16 Javascript
javascript原生和jquery库实现iframe自适应高度和宽度
2014/07/18 Javascript
详解Javascript 装载和执行
2014/11/17 Javascript
jQuery实现表单提交时判断的方法
2014/12/13 Javascript
javascript字符串与数组转换汇总
2015/05/26 Javascript
js实现浮动在网页右侧的简洁QQ在线客服代码
2015/09/04 Javascript
jquery.cookie实现的客户端购物车操作实例
2015/12/24 Javascript
Node.js如何自动审核团队的代码
2016/07/20 Javascript
微信小程序如何修改本地缓存key中单个数据的详解
2019/04/26 Javascript
3分钟了解vue数据劫持的原理实现
2019/05/01 Javascript
在vue中使用vuex,修改state的值示例
2019/11/08 Javascript
vue 使用post/get 下载导出文件操作
2020/08/07 Javascript
jQuery实现简单三级联动效果
2020/09/05 jQuery
JS实现多功能计算器
2020/10/28 Javascript
[04:52]DOTA2亚洲邀请赛附加赛 TOP10精彩集锦
2015/01/29 DOTA
Python和GO语言实现的消息摘要算法示例
2015/03/10 Python
Python中map,reduce,filter和sorted函数的使用方法
2015/08/17 Python
Python 备份程序代码实现
2017/03/06 Python
Python基于回溯法子集树模板实现图的遍历功能示例
2017/09/05 Python
Python爬虫文件下载图文教程
2018/12/23 Python
Python中字符串与编码示例代码
2019/05/20 Python
澳大利亚办公室装修:JasonL Office Furniture
2019/06/25 全球购物
大学三年的自我评价
2013/12/25 职场文书
女方回门宴答谢词
2014/01/14 职场文书
营销与策划专业求职信
2014/06/20 职场文书
邮政竞聘演讲稿
2014/09/03 职场文书
讲座新闻稿
2015/07/18 职场文书
2016大学生就业指导课心得体会
2016/01/15 职场文书
深入理解以DEBUG方式线程的底层运行原理
2021/06/21 Java/Android
MySQL令人大跌眼镜的隐式转换
2021/08/23 MySQL