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的Tornado框架对子域名和泛域名的支持
May 02 Python
Python读写zip压缩文件的方法
Aug 29 Python
Python 输出时去掉列表元组外面的方括号与圆括号的方法
Dec 24 Python
python time.sleep()是睡眠线程还是进程
Jul 09 Python
8种用Python实现线性回归的方法对比详解
Jul 10 Python
python 设置xlabel,ylabel 坐标轴字体大小,字体类型
Jul 23 Python
解决pycharm上的jupyter notebook端口被占用问题
Dec 17 Python
pytorch程序异常后删除占用的显存操作
Jan 13 Python
Python批量安装卸载1000个apk的方法
Apr 10 Python
解决django 向mysql中写入中文字符出错的问题
May 18 Python
让文件路径提取变得更简单的Python Path库
May 27 Python
浅谈Python响应式类库RxPy
Jun 14 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
PHP入门速成(2)
2006/10/09 PHP
投票管理程序
2006/10/09 PHP
通过PHP的内置函数,通过DES算法对数据加密和解密
2012/06/21 PHP
PHP导出EXCEL快速开发指南--PHPEXCEL的使用详解
2013/06/03 PHP
PHP中通过fopen()函数访问远程文件示例
2014/11/18 PHP
PHP实现163邮箱自动发送邮件
2016/03/29 PHP
js自带函数备忘 数组
2006/12/29 Javascript
JQuery1.4+ Ajax IE8 内存泄漏问题
2010/10/15 Javascript
jQuery常用操作方法及常用函数总结
2014/06/19 Javascript
ztree获取当前选中节点子节点id集合的方法
2015/02/12 Javascript
新入门node.js必须要知道的概念(必看篇)
2016/08/10 Javascript
浅谈vue项目优化之页面的按需加载(vue+webpack)
2017/12/11 Javascript
JavaScript 隐性类型转换步骤浅析
2018/03/15 Javascript
jQuery+ajax实现动态添加表格tr td功能示例
2018/04/23 jQuery
vue服务端渲染操作简单入门实例分析
2019/08/28 Javascript
vue render函数动态加载img的src路径操作
2020/10/26 Javascript
Python中无限元素列表的实现方法
2014/08/18 Python
理解python中生成器用法
2017/12/20 Python
python和shell获取文本内容的方法
2018/06/05 Python
python中使用psutil查看内存占用的情况
2018/06/11 Python
Python 异常的捕获、异常的传递与主动抛出异常操作示例
2019/09/23 Python
Pycharm 2020.1 版配置优化的详细教程
2020/08/07 Python
美国设计师精美珠宝购物网:Netaya
2016/08/28 全球购物
HomeAway的巴西品牌:Alugue Temporada
2018/04/10 全球购物
兰蔻俄罗斯官方网站:Lancome俄罗斯
2019/12/09 全球购物
黑猩猩商店:The Chimp Store
2020/02/12 全球购物
编写用C语言实现的求n阶阶乘问题的递归算法
2014/10/21 面试题
营销与策划专业毕业生求职信
2013/11/01 职场文书
双方协议书
2014/04/22 职场文书
高中语文课后反思
2014/04/27 职场文书
经贸日语专业自荐信
2014/09/02 职场文书
司机岗位职责
2015/02/04 职场文书
小学校长开学致辞
2015/07/29 职场文书
JavaScript offset实现鼠标坐标获取和窗口内模块拖动
2021/05/30 Javascript
DSP接收机前端设想
2022/04/05 无线电
Python软件包安装的三种常见方法
2022/07/07 Python