自动化测试项目实战10:统计展示

大家好,我是谭叔。

本期是最后一部分内容——测试结果的统计展示。

统计展示的方法很多,如接口计数、网页展示、邮件报告等。本项目叫easytest,我们便实现最简单的一种——通过邮件展示自动化测试的结果。

邮件配置

以QQ邮箱作为示例(其他邮箱自行百度),如图一顿无脑操作,获取授权码。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xF2ycQ0E-1632471962145)(http://pic.testtalking.com/testtalking/20210610161708.png)]

将邮箱账号和授权码放到ProjectConfig.py文件内。

自动化测试项目实战10:统计展示

引入报告库

因为unittest没有统计、展示结果的功能,故需引入第三方库——HTMLTestRunner。

又因HTMLTestRunner不能通过pip安装,我便放在了common目录下,是我去年基于两位博主改过的一版,做了bug fix。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fsNQixH1-1632471962149)(http://pic.testtalking.com/testtalking/20210610181423.png)]

自动化测试项目实战10:统计展示

其实,HTMLTestRunner无法满足部分统计场景,我根据项目做过二次开发,但这些东西你用不着,就不放出来了,并且,HTR这套统计展示机制已经过时,我也基本弃用。但,于新人来说,HTMLTestRunner简单、易用,非常值得入手。

对于自动化测试报告来说,我的观点是够用就行

要知道,发报告不是重点,重点的是发报告之前的操作

鸟枪换炮

将main文件夹下的run_case方法修改为RunCase类,做以下两步修改:

1、运行测试用例,并将测试结果汇总为html文件

2、读取html文件,以邮件的形式发送测试报告

# !/usr/bin/python
# -*- coding:utf-8 -*-
from day10.easytest.common.HTMLTestRunnerCNs import HTMLTestRunner
from day10.easytest.common.logger import write_log
from config.ProjectConfig import ETConfig
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import smtplib
import platform
import unittest
import os.path
import time

class RunCase(object):

    def __init__(self):
        # 邮箱信息
        self.smtpserver = ETConfig.EMAIL_CONFIG['EMAIL_SERVER']
        self.user = ETConfig.EMAIL_CONFIG['EMAIL_USER']
        self.password = ETConfig.EMAIL_CONFIG['EMAIL_PWD']
        self.sender = ETConfig.EMAIL_CONFIG['EMAIL_SENDER']
        self.receiver = ETConfig.EMAIL_CONFIG['EMAIL_RECEIVER']
        self.cc = ETConfig.EMAIL_CONFIG['EMAIL_CC']
        # html报告路径
        self.report_dir = "{}report".format(ETConfig.TEST_DIR)

    def run_case(self):
        # 如果report文件夹不存在,创建文件夹
        if "report" not in os.listdir(ETConfig.TEST_DIR):
            os.mkdir(self.report_dir)

        # 运行测试用例并写入html文件
        with open('{}\\et_result.html'.format(self.report_dir), 'wb') as fp:
            # 运行./路径下的TEST.py文件,视自己的情况修改路径
            try:
                write_log.info("RunCase执行用例--开始")
                suite = unittest.TestSuite()
                tests = unittest.defaultTestLoader.discover('..\\testcase', pattern='*Department.py')
                suite.addTest(tests)
                runner = HTMLTestRunner(stream=fp, title=u'自动化测试报告', description=u'运行环境:{}'.format(platform.platform()), tester="测试奇谭")
                runner.run(suite)
                write_log.info("RunCase执行用例--结束")
            except Exception as e:
                write_log.error("RunCase执行用例,生成报告失败:{}".format(e))


    def send_mail(self):
        """
        发送邮件
        :return:
        """
        # 打开报告文件
        with open('{}\\et_result.html'.format(self.report_dir), 'rb') as f:
            mail_body = str(f.read(), encoding="utf-8")

        msg = MIMEMultipart('mixed')
        msg_html = MIMEText(mail_body, 'html', 'utf-8')
        msg_html["Content-Disposition"] = 'attachment; filename="TestReport.html"'
        msg.attach(msg_html)
        msg_html1 = MIMEText(mail_body, 'html', 'utf-8')
        msg.attach(msg_html1)

        msg['Subject'] = u'【easytest】自动化测试报告 {}'.format(time.strftime("%Y-%m-%d", time.localtime()))
        msg['From'] = u'AutoTest <%s>' % self.sender
        msg['To'] = self.receiver
        msg['Cc'] = self.cc

        try:
            smtp = smtplib.SMTP()
            smtp.connect(self.smtpserver)
            smtp.login(self.user, self.password)
            smtp.sendmail(self.sender, self.receiver, msg.as_string())
            smtp.quit()
            write_log.info("发送邮件成功!")
        except Exception as e:
            write_log.error("发送邮件失败:{}".format(e))


if __name__ == '__main__':
    test = RunCase()
    test.run_case()
    test.send_mail()

运行程序,搞定!

一如既往,做个总结

01 自简单上手,再深入了解各类框架的结果展示机制,选择合适的、够用的便行。

02 若你要达成某种向上汇报的目的,那你可得花点心思在自动化测试的结果展示上面。

上一篇:使用虹软ArcFac,java 离线SDK 进行人脸识别


下一篇:msyql高级-索引设计原则