首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
41 篇文章
1
python接口自动化(二)--什么是接口测试、为什么要做接口测试(详解)
2
python接口自动化(三)--如何设计接口测试用例(详解)
3
python接口自动化(四)--接口测试工具介绍(详解)
4
python接口自动化(六)--发送get请求接口(详解)
5
python接口自动化(五)--接口测试用例和接口测试报告模板(详解)
6
python接口自动化(七)--状态码详解对照表(详解)
7
python接口自动化(八)--发送post请求的接口(详解)
8
python接口自动化(十)--post请求四种传送正文方式(详解)
9
python接口自动化(九)--python中字典和json的区别(详解)
10
python接口自动化(十一)--发送post【data】(详解)
11
python接口自动化(十二)--https请求(SSL)(详解)
12
python接口自动化(十三)--cookie绕过验证码登录(详解)
13
python接口自动化(十四)--session关联接口(详解)
14
python接口自动化(十五)--参数关联接口(详解)
15
python接口自动化(十六)--参数关联接口后传(详解)
16
python接口自动化(十七)--Json 数据处理---一次爬坑记(详解)
17
python接口自动化(十八)--重定向(Location)(详解)
18
python接口自动化(十九)--Json 数据处理---实战(详解)
19
python接口自动化(二十)--token登录(详解)
20
python接口自动化(二十一)--unittest简介(详解)
21
python接口自动化(二十二)--unittest执行顺序隐藏的坑(详解)
22
python接口自动化(二十三)--unittest断言——上(详解)
23
python接口自动化(二十四)--unittest断言——中(详解)
24
python接口自动化(二十五)--unittest断言——下(详解)
25
python接口自动化(二十六)--批量执行用例 discover(详解)
26
python接口自动化(二十七)--html 测试报告——上(详解)
27
python接口自动化(二十八)--html测试 报告——下(详解)
28
python接口自动化(二十九)--html测试报告通过邮件发出去——上(详解)
29
python接口自动化(三十)--html测试报告通过邮件发出去——中(详解)
30
python接口自动化(三十一)--html测试报告通过邮件发出去——下(详解)
31
python接口自动化(四十)- logger 日志 - 下(超详解)
32
python接口自动化(四十一)- 发xml格式参数的post请求(超详解)
33
python接口自动化(四十二)- 项目结构设计之大结局(超详解)
34
python接口自动化(三十二)--Python发送邮件(常见四种邮件内容)番外篇——上(详解)
35
python接口自动化(三十三)-python自动发邮件总结及实例说明番外篇——下(详解)
36
python接口自动化(三十四)-封装与调用--函数和参数化(详解)
37
python接口自动化(三十五)-封装与调用--流程类接口关联(详解)
38
python接口自动化(三十六)-封装与调用--流程类接口关联续集(详解)
39
python接口自动化(三十七)-封装与调用--读取excel 数据(详解)
40
python接口自动化(三十八)-python操作mysql数据库(详解)
41
python接口自动化(三十九)- logger 日志 - 上(超详解)

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、仿照源码进行改造

参考代码

代码语言:javascript
复制
# 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、遇到的问题及解决方法

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

(2)解决方法

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

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

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

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

我的电脑

运行

e、代码运行结果

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

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

a、解决办法:

加两行代码即可

b、再次运行收到邮件

下一篇
举报
领券