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接收多播数据的代码
Mar 01 Python
Python中apply函数的用法实例教程
Jul 31 Python
Python的Twisted框架上手前所必须了解的异步编程思想
May 25 Python
离线安装Pyecharts的步骤以及依赖包流程
Apr 23 Python
基于python3 OpenCV3实现静态图片人脸识别
May 25 Python
python opencv实现运动检测
Jul 10 Python
使用matplotlib中scatter方法画散点图
Mar 19 Python
python 判断三个数字中的最大值实例代码
Jul 24 Python
python excel转换csv代码实例
Aug 26 Python
Python3列表List入门知识附实例
Feb 09 Python
Anconda环境下Vscode安装Python的方法详解
Mar 29 Python
解决numpy和torch数据类型转化的问题
May 23 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连接oracle数据库及查询数据的方法
2014/12/29 PHP
PHP实现十进制数字与二十六进制字母串相互转换操作示例
2018/08/10 PHP
PHP 8新特性简介
2020/08/18 PHP
XMLHTTPRequest的属性和方法简介
2010/11/23 Javascript
拉动滚动条加载数据的jquery代码
2012/05/03 Javascript
JavaScript基础语法让人疑惑的地方小结
2012/05/23 Javascript
JavaScript之引用类型介绍
2012/08/10 Javascript
JS.getTextContent(element,preformatted)使用介绍
2013/09/21 Javascript
超赞的jQuery图片滑块动画特效代码汇总
2016/01/25 Javascript
使用bootstrap typeahead插件实现输入框自动补全之问题及解决办法
2016/07/07 Javascript
js实现界面向原生界面发消息并跳转功能
2016/11/22 Javascript
Bootstrap组件之下拉菜单,多级菜单及按钮布局方法实例
2017/05/25 Javascript
详解vue服务端渲染(SSR)初探
2017/06/19 Javascript
JQuery和html+css实现带小圆点和左右按钮的轮播图实例
2017/07/22 jQuery
vue实现手机号码抽奖上下滚动动画示例
2017/10/18 Javascript
微信小程序之分享页面如何返回首页的示例
2018/03/28 Javascript
Django+Vue跨域环境配置详解
2018/07/06 Javascript
vue.js路由mode配置之去掉url上默认的#方法
2019/11/01 Javascript
微信小程序实现时间进度条功能
2020/11/17 Javascript
python中遍历文件的3个方法
2014/09/02 Python
python执行shell获取硬件参数写入mysql的方法
2014/12/29 Python
Python多线程编程(二):启动线程的两种方法
2015/04/05 Python
对python打乱数据集中X,y标签对的方法详解
2018/12/14 Python
对python当中不在本路径的py文件的引用详解
2018/12/15 Python
pycharm实现在虚拟环境中引入别人的项目
2020/03/09 Python
python实现IOU计算案例
2020/04/12 Python
python语音识别指南终极版(有这一篇足矣)
2020/09/09 Python
Python threading模块condition原理及运行流程详解
2020/10/05 Python
CSS3教程(1):什么是CSS3
2009/04/02 HTML / CSS
浅析HTML5中的 History 模式
2017/06/22 HTML / CSS
eHarmony英国:全球领先的认真恋爱约会平台之一
2020/11/16 全球购物
毕业生个人的求职信范文
2013/12/03 职场文书
后勤主管工作职责
2013/12/07 职场文书
幼儿园教师求职信
2015/03/20 职场文书
大学生入党自传2015
2015/06/26 职场文书
Nginx HTTP跳转至HTTPS
2022/05/15 Servers