python接口自动化(二十九)--html测试报告经过邮件发出去——上(详解)

简介

  前边几篇,已经教小伙伴们掌握了如何生成HTML的测试报告,那么生成测试报告,咱们也不能放在那里无论了,这样即便你报告在漂亮,领导也看不到。所以若是想向领导汇报工做,不只须要提供更直观的测试报告。而是咱们须要将生html

成测试报告发个相关的负责人,须要他们看一下测试结果,把控一下项目的接口有风险,会不会影响项目进度等等一些事吧。python

  发邮件须要用到python两个模块,smtplib和email,这俩模块是python自带的,只需import便可使用。smtplib模块主要负责发送邮件,email模块主要负责构造邮件。其中MIMEText()定义邮件正文,Header()定义邮件标题。MIMEMulipart模块构造带附件。数组

大体思路流程

一、经过unittest框架的discover()找到匹配的测试用例,由HTMLTestRunner的run()方法执行测试用例并生成最新的测试报告。服务器

二、调用new_report()函数找到测试报告目录下最新生成的测试报告,返回测试报告的路径。框架

三、将获得的最新测试报告的完整路径传给send_mail()函数,实现发邮件功能。函数

四、第一步,前边几篇,咱们都详细介绍了,因此这篇就不在赘述了,直接从第二步、第三步开始讲解。学习

查找最新测试报告 

 

定义发送邮件

一、查看一下,源码以下:测试

二、仿照源码进行改造ui

参考代码

# coding=utf-8 #1.先设置编码,utf-8可支持中英文,如上,通常放在第一行 #2.注释:包括记录建立时间,建立人,项目名称。 ''' Created on 2019-5-6 @author: 北京-宏哥 Project:学习和使用将测试报告经过邮件发出去 ''' #3.导入unittest模块 import unittest import os from email.mime.text import MIMEText from email.header import Header import smtplib #4.编写测试用例和断言 def all_case(): # 待执行用例的目录 #case_dir = "C:\\Users\\DELL\\PycharmProjects\\honggetest\\case" case_dir = os.path.join(os.getcwd(), "case") testcase = unittest.TestSuite() discover = unittest.defaultTestLoader.discover(case_dir, pattern="test*.py", top_level_dir=None) # #discover方法筛选出用例,循环添加到测试套件中 # for test_suit in discover: # for test_case in test_suit: # #添加用力到testcase # testcase.addTests(test_case) # print(testcase) testcase.addTests(discover) # 直接加载 discover 能够兼容python2和3 print(testcase) return testcase # ==============定义发送邮件========== def send_mail(file_new): f = open(file_new, 'rb') mail_body = f.read() f.close() username = 'nXXply@ceXXx.cn' #发件箱用户名 password = 'XXX@@123' #发件箱密码 sender = 'noXXy@ceXXx.cn' #发件人邮箱 receiver = ['hongge@XXX.cn'] #收件人邮箱 # 邮件正文是MIMEText msg = MIMEText(mail_body, 'html', 'utf-8') # 邮件对象 msg['Subject'] = Header("自动化测试报告", 'utf-8').encode() msg['From'] = Header(u'测试机 <%s>'%sender) msg['To'] = Header(u'测试负责人 <%s>'%receiver) msg['date'] = time.strftime("%a,%d %b %Y %H:%M:%S %z") #发送邮件 smtp = smtplib.SMTP() smtp.connect('smtp.mxhichina.com') # 邮箱服务器 smtp.login(username, password) # 登陆邮箱 smtp.sendmail(sender, receiver, msg.as_string()) # 发送者和接收者 smtp.quit() print("邮件已发出!注意查收。") # ======查找测试目录,找到最新生成的测试报告文件====== def new_report(test_report): lists = os.listdir(test_report) # 列出目录的下全部文件和文件夹保存到lists lists.sort(key=lambda fn: os.path.getmtime(test_report + "\\" + fn)) # 按时间排序 file_new = os.path.join(test_report, lists[-1]) # 获取最新的文件保存到file_new print(file_new) return file_new if __name__ == "__main__": # 返回实例 runner = unittest.TextTestRunner() #导入第三方模块HTMLTestRunner import HTMLTestReportCN import time # 获取当前时间,这样便于下面的使用。 now = time.strftime("%Y-%m-%M-%H_%M_%S", time.localtime(time.time())) #保存生成报告的路径 report_path =  "C:\\Users\\DELL\\PycharmProjects\\honggetest\\report\\"+now+"_result.html" fp = open(report_path,'wb') runner = HTMLTestReportCN.HTMLTestRunner(stream=fp, title=u"这是个人自动化测试用例", description=u"用例执行状况", verbosity = 2 ) # run 全部用例 runner.run(all_case()) #关闭文件,记住用open()打开文件后必定要记得关闭它,不然会占用系统的可打开文件句柄数。 fp.close() #测试报告文件夹 test_path = "C:\\Users\\DELL\\PycharmProjects\\honggetest\\report\\" new_report = new_report(test_path) send_mail(new_report) # 发送测试报告

小结

一、遇到的问题及解决方法编码

(1)将生成的测试报告的保存路径和查找测试报告的路径混淆会报以下错误

(2)解决方法

a、咱们先来分析一下缘由,刚开始我查了资料还以为是否是数组越界,后来感受不对,就复制粘贴到个人电脑报以下错误,确实找不到

b、接着Ctrl+R复制进去,运行出现以下这是才知道查找最新的测试报告遍历的根本不是一个目录而是一个文件

 

c、解决办法不是文件夹修改为测试报告的文件夹是否是就能够,作以下简单地修改就能够了

d、完了把test_path拷贝在我电脑和运行处,两个界面同样分别定位到测试报告。这样就能够遍历,这是不用试 必定能够成功分别以下:

个人电脑

 

运行

e、代码运行结果

f、到收件箱能够看到测试报告

 二、发送的邮件看不到发件人和收件人,如图

 a、解决办法:

加两行代码便可

b、再次运行收到邮件

 

原文出处:https://www.cnblogs.com/du-hong/p/10812533.html

相关文章
相关标签/搜索