专栏首页python 自动化测试Cypress执行测试并邮寄发送测试报告

Cypress执行测试并邮寄发送测试报告

前言

为了高质量的软件交付,组织必须转向自动化流程,手动流程太容易出错,效率低下。对于执行CD和devops的团队来说,自动化变得越来越重要,大家只需要专注在code和review中,其它过程都尽可能的自动化。

Jenkins执行python脚本运行测试并邮件发送报告

"""
 * Create by dell on 2020/9/16
 * Author :wencheng
 * 微信公众 :自动化测试 To share

"""

# coding=gbk
import mimetypes
import smtplib
from email import encoders
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.mime.text import MIMEText
import time
import zipfile
import os
import shutil


def move_file():
    origin_path = r"D:\workspace\test\cypress\screenshots"
    origin_path3 = r"D:\workspace\test\test-report.json"
    new_file_name = r"D:\workspace\test\mochawesome-report"
    shutil.move(origin_path, new_file_name)
    shutil.move(origin_path3, new_file_name)


def npx_bulid():
    command = r"cd D:\workspace\test &&
                npx mochawesome-merge cypress/results/*.json >
                 test-report.json" \
              r"&&npx mochawesome-report-generator 
              test-report.json"
    os.system(command)


def clearfile():
    shutil.rmtree(r"D:\workspace\test\cypress\results")
    shutil.rmtree(r"D:\workspace\test\mochawesome-report")


def file_tozip():
    startdir = "mochawesome-report"  # 要压缩的文件夹路径
    file_news = 'mochawesome-report.zip'  # 压缩后文件夹的名字
    z = zipfile.ZipFile(file_news, 'w', zipfile.ZIP_DEFLATED)  # 参数一:文件夹名
    for dirpath, dirnames, filenames in os.walk(startdir):
        fpath = dirpath.replace(startdir, '')  # 这一句很重要,不replace的话,就从根目录开始复制
        fpath = fpath and fpath + os.sep or ''  # 这句话理解我也点郁闷,实现当前文件夹以及包含的所有文件的压缩
        for filename in filenames:
            z.write(os.path.join(dirpath, filename), 
            fpath + filename)
    print('压缩成功')
    z.close()


def send_report():
    filepath = "mochawesome-report.zip"
    smtp_server = "smtp.exmail.qq.com"
    username = "xxxxxxx "
    password = "xxxxxxx"
    sender = 'xxxxxxx'
    # receivers = ["xxxxxxx","xxxxxxx","xxxxxxx"]  # 接收人
    receivers = ['xxxxxxx']
    current_time = time.strftime('%Y-%m-%d-%H-%M-%S',
                 time.localtime(time.time()))
    msg = MIMEMultipart()
    # 邮件正文
    msg.attach(MIMEText("Hi,All:"
                        "\n  test运营系统的自动化脚本测试工具 {}
                        已经完成测试报告见附件"
                        "\n  脚本构建地址:http://xx.xx.xxx.xx:xxxx/"
                        "\n  账号:admin 密码:123456"
                        "\n  目前以实现测试环境xx
                        条数,.".format(current_time), 'plain', 'utf-8'
                        ))
    msg['From'] = sender
    msg['To'] = ";".join(receivers)  # 多个收件人list转str

    subject = "{}的自动化测试报告".format(current_time)
    msg['Subject'] = subject

    data = open(filepath, 'rb')
    ctype, encoding = mimetypes.guess_type(filepath)
    if ctype is None or encoding is not None:
        ctype = 'application/octet-stream'
    maintype, subtype = ctype.split('/', 1)
    file_msg = MIMEBase(maintype, subtype)
    file_msg.set_payload(data.read())
    data.close()
    encoders.encode_base64(file_msg)  # 把附件编码
    file_msg.add_header('Content-Disposition', 'attachment',
     filename="test.zip")  # 修改邮件头
    msg.attach(file_msg)
    try:
        server = smtplib.SMTP(smtp_server, 25)
        server.login(username, password)
        server.sendmail(sender, receivers, msg.as_string())
        server.quit()
        print("发送成功")
    except Exception as err:
        print("发送失败")
        print(err)


if __name__ == '__main__':
    npx_bulid()
    move_file()
    file_tozip()
    send_report()
    clearfile()

本文分享自微信公众号 - 自动化测试 To share(gh_92d7607a3e04),作者:wencheng

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-09-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 性能测试工具jmeter和locust比较

    Apache JMeter和Locust都是是最受欢迎的性能测试工具。当你想做性能测试的时候,你会选择什么样的测试工具呢?是会选择jmeter?locust?今...

    wencheng
  • python3 常用的时间工具学习笔记

    wencheng
  • Python unittest自动化01

    什么是单元测试?单元测试负责最小的软件设计单元进行验证,unittest框架(原名PyUnit框架)为python自带的单元测试框架。

    wencheng
  • 2018.12十大机器学习热门网文

    在过去的几个月中,我们对接近1400篇机器学习的文章进行了评级,以便选出其中最优秀的10篇来帮助你规划你的职业生涯(只有0.7%的概率获选)。

    AI研习社
  • 梦里探花——C++没完又来一个C

    隐约觉得这是大一时的必修课,BUT,现在脑海里只剩下当时枯燥的理论,学的云里雾里,上机完全没印象了。如果能有合适的应用场景练习,可能就是一门有趣的课了。

    Ed_Frey
  • kubelet 状态上报的方式

    分布式系统中服务端会通过心跳机制确认客户端是否存活,在 k8s 中,kubelet 也会定时上报心跳到 apiserver,以此判断该 node 是否存活,若 ...

    田飞雨
  • 业界 | 开发新医疗应用前,工程师们应该多花点时间在医院里

    作为急诊室医生,Richard Zane经常会思考软件能够如何帮助患者。这里的难题在于工程师和医生来自不同的世界。

    大数据文摘
  • kubelet 状态上报的方式

    分布式系统中服务端会通过心跳机制确认客户端是否存活,在 k8s 中,kubelet 也会定时上报心跳到 apiserver,以此判断该 node 是否存活,若...

    田飞雨
  • file_put_contents 保存文件时乱码

    tomcat让人抓狂,后台java写的一个应用程序生成的静态html居然是ANSI编码格式的文件,前台首页点击查看页面时直接乱码了…

    meteoric
  • 灵感专题—2019年优秀网页设计作品赏析#4月

    设计领域时时刻刻在发生着你我意想不到的变化。许多看似熟悉的设计趋势,于不同的设计师而言,经过灵活的创意设计也许就意味着不同的可能性。而这些可能性则来源于设计灵感...

    奔跑的小鹿

扫码关注云+社区

领取腾讯云代金券