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使用cookie库操保存cookie详解
Mar 03 Python
简单解析Django框架中的表单验证
Jul 17 Python
Python中的模块导入和读取键盘输入的方法
Oct 16 Python
利用python发送和接收邮件
Sep 27 Python
使用Python中的tkinter模块作图的方法
Feb 07 Python
Python文件操作基本流程代码实例
Dec 11 Python
Python实现加载及解析properties配置文件的方法
Mar 29 Python
Pytorch实现神经网络的分类方式
Jan 08 Python
python3.9.1环境安装的方法(图文)
Feb 02 Python
python glom模块的使用简介
Apr 13 Python
Python实战之疫苗研发情况可视化
May 18 Python
Python 数据可视化之Matplotlib详解
Nov 02 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 正确解码javascript中通过escape编码后的字符
2010/01/28 PHP
使用php批量删除数据库下所有前缀为prefix_的表
2014/06/09 PHP
PHP生成唯一订单号
2015/07/05 PHP
Code:loadScript( )加载js的功能函数
2007/02/02 Javascript
JAVASCRIPT IE 与 FF中兼容问题小结
2009/02/18 Javascript
javascript学习笔记(十七) 检测浏览器插件代码
2012/06/20 Javascript
javascript window.confirm确认 取消对话框实现代码小结
2012/10/21 Javascript
给页面渲染时间加速 干掉Dom Level 0 Event
2012/12/19 Javascript
JavaScript包装对象使用介绍
2013/08/29 Javascript
jquery.cookie() 方法的使用(读取、写入、删除)
2013/12/05 Javascript
jQuery实现360°全景拖动展示
2015/03/18 Javascript
详解JavaScript对象和数组
2015/12/03 Javascript
js父页面中使用子页面的方法
2016/01/09 Javascript
jQuery使用contains过滤器实现精确匹配方法详解
2016/02/25 Javascript
jQuery实现摸拟alert提示框
2016/05/22 Javascript
Vue.js实现简单ToDoList 前期准备(一)
2016/12/01 Javascript
微信小程序实现点击效果
2019/06/21 Javascript
vue.js实现数据库的JSON数据输出渲染到html页面功能示例
2019/08/03 Javascript
JS回调函数 callback的理解与使用案例分析
2019/09/09 Javascript
axios 实现post请求时把对象obj数据转为formdata
2019/10/31 Javascript
[01:31:22]Ti4 循环赛第四日附加赛LGD vs Mouz
2014/07/13 DOTA
[01:17]炒鸡美酒第四天TA暴走
2018/06/05 DOTA
python线程、进程和协程详解
2016/07/19 Python
Python实现OpenCV的安装与使用示例
2018/03/30 Python
浅谈python在提示符下使用open打开文件失败的原因及解决方法
2018/11/30 Python
python3 enum模块的应用实例详解
2019/08/12 Python
Flask框架实现的前端RSA加密与后端Python解密功能详解
2019/08/13 Python
python实现百度OCR图片识别过程解析
2020/01/17 Python
Python 中Operator模块的使用
2021/01/30 Python
浅谈html5标签css3的常用样式
2016/10/20 HTML / CSS
美国床垫连锁店:Mattress Firm
2021/02/13 全球购物
会话Bean的种类
2013/11/07 面试题
初中三年毕业生的自我评价分享
2014/02/14 职场文书
共筑中国梦演讲稿
2014/04/23 职场文书
城市规划应届毕业生自荐信
2014/07/04 职场文书
在python中实现导入一个需要传参的模块
2021/05/12 Python