Python测试环境巡检工具

来源:互联网 发布:洛阳市博物馆 知乎 编辑:程序博客网 时间:2024/06/09 20:57

Python测试环境巡检

测试过程中,由于测试环境机器较多且全都是在虚拟机上做的,经常会有某些机器挂掉导致站点访问出错的问题,手动去一个一个Ping实在是麻烦,于是用Python写了一个小脚本,来批量Ping测试。
实现思路:

一、设计要求:

1.目标机器的IP可配置
2.可以一次性Ping多台机器
3.Ping测试的结果可查询
4.如果有Ping不通的机器,可以主动邮件通知

二、设计思路:

1.将需要测试的IP放在一个Txt文本文件中,所有目标机器的IP手动维护在这个文件中
2.将Ping测试的结果放在一个Txt文件中,包括IP,测试结果等
3.主程序要实现,Ping测试和邮件发送两个主要方法

三、代码实现:

1.新建一个Ping文件夹,该文件目录下创建一个host.txt文件,用来维护待测IP
2.新建ping.py,代码如下:
import osimport sendMaildef getIpStatus():    hasFail = False    try:        Host = open("host.txt", "r")                Result = open("result.txt", "w")        Result.write("测试环境巡检结果:\n")        for line in Host.readlines():            line = line.strip("\n")            if "#" in line:                Result.write(line +"\n")            else:                res = os.system("ping " + line)                if res == 0:                    print(line +" 可用...")                    Result.write(line + " 可用...\n")                else:                    print(line +" 不可用...")                    Result.write(line + " 不可用...\n")                    hasFail = True        Host.close()        Result.close()    except:        print("Host文件读取失败...")    if hasFail:        print("有机器无法ping通!")        return (True)if __name__ == '__main__':    if getIpStatus():        sendMail.sendMail()        
3.新建sendMail.py实现邮件发送功能
import smtplibfrom email.mime.text import MIMETextfrom email.mime.multipart import MIMEMultipartfrom email.header import Headerdef sendMail():    mail_host="******"  #设置邮件服务器    mail_user="******"    #用户名    mail_pass="******"   #口令     sender = '******'   #发送邮件的邮箱    receivers = [******]  # 接收邮件的邮箱,可设置为你的QQ邮箱或者其他邮箱,多个邮箱用,分隔开来#创建一个带附件的实例    message = MIMEMultipart()    message['From'] = "******"  #邮件发送人    message['To'] =  "******"   #邮件接收人    subject = '测试环境巡检结果'  #邮件主题    message['Subject'] = Header(subject, 'utf-8')   #邮件正文内容    message.attach(MIMEText('测试环境巡检有机器未能ping通,详细结果见附件……', 'plain', 'utf-8'))# 构造附件1,传送附件文件    att1 = MIMEText(open("result.txt", 'rb').read(), 'base64', 'utf-8')    att1["Content-Type"] = 'application/octet-stream'# 这里的filename可以任意写,写什么名字,邮件中显示什么名字    att1["Content-Disposition"] = 'attachment; filename="Result.txt"'    message.attach(att1)    try:        smtpObj = smtplib.SMTP()         smtpObj.connect(mail_host, 25)    # 25 为 SMTP 端口号        smtpObj.login(mail_user,mail_pass)          smtpObj.sendmail(sender, receivers, message.as_string())        print ("邮件发送成功")    except smtplib.SMTPException:        print ("Error: 无法发送邮件")
4.运行结果截图:
5.注意事项:
5.1Windows系统和Linux系统对于换行符的规定不一样,按照换行符进行切割的时候,需要特殊处理
5.2 Linux中中文编码需要特殊处理,具体方法是在中文字符前加“U”
5.3 os.system-ping方法返回的是Ping命令是否有运行结果,对于本来就不存在的IP,也会有返回值,所以结果可能也是通的,需要注意。如果要兼容这个问题,可以使用正则匹配命令返回内容的方法进行处理,我这里是知道具体的机器IP的,所以处理相对简单
5.4 邮件服务器的配置,可上对应邮件提供商网站查询
Done!


0 0
原创粉丝点击