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 29 Python
Python+Selenium+PIL+Tesseract自动识别验证码进行一键登录
Sep 20 Python
Python实现正弦信号的时域波形和频谱图示例【基于matplotlib】
May 04 Python
Python 2.7中文显示与处理方法
Jul 16 Python
django项目搭建与Session使用详解
Oct 10 Python
Python设计模式之解释器模式原理与用法实例分析
Jan 10 Python
Python3的高阶函数map,reduce,filter的示例详解
Jul 23 Python
解决Djang2.0.1中的reverse导入失败的问题
Aug 16 Python
Python安装及Pycharm安装使用教程图解
Sep 20 Python
详解pandas绘制矩阵散点图(scatter_matrix)的方法
Apr 23 Python
详解Pycharm安装及Django安装配置指南
Sep 15 Python
Python利器openpyxl之操作excel表格
Apr 17 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入门
2006/10/09 PHP
windows xp下安装pear
2006/12/02 PHP
一些 PHP 管理系统程序中的后门
2009/08/05 PHP
innerhtml用法 innertext用法 以及innerHTML与innertext的区别
2009/10/26 Javascript
JavaScript 原型继承之构造函数继承
2011/08/26 Javascript
jQuery表单验证插件formValidator(改进版)
2012/02/03 Javascript
了解jQuery技巧来提高你的代码(个人觉得那个jquery的手册很不错)
2012/02/10 Javascript
如何使Chrome控制台支持多行js模式——意外发现
2013/06/13 Javascript
jquery datatable后台封装数据示例代码
2014/08/07 Javascript
JavaScript生成福利彩票双色球号码
2015/05/15 Javascript
Node.js与Sails ~项目结构与Mvc实现及日志机制
2015/10/14 Javascript
Javascript实现图片懒加载插件的方法
2016/10/20 Javascript
JS 实现 ajax 异步浏览器兼容问题
2017/01/21 Javascript
利用Vue.js框架实现火车票查询系统(附源码)
2017/02/27 Javascript
微信小程序url与token设置详解
2017/09/26 Javascript
jQuery实现点击DIV同时点击CheckBox,并为DIV上背景色的实例
2017/12/18 jQuery
微信小程序中添加客服按钮contact-button功能
2018/04/27 Javascript
自定义Vue中的v-module双向绑定的实现
2019/04/17 Javascript
实用Javascript调试技巧分享(小结)
2019/06/18 Javascript
前后端常见的几种鉴权方式(小结)
2019/08/04 Javascript
javascript实现抢购倒计时程序
2019/08/26 Javascript
JS Ajax请求会话过期处理问题解决方法分析
2019/11/16 Javascript
antd配置config-overrides.js文件的操作
2020/10/31 Javascript
如何在vue中使用kindeditor富文本编辑器
2020/12/19 Vue.js
[54:53]完美世界DOTA2联赛PWL S2 GXR vs PXG 第二场 11.18
2020/11/18 DOTA
在Python中使用PIL模块处理图像的教程
2015/04/29 Python
详解Python3中的迭代器和生成器及其区别
2018/10/09 Python
使用python Fabric动态修改远程机器hosts的方法
2018/10/26 Python
Python3模拟登录操作实例分析
2019/03/12 Python
python中 * 的用法详解
2019/07/10 Python
Python中操作各种多媒体,视频、音频到图片的代码详解
2020/06/04 Python
使用索引(Index)有哪些需要考虑的因素
2016/10/19 面试题
教导处工作制度
2014/01/18 职场文书
安全协议书
2014/04/23 职场文书
安全教育培训制度
2015/08/06 职场文书
聘用合同范本
2015/09/21 职场文书