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 ...
随机推荐
- Golang 高效实践之defer、panic、recover实践
前言 我们知道Golang处理异常是用error返回的方式,然后调用方根据error的值走不同的处理逻辑.但是,如果程序触发其他的严重异常,比如说数组越界,程序就要直接崩溃.Golang有没有一种异常 ...
- vue-cli3.x中使用axios发送请求,配合webpack中的devServer编写本地mock数据接口(get/post/put/delete)
vue-cli3.x中使用axios发送请求,配合webpack中的devServer编写本地mock数据接口(get/post/put/delete) 手把手式笔记 Axios配置 安装 axios ...
- 使用 Spring Framework 时常犯的十大错误
Spring 可以说是最流行的 Java 框架之一,也是一只需要驯服的强大野兽.虽然它的基本概念相当容易掌握,但成为一名强大的 Spring 开发者仍需要很多时间和努力. 在本文中,我们将介绍 Spr ...
- Http接口调用示例教程
介绍HttpClient库的使用前,先介绍jdk里HttpURLConnection,因为HttpClient是开源的第三方库,使用方便,不过jdk里的都是比较基本的,有时候没有HttpClient的 ...
- Linux vi/vim使用
vi/vim 基本使用方法 vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令. 1.vi的基本概念 基本上vi ...
- 15款好用超赞的chrome插件, 开发者们的必备~
今天推荐一波Chrome插件干货.这些插件带给我开发效率上的提升.所以在这里整理一下,分享给朋友们. 作为一名程序开发者,推荐一波常用的chrome插件,用了就舍不得丢,包括免费FQ工具,github ...
- Vue事件修饰符详解
整体学习Vue时看到Vue文档中有事件修饰符的描述,但是看了之后并没有理解是什么意思,于是查阅了资料,现在记录下来与大家分享 先给大家画一个示意图理解一下冒泡和捕获 (1) .stop修饰符 请看如下 ...
- python 接口测试环境准备
1.之前用python做appium测试,今天想要尝试下做接口测试 发现在pycharm下,import requests总是报错 : no model named requests 联想到应该是没 ...
- Hive映射HBase表的几种方式
1.Hive内部表,语句如下 CREATE TABLE ods.s01_buyer_calllogs_info_ts( key string comment "hbase rowkey&qu ...
- JavaSE(一)Java程序的三个基本规则-组织形式,编译运行,命名规则
一.Java程序的组织形式 Java程序是一种纯粹的面向对象的程序设计语言,因此Java程序必须以类(class)的形式存在,类(class)是Java程序的最小程序单位. J ...