python使用json做配置_使用Python替换应用json格式配置文件

在自动化测试过程中,经常需要修改应用或者Demo的配置文件,为了能尽可能减少人工的操作,将需要修改的配置参数,提取出来,组织成json格式的文件,使用Python脚本,在配置参数中逐个解析参数文件,进行参数的替换。

实现思路:

1.提取需要修改的参数组织成 {replaceKey:{Key:value,key2:value2}}json格式

2.通过Python,解析提取参数,逐个在配置文件中替换;

3.将替换后的配置文件内容重新写会配置文件;

具体代码如下:

#!/usr/bin/python

# -*- coding: utf-8 -*-

import json

import os,sys

#-------------------------------

#Name:JsonConfigRplace.py

#Function:修改json 类型配置文件中指定Key 的Value

#param1:源配置文件

#从指定的配置文件中获取需要更新的Key-Value值

#如果repJsonKey存在嵌套需使用Jsonpath表达

def GetReplaceKeyVal(repJsonFile,repJsonKey):

spictKey=repJsonKey.split(".")

repKeyVal={}

try:

repJsonStr = json.loads(open(repJsonFile, "r").read())

for keyname in spictKey:

repKeyVal = repJsonStr[keyname]

repJsonStr=repKeyVal

except Exception as e:

print("目标值文件为非法json格式%s",e.message)

return repKeyVal

#更新配置文件中需要修改的json配置文件的Key 和Val

def SetReplaceKeyVal(configJson,replaceKey,replaceVal):

#解析配置文件,设置新值

if isinstance(configJson,dict):

for configKey in configJson:

#如果是配置文件

if configKey == replaceKey:

configJson[configKey] = replaceVal

elif isinstance(configJson[configKey],dict):

SetReplaceKeyVal(configJson[configKey],replaceKey,replaceVal)

#如果是list,则进行list递归

elif isinstance(configJson[configKey],list):

for item in configJson[configKey]:

if isinstance(item,dict):

SetReplaceKeyVal(item, replaceKey, replaceVal)

elif isinstance(configJson,list):

for item2 in configJson:

if isinstance(configJson[item2], dict):

SetReplaceKeyVal(configJson[item2], replaceKey, replaceVal)

#返回修改后的Json值

return configJson

#写文件

def JsonFileStore(jsonFileName,josnStr):

with open(jsonFileName, 'w') as f:

f.write(json.dumps(josnStr,indent=4))

#解析参数文件

def GetReplaceKeyPathVal(conFigJson,jsonKeyValue):

#print(jsonKeyValue)

midJsonTmp={}

#print("Hello")

try:

for key in jsonKeyValue:

if isinstance(jsonKeyValue[key],dict):

GetReplaceKeyPathVal(conFigJson,jsonKeyValue[key])

elif isinstance(jsonKeyValue[key],list):

for item in jsonKeyValue[key]:

if isinstance(item,dict):

GetReplaceKeyPathVal(conFigJson,item)

else:

midJsonTmp=SetReplaceKeyVal(conFigJson,key,jsonKeyValue[key])

conFigJson=midJsonTmp

#print(key)

#print(jsonKeyValue[key])

return conFigJson

except Exception as e:

print("解析Json参数错误GetReplaceKeyPathVal%s", e.message)

#return repKeyVal

#main 方法

#------------------------------------------

#param1-需要修改的配置文件名称;

#param2-保存目标修改值的Json文件名称;

#param3-目标Json值的Key名称,可以使用jsonPath路径格式(eg:"envinfo.monitorData")

#------------------------------------------

if __name__ == "__main__":

#参数接收

avg_len = len(sys.argv)

if avg_len == 4:

config_path = sys.argv[1]

env_config_path = sys.argv[2]

modifyKey = sys.argv[3]

#检查保存新参数文件是否存在

if os.path.isfile(env_config_path):

#通过参数传递env_info,和配置Key,和需要更新的配置文件;

getKeyval = GetReplaceKeyVal(env_config_path, modifyKey)

#print(getKeyval)

#打开配置文件,并lodas

if os.path.isfile(config_path):

if getKeyval:

try:

configJson = json.loads(open(config_path, 'r').read())

#中间结果保存变量

configMidValue={}

#逐个修改参数

configMidValue=GetReplaceKeyPathVal(configJson,getKeyval)

#重写配置文件

JsonFileStore(config_path, configMidValue)

except Exception as e:

print("目标配置文件为非法JSON格式%s",e.message)

else:

print("没有找到需要修改的的参数")

else:

print("目标配置文件不存在,请检查路径或文件名称")

else:

print("保存新参数配置文件不存在,请检查路径或文件名称")

else:

print("没有指定配置文件,参数文件,Keyname")

print("例如:python ./JsonConfigRplace.py" "/usr/config/config.json",

"/TSB/API/config/env_info.json", "envinfo.monitorData")

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值