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

简介

  前边几篇,已经教小伙伴们掌握了如何生成HTML的测试报告,那么生成测试报告,我们也不能放在那里不管了,这样即使你报告在漂亮,领导也看不到。因此如果想向领导汇报工作,不仅需要提供更直观的测试报告。而是我们需要将生

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

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

大致思路流程

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

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

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

4、第一步,前边几篇,我们都详细介绍了,所以这篇就不在赘述了,直接从第二步、第三步开始讲解。

查找最新测试报告 

定义发送邮件

1、查看一下,源码如下:

2、仿照源码进行改造

参考代码

# coding=utf-8#1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

#2.注释:包括记录创建时间,创建人,项目名称。'''Created on2019-5-6@author: 北京-宏哥

Project:学习和使用将测试报告通过邮件发出去'''#3.导入unittest模块

import unittest

import osfrom email.mime.text import MIMETextfrom 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方法筛选出用例,循环添加到测试套件中

    # fortest_suitin discover:

    #    fortest_casein 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_newif__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、遇到的问题及解决方法

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

(2)解决方法

a、我们先来分析一下原因,刚开始我查了资料还觉得是不是数组越界,后来感觉不对,就复制粘贴到我的电脑报如下错误,确实找不到

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


c、解决办法不是文件夹修改成测试报告的文件夹是不是就可以,做如下简单地修改就可以了

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

我的电脑


运行

e、代码运行结果

f、到收件箱可以看到测试报告

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

 a、解决办法:

加两行代码即可

b、再次运行收到邮件

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342