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最基本的操作字典的方法
Apr 24 Python
Python冒泡排序注意要点实例详解
Sep 09 Python
Python编程实现数学运算求一元二次方程的实根算法示例
Apr 02 Python
Python实现判断给定列表是否有重复元素的方法
Apr 11 Python
python利用ffmpeg进行录制屏幕的方法
Jan 10 Python
Python实现数据结构线性链表(单链表)算法示例
May 04 Python
关于Python内存分配时的小秘密分享
Sep 05 Python
python实现超市商品销售管理系统
Oct 25 Python
Python多继承以及MRO顺序的使用
Nov 11 Python
python实现从wind导入数据
Dec 03 Python
pyenv虚拟环境管理python多版本和软件库的方法
Dec 26 Python
Python Pillow(PIL)库的用法详解
Sep 19 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 CURL模拟登录新浪微博抓取页面内容 基于EaglePHP框架开发
2012/01/16 PHP
PHP实现根据数组某个键值大小进行排序的方法
2018/03/13 PHP
jQuery EasyUI API 中文文档 - NumberBox数字框
2011/10/13 Javascript
jquery幻灯片插件bxslider样式改进实例
2014/10/15 Javascript
了不起的node.js读书笔记之例程分析
2014/12/22 Javascript
基于JavaScript实现仿京东图片轮播效果
2015/11/06 Javascript
浅析nodejs实现Websocket的数据接收与发送
2015/11/19 NodeJs
使用jQuery+EasyUI实现CheckBoxTree的级联选中特效
2015/12/06 Javascript
jQuery 3 中的新增功能汇总介绍
2016/06/12 Javascript
javascript使用递归算法求两个数字组合功能示例
2017/01/03 Javascript
详解通过JSON数据使用VUE.JS
2017/05/26 Javascript
详解Vue-cli webpack移动端自动化构建rem问题
2018/04/07 Javascript
Vue页面跳转动画效果的实现方法
2018/09/23 Javascript
利用Bootstrap Multiselect实现下拉框多选功能
2019/04/08 Javascript
elementUI select组件value值注意事项详解
2019/05/29 Javascript
浅谈vue 二级路由嵌套和二级路由高亮问题
2020/08/06 Javascript
Nest.js 授权验证的方法示例
2021/02/22 Javascript
[45:32]Liquid vs LGD 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
[01:05:07]DOTA2-DPC中国联赛 正赛 DLG vs Dragon BO3 第一场2月1日
2021/03/11 DOTA
Python安装Numpy和matplotlib的方法(推荐)
2017/11/02 Python
PyQt5每天必学之像素图控件QPixmap
2018/04/19 Python
对python产生随机的二维数组实例详解
2018/12/13 Python
python使用for循环计算0-100的整数的和方法
2019/02/01 Python
12个步骤教你理解Python装饰器
2019/07/01 Python
简单了解python元组tuple相关原理
2019/12/02 Python
python数据库编程 ODBC方式实现通讯录
2020/03/27 Python
100%植物性、有机、即食餐:Sakara Life
2018/10/25 全球购物
迪卡侬中国官网:Decathlon中国
2020/08/10 全球购物
财务工作个人求职的自我评价
2013/12/19 职场文书
初中地理教学反思
2014/01/11 职场文书
《音乐之都维也纳》教学反思
2014/04/16 职场文书
温馨提示标语
2014/06/26 职场文书
电子工程求职信
2014/07/17 职场文书
大学奖学金获奖感言
2014/08/15 职场文书
2014年十一国庆节爱国演讲稿
2014/09/23 职场文书
婚礼伴郎致辞
2015/07/28 职场文书