ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-10-21 18:33:15  阅读:140  来源: 互联网

标签:None 相同 差异 alldict pk print diff border str1


Step1:分享背景

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

 

Step2:Python代码实现

  1 import os
  2 from email.mime.multipart import MIMEMultipart
  3 from email.mime.text import MIMEText
  4 import smtplib
  5  
  6 #指定java工程目录
  7 dirpath="D:\java_project\entitystorage"
  8 emails='loadkernel@126.com'
  9  
 10 alldict={}
 11  
 12 #获取所有文件里的key and value
 13 def get_all_property(dirpath,env):
 14     for root, dirs, files in os.walk(dirpath, topdown=False):
 15         for fn in files:
 16             fullpathfile=os.path.join(root, fn)
 17             if(env in fullpathfile and "properties" in fullpathfile):
 18                 with open(fullpathfile,'r',encoding='utf-8') as ff:
 19                     print(ff)
 20                     for line in ff.readlines():
 21                         print(fullpathfile,line)
 22                         if(not line.startswith("#")):
 23                             line=line.replace("\n","")
 24                             if(len(line)>1):
 25                                 if("=" in line):
 26                                     kv=line.split("=")
 27                                     get_all_properties(env, kv[0], kv[1])
 28                                 else:
 29                                     print("the "+str(fullpathfile) +"has an error!!!")
 30  
 31 #将获取的key and value 内容放入字典
 32 def get_all_properties(env,k,v):
 33     if(env not in alldict.keys()):
 34         alldict[env] = {}
 35         alldict[env][k]=v
 36     else:
 37         alldict[env][k]=v
 38  
 39 #在页面上展示不同环境的key 对应的值
 40 def show_data_to_page(betadict,stagingdict,uatdict,proddict):
 41     count=0
 42     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>';
 43     str1 = str1 + '<body>'
 44     str1 = str1 + ' <table class="gridtable">'
 45     str1 = str1 + ' <tr> <th>key</th> <th>beta</th> <th>staging</th> <th>uat</th> <th>prod</th> <tr/> '
 46  
 47     sorted_prod=sorted(proddict['prod'].items(), key=lambda d: d[0])
 48     for pk,pv in sorted_prod:
 49         count+=1
 50         print(count,pk,pv)
 51         if(pk in betadict['betamagic'].keys()):
 52             try:
 53                 if(len(betadict['betamagic'][pk])>0):
 54                     bv=betadict['betamagic'][pk]
 55                     if(str(pv).lower()==str(bv).lower()):
 56                         bv="<p style='color:blue'><B>"+bv+"</B>"
 57                 else:
 58                     bv = "None"
 59             except:
 60                 bv="None"
 61         else:
 62             bv="None"
 63  
 64         if (pk in stagingdict['staging'].keys()):
 65             try:
 66                 if (len(stagingdict['staging'][pk]) > 0):
 67                     sv = stagingdict['staging'][pk]
 68                     if (str(pv).lower() == str(sv).lower()):
 69                         sv = "<p style='color:blue'><B>" + sv + "</B>"
 70                 else:
 71                     sv = "None"
 72             except:
 73                 sv = "None"
 74         else:
 75             sv = "None"
 76  
 77         if (pk in uatdict['uat'].keys()):
 78             try:
 79                 if (len(uatdict['uat'][pk]) > 0):
 80                     uv = uatdict['uat'][pk]
 81                     if (str(pv).lower() == str(uv).lower()):
 82                         uv = "<p style='color:blue'><B>" + uv + "</B>"
 83                 else:
 84                     uv = "None"
 85             except:
 86                 uv = "None"
 87         else:
 88             uv = "None"
 89  
 90         str1+='<tr> <td>' + str(count)+" . "+ pk + '</td> <td>' + bv + '</td> <td>' + sv + '</td> <td>' + uv + '</td> <td>' + pv + '</td> <tr/>'
 91  
 92     str1 = str1 + ' </table>'
 93     str1 = str1 + '</body> </html>'
 94     str1=str1.replace("None","<p style='color:green'><B>None</B>")
 95  
 96     send_mail(emails, 'diff the properties', str1)
 97  
 98 def send_mail(receivers, title, content):
 99     sender = 'qa.notice@126.com'
100     mailto = receivers.split(",")
101     try:
102         msg = MIMEMultipart()
103         msg['Subject'] = title
104         to_user = ",".join(mailto)
105  
106         print("receivers...", to_user)
107         msg['to'] = to_user
108         msg['From'] = sender
109  
110         body = MIMEText(content, _subtype='html', _charset='utf-8')
111         msg.attach(body)
112         smtp = smtplib.SMTP('smtp.officexxx.com', 587)
113         smtp.starttls()
114         print("sending")
115         smtp.login("qa.notice@126.com", "testkyjrsdxz")
116         smtp.sendmail(sender, mailto, msg.as_string())
117         print("send")
118         smtp.quit()
119     except smtplib.SMTPException as e:
120         print(e)
121  
122 if __name__ == '__main__':
123     get_all_property(dirpath,"betamagic")
124     betadict=alldict
125     print(betadict)
126     alldict={}
127     print("***")
128     get_all_property(dirpath,"staging")
129     stagingdict = alldict
130     print(stagingdict)
131     alldict = {}
132     get_all_property(dirpath,"uat")
133     uatdict = alldict
134     print(uatdict)
135     alldict = {}
136     get_all_property(dirpath,"prod")
137     proddict = alldict
138     print(proddict)
139  
140     show_data_to_page(betadict,stagingdict,uatdict,proddict)

 

Step3:邮件效果图展示

 

 

备注说明:

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

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

 

欢迎关注【无量测试之道】公众号,回复【领取资源】
Python编程学习资源干货、
Python+Appium框架APP的UI自动化、
Python+Selenium框架Web的UI自动化、
Python+Unittest框架API自动化、
资源和代码 免费送啦~
文章下方有公众号二维码,可直接微信扫一扫关注即可。

备注:我的个人公众号已正式开通,致力于测试技术的分享,包含:大数据测试、功能测试,测试开发,API接口自动化、测试运维、UI自动化测试等,微信搜索公众号:“无量测试之道”,或扫描下方二维码:


添加关注,让我们一起共同成长!

 

标签:None,相同,差异,alldict,pk,print,diff,border,str1
来源: https://www.cnblogs.com/Wu13241454771/p/15434631.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有