python+jinja2实现接口数据批量生成工具
在做接口测试的时候,我们经常会遇到一种情况就是要对接口的参数进行各种可能的校验,手动修改很麻烦,尤其是那些接口参数有几十个甚至更多的,有没有一种方法可以批量的对指定参数做生成处理呢。
答案是肯定的!
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)
运行程序,就能得到新生成的数据

当然,我们也可以对其他的参数进行指定修改,如修改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实现接口数据批量生成工具的更多相关文章
- 将表里的数据批量生成INSERT语句的存储过程 增强版
将表里的数据批量生成INSERT语句的存储过程 增强版 有时候,我们需要将某个表里的数据全部或者根据查询条件导出来,迁移到另一个相同结构的库中 目前SQL Server里面是没有相关的工具根据查询条件 ...
- 将表里的数据批量生成INSERT语句的存储过程 继续增强版
文章继续 桦仔兄的文章 将表里的数据批量生成INSERT语句的存储过程 增强版 继续增强... 本来打算将该内容回复于桦仔兄的文章的下面的,但是不知为何博客园就是不让提交!.... 所以在这里贴出来吧 ...
- 一款对Postman支持较好的接口文档生成工具
最近要编写接口文档给测试和前端看,通过网上查阅资料,也认识了很多款接口文档生成工具,比如易文档.ApiPost.ShowDoc.YApi.EoLinker.DOClever.apizza等,通过对这几 ...
- 开源 Web 相册程序: Photoview 和数据可视化生成工具:Datawrapper
Photoview Photoview是一个开源 Web 相册程序,Go 语言写的,使用 Docker 安装,可以用来快速架设个人相册. github地址:https://github.com/pho ...
- 分享一款一直在维护的【网络开发运维|通用调试工具】: http请求, websocket,cmd, RSA,DES, 参数签名工具,脚本批量生成工具,google动态口令,端口检测,组件注册,js混淆...
首先发下下载地址:https://files.cnblogs.com/files/taohuadaozhu/ConfigLab.Test.ex.rar 日常开发,运维,跨部门跨公司对接中. 想快速调 ...
- 将表里的数据批量生成INSERT语句的存储过程
有时候,我们需要将某个表里的数据全部导出来,迁移到另一个相同结构的库中,这里可以采取一个简便的方法,通过一个存储过程批量导出数据并生成SQL语句,非常方便.存储过程如下: )) as begin de ...
- php markdown 接口文档生成工具 SummerDoc
2017年9月18日 19:20:22 星期一 因工作需要, 用PHP写了一个管理接口文档的小工具, 下边介绍一下: 浏览器展示的效果: 项目地址:(码云) 例子(http://doc.hearu.t ...
- 用python爬取微博数据并生成词云
很早之前写过一篇怎么利用微博数据制作词云图片出来,之前的写得不完整,而且只能使用自己的数据,现在重新整理了一下,任何的微博数据都可以制作出来,放在今天应该比较应景. 一年一度的虐汪节,是继续蹲在角落默 ...
- python处理点云数据并生成三维点云模型
1.python代码: 1 import numpy as np 2 import matplotlib.pyplot as plt 3 from mpl_toolkits.mplot3d impor ...
随机推荐
- [小米OJ] 6. 交叉队列
思路: 大概思想如下: 1. 动态规划求解,构造dp[][] 二维数组: 2. 设dp[i][j], i 为 第一个字符串的第i个字母:j 为 第二个字符串的第j个字母 3. dp[i][j] 如果 ...
- Java 基础知识面试题
equals与==有什么区别? (1)==是判断两个变量或实例是不是指向同一个内存空间 (2)equals是判断两个变量或实例所指向的内存空间的值是不是相同 Object有哪些公用方法? (1)equ ...
- 小白学python-day04-作业-九九乘法表相关
作业内容: 作业一: 作业二: 作业三: (1) (2) \n换行 \t制表符 end="" 代表打印不换行,双引号里面可以在结果之间加字符. print() 代表换行打印,使用时 ...
- 转 java - java反射机制创建对象
转 https://blog.csdn.net/nch_ren/article/details/78814080 1.创建service实现类 package com.springstudy.refl ...
- PIVOT内置函数实现行转列
PIVOT用于将列值旋转为列名(即行转列),PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (…) )AS P 完整语法: table_source PIVOT( 聚合函数(va ...
- jQuery的核心思想
jQuery?----www.jQuery.com jQuery的理念:write less, do more jQuery的成就:世界排名前100的公司,46%都在使用jQuery,远远超过其他库, ...
- [ PyQt入门教程 ] PyQt5信号与槽
信号和槽是PyQt编程对象之间进行通信的机制.每个继承自QWideget的控件都支持信号与槽机制.信号发射时(发送请求),连接的槽函数就会自动执行(针对请求进行处理).本文主要讲述信号和槽最基本.最经 ...
- Linux中更新firefox
从官网下载Firefox压缩包放在/usr/lib/目录下(应用程序一般都在这个文件夹下) tar jxfv [压缩包名] 解压得到文件夹firefox在解压得到的firefox文件夹中有一个fir ...
- java的jar打包工具的使用
java的jar打包工具的使用 java的jar是一个打包工具,用于将我们编译后的class文件打包起来,这里面主要是举一个例子用来说明这个工具的使用. 在C盘下的temp文件夹下面: ...
- Tomcat+MySQL常见调优参数
一.Tomcat 调优 (一).Tomcat内存优化 参数一: vim /tomcat/bin/catalina.sh CATALINA_OPTS="-server -Xms128m -Xm ...