前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >不同环境相同配置项的内容如何diff差异?

不同环境相同配置项的内容如何diff差异?

作者头像
Wu_Candy
发布2022-07-04 21:26:44
发布2022-07-04 21:26:44
1.2K00
代码可运行
举报
文章被收录于专栏:无量测试之道无量测试之道
运行总次数:0
代码可运行

Step1:分享背景

在工作中,我们用到的环境经常会有很多套,由于不同的环境使用的配置是不一样的,那么怎么能够对比所有不同环境的相同配置项各是什么内容呢?

Step2:Python代码实现

代码语言:javascript
代码运行次数:0
复制
import os
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import smtplib

#指定java工程目录
dirpath="D:\java_project\entitystorage"
emails='loadkernel@126.com'

alldict={}

#获取所有文件里的key and value
def get_all_property(dirpath,env):
    for root, dirs, files in os.walk(dirpath, topdown=False):
        for fn in files:
            fullpathfile=os.path.join(root, fn)
            if(env in fullpathfile and "properties" in fullpathfile):
                with open(fullpathfile,'r',encoding='utf-8') as ff:
                    print(ff)
                    for line in ff.readlines():
                        print(fullpathfile,line)
                        if(not line.startswith("#")):
                            line=line.replace("\n","")
                            if(len(line)>1):
                                if("=" in line):
                                    kv=line.split("=")
                                    get_all_properties(env, kv[0], kv[1])
                                else:
                                    print("the "+str(fullpathfile) +"has an error!!!")

#将获取的key and value 内容放入字典
def get_all_properties(env,k,v):
    if(env not in alldict.keys()):
        alldict[env] = {}
        alldict[env][k]=v
    else:
        alldict[env][k]=v

#在页面上展示不同环境的key 对应的值
def show_data_to_page(betadict,stagingdict,uatdict,proddict):
    count=0
    str1 = '<!DOCTYPE html> <html> <meta charset="utf-8"> <head> <style type="text/css"> table.gridtable {font-family: verdana,arial,sans-serif; font-size:11px; color:#333333; border-width: 1px; border-color: #666666; border-collapse: collapse; } table.gridtable th {border-width: 1px; padding: 8px; border-style: solid; border-color: #666666; background-color: #dedede; } table.gridtable td {border-width: 1px; padding: 8px; border-style: solid; border-color: #666666; background-color: #ffffff; } </style> </head>';
    str1 = str1 + '<body>'
    str1 = str1 + ' <table class="gridtable">'
    str1 = str1 + ' <tr> <th>key</th> <th>beta</th> <th>staging</th> <th>uat</th> <th>prod</th> <tr/> '

    sorted_prod=sorted(proddict['prod'].items(), key=lambda d: d[0])
    for pk,pv in sorted_prod:
        count+=1
        print(count,pk,pv)
        if(pk in betadict['betamagic'].keys()):
            try:
                if(len(betadict['betamagic'][pk])>0):
                    bv=betadict['betamagic'][pk]
                    if(str(pv).lower()==str(bv).lower()):
                        bv="<p style='color:blue'><B>"+bv+"</B>"
                else:
                    bv = "None"
            except:
                bv="None"
        else:
            bv="None"

        if (pk in stagingdict['staging'].keys()):
            try:
                if (len(stagingdict['staging'][pk]) > 0):
                    sv = stagingdict['staging'][pk]
                    if (str(pv).lower() == str(sv).lower()):
                        sv = "<p style='color:blue'><B>" + sv + "</B>"
                else:
                    sv = "None"
            except:
                sv = "None"
        else:
            sv = "None"

        if (pk in uatdict['uat'].keys()):
            try:
                if (len(uatdict['uat'][pk]) > 0):
                    uv = uatdict['uat'][pk]
                    if (str(pv).lower() == str(uv).lower()):
                        uv = "<p style='color:blue'><B>" + uv + "</B>"
                else:
                    uv = "None"
            except:
                uv = "None"
        else:
            uv = "None"

        str1+='<tr> <td>' + str(count)+" . "+ pk + '</td> <td>' + bv + '</td> <td>' + sv + '</td> <td>' + uv + '</td> <td>' + pv + '</td> <tr/>'

    str1 = str1 + ' </table>'
    str1 = str1 + '</body> </html>'
    str1=str1.replace("None","<p style='color:green'><B>None</B>")

    send_mail(emails, 'diff the properties', str1)

def send_mail(receivers, title, content):
    sender = 'qa.notice@126.com'
    mailto = receivers.split(",")
    try:
        msg = MIMEMultipart()
        msg['Subject'] = title
        to_user = ",".join(mailto)

        print("receivers...", to_user)
        msg['to'] = to_user
        msg['From'] = sender

        body = MIMEText(content, _subtype='html', _charset='utf-8')
        msg.attach(body)
        smtp = smtplib.SMTP('smtp.officexxx.com', 587)
        smtp.starttls()
        print("sending")
        smtp.login("qa.notice@126.com", "testkyjrsdxz")
        smtp.sendmail(sender, mailto, msg.as_string())
        print("send")
        smtp.quit()
    except smtplib.SMTPException as e:
        print(e)

if __name__ == '__main__':
    get_all_property(dirpath,"betamagic")
    betadict=alldict
    print(betadict)
    alldict={}
    print("***")
    get_all_property(dirpath,"staging")
    stagingdict = alldict
    print(stagingdict)
    alldict = {}
    get_all_property(dirpath,"uat")
    uatdict = alldict
    print(uatdict)
    alldict = {}
    get_all_property(dirpath,"prod")
    proddict = alldict
    print(proddict)

    show_data_to_page(betadict,stagingdict,uatdict,proddict)

Step3:邮件效果图展示

备注说明:

1. 图中红色表示live环境有对应项,但是其他环境没有的。

2. 图中蓝色表示非live环境与live配置相同的。

end

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-09-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 无量测试之道 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档