邮件发送
每次自动化测试需要一定的时间,时间却又不固定,所以不知道什么时候完成了,什么时候还没跑完,那么就需要一个东西来提醒我们已经运行完了,快点去看测试结果,至于提醒的方式是怎么样的,可以根据自己的情况来看,发邮件呢还是发短信呢还是call电话呢,还是微信或者钉钉呢,都可以,不过普遍是邮件吧,邮件还可以带附件信息,所以更方便,承载的信息更多
其实可以再申请一个公司的AutoTest的邮箱号,但是难得麻烦了,所以用的另外一个qq号的邮箱来做为发送邮箱号,为了不显示出了我的qq号码,所以在qq邮箱中设置申请一个工作的邮箱名,这样就不是"号码@qq.com"这种格式了,变成了foxmail的邮箱号了
邮箱在第三方登录的时候,密码使用的都是授权码,所以我们开通各种服务,生成一个授权码
测试完成后,会生成一个测试报告,这测试报告中包含了,失败成功用例名,总数,成功数,失败数,日志等详细信息,我需要把报告中的这些信息全部提取出来,然后自己组装成邮件发送的内容信息,测试报告是html的,所以信息的提取也可以使用之前说的xpath的方式来提取,我使用的是re来直接匹配信息,然后加上各种换行符和tab符,组成一串信息来发送
def read_result(report):
try:
result = []
with open('C:\Auto-Test\Report\\%s' % report,'r',encoding='utf-8') as f:
data = f.read()
top_info = re.findall(r'(?:"testAll":\s)(\d{1,4})|"testFail":\s(\d{1,4})|"testPass":\s(\d{1,4})|"beginTime":\s"(\d{4}-\d{2}-\d{2}\s*\d{2}:\d{2}:\d{2})"|"totalTime":\s"(\d{1,4})s"',data)
name_info = re.findall(r'"description": "(.*)"',data)
result_info = re.findall(r'"status": "(.*)"',data)
info = list(zip(name_info,result_info))
for i in top_info:
for t in i:
if t!='':
result.append(t)
email_info = '测试已完成,简要如下:\n\t用例总数:%s\n\t成功数:%s\n\t失败数:%s\n\t开始时间:%s\n\t总耗时:%s秒\n\t成功率:%f\n\t失败率:%f\n\n失败如下:'%(result[1],result[0],result[2],result[3],result[4],float(result[0])/float(result[1])*100,float(result[2])/float(result[1])*100)
index = 1
for i in info:
if i[1]=='失败':
email_info = email_info + '\n\t(%d).%s\t\t'