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的描述符(descriptor)、装饰器(property)造成的一个无限递归问题分享
Jul 09 Python
详解Python的Django框架中的中间件
Jul 24 Python
python实现文本文件合并
Dec 29 Python
node.js获取参数的常用方法(总结)
May 29 Python
python基础教程项目二之画幅好画
Apr 02 Python
python地震数据可视化详解
Jun 18 Python
python PyAutoGUI 模拟鼠标键盘操作和截屏功能
Aug 04 Python
Django实现WebSSH操作物理机或虚拟机的方法
Nov 06 Python
PyCharm 2019.3发布增加了新功能一览
Dec 08 Python
python实现简单学生信息管理系统
Apr 09 Python
Python实现计算图像RGB均值方式
Jun 04 Python
Python实现拼音转换
Jun 07 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 preg_match_all结合str_replace替换内容中所有img
2008/10/11 PHP
ExtJS与PHP、MySQL实现存储的方法
2010/04/02 PHP
php检测图片木马多进制编程实践
2013/04/11 PHP
php判断是否为ajax请求的方法
2016/11/29 PHP
延时重复执行函数 lLoopRun.js
2007/05/08 Javascript
JavaScript 笔记二 Array和Date对象方法
2010/05/22 Javascript
一步一步制作jquery插件Tabs实现过程
2010/07/06 Javascript
jquery对象和javascript对象即DOM对象相互转换
2014/08/07 Javascript
javascript类型系统 Array对象学习笔记
2016/01/09 Javascript
pm2 部署 node的三种方法示例
2017/10/20 Javascript
js设置随机切换背景图片的简单实例
2017/11/12 Javascript
jquery 输入框查找关键字并提亮颜色的实例代码
2018/01/23 jQuery
使用webpack编译es6代码的方法步骤
2019/04/28 Javascript
使用uni-app开发微信小程序的实现
2019/12/13 Javascript
Vue 监听元素前后变化值实例
2020/07/29 Javascript
常用python数据类型转换函数总结
2014/03/11 Python
python数字图像处理之高级形态学处理
2018/04/27 Python
python 利用for循环 保存多个图像或者文件的实例
2018/11/09 Python
python 3.6.7实现端口扫描器
2019/09/04 Python
在 Python 中接管键盘中断信号的实现方法
2020/02/04 Python
openCV提取图像中的矩形区域
2020/07/21 Python
CSS3——齿轮转动关键代码
2013/05/02 HTML / CSS
台湾前三大B2C购物网站:MOMO购物网
2017/04/27 全球购物
美国眼镜网:GlassesUSA
2017/09/07 全球购物
金牌葡萄酒俱乐部:Gold Medal Wine Club
2017/11/02 全球购物
测绘工程本科生求职信
2013/10/10 职场文书
护理毕业生自荐信范文
2013/12/22 职场文书
中药专业自荐信范文
2014/03/18 职场文书
爱情保证书大全
2014/04/29 职场文书
美术专业自荐信
2014/07/07 职场文书
大学生国庆节65周年演讲稿范文
2014/09/25 职场文书
篮球赛闭幕式主持词
2015/07/03 职场文书
感恩教师节主题班会
2015/08/12 职场文书
2019年冬至:天冷暖人心的问候祝福语大全
2019/12/20 职场文书
javascript对象3个属性特征
2021/11/17 Javascript
Vue 打包后相对路径的引用问题
2022/06/05 Vue.js