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 ...
 
随机推荐
- pytest自定义动态添加描述信息
			
先上效果图: 修改pytest-html报告,分三部分. pytest执行目录新建conftest.py文件 import pytest from py._xmlgen import html fro ...
 - C#7.3 新增功能
			
连载目录 [已更新最新开发文章,点击查看详细] C# 7.3 版本有两个主要主题. 第一个主题提供使安全代码的性能与不安全代码的性能一样好的功能. 第二个主题提供对现有功能的增量改进. 此外,在 ...
 - DEDECMS教程:织梦栏目更新HTML出现“模板文件不存在,无法解析文档”的解决方法(转)
 - 【JDK】JDK源码分析-Collection
			
Java 集合框架(Java Collections Framework, JCF)包含很多平时开发中的常用类,例如 List.Set.ArrayList.HashMap.HashSet 等,因此打算 ...
 - Linux进程间通信——信号
			
一.认识信号 信号(Signals)是Unix.类Unix以及其他POSIX兼容的操作系统中进程间通讯的一种有限制的方式.它是一种异步的通知机制,用来提醒进程一个事件已经发生.当一个信号发送给一个进程 ...
 - MySQL-5.7.21非图形化下载、安装、连接问题记录
			
1.安装包下载链接:https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.21-winx64.zip 官网:https://www.mysql.co ...
 - Kalman Filter、Extended Kalman Filter以及Unscented Kalman Filter介绍
			
模型定义 如上图所示,卡尔曼滤波(Kalman Filter)的基本模型和隐马尔可夫模型类似,不同的是隐马尔科夫模型考虑离散的状态空间,而卡尔曼滤波的状态空间以及观测空间都是连续的,并且都属于高斯分布 ...
 - 跟着大彬读源码 - Redis 10 - 对象编码之整数集合
			
[TOC] 整数集合是 Redis 集合键的底层实现之一.当一个集合只包含整数值元素,并且元素数量不多时,Redis 就会使用整数集合作为集合键的底层实现. 1 整数集合的实现 整数集合是 Redis ...
 - 我的C语言学习1
			
学习是快乐的,尤其是从之前看到一个程序的一头雾水到大致懂了是怎么回事,这个过程是兴奋开心的,让我不断的前进,不能自拔,今天就要结束,总结一下. 1.1-第一个C语言 #include<stdio ...
 - 记几个 DOM 操作技巧
			
使用 attributes 属性遍历元素特性 // 迭代元素的每一个特性,将它们构造成 name = value 的字符串形式 function outputAttributes (element) ...