自动化测试系列:接口自动化测试框架--05通过邮件发送测试结果的封装

news2024/9/20 18:50:22

框架功能介绍

1.自动整理接口测试用例:只需使用抓包工具,将需要接口请求另存为HAR文件,执行har2excel.bat即可自动生成接口请求测试用例,同时将接口请求的host地址写入到配置文件(测试用例仅生成正向用例,断言方式默认为整个响应结果结构对比,即实际测试响应结果的JSON字符串结构与测试用例中的预期结果JSON字符串结构对比)(每次生成Excel用例前都会先将原有testcase.xlsx文件备份);

2.支持用例间参数传递,如:在01接口请求参数、或者响应结果中的某一个节点值保存为指定变量名,在02接口中通过${自定义变量名}进行引用;

3.断言方式丰富:JSON结构对比、JSON节点值大于XXX、JSON节点值等于XXX、节点值不等于XXX、JSON节点值小于XXX、JSON节点值包含XXX、JSON节点值不包含XXX、JSON节点名称是否存在、JSON节点值数组长度大于XXX、JSON节点值数组长度等于XXX、JSON节点值数组长度小于XXX、JSON节点值类型为XXX(int、str、list、dict、float、tuple);

4.自动生成python测试脚本(根据config.py文件中CreateTestScript值决定),测试人员可以对生产的测试脚本进行修改,修改后需修改config.py文件中CreateTestScript值不=1,否则仍会重新生成新的测试脚本并按照新的测试脚本执行测试(每次生成脚本都会先将test*.py的测试脚本备份,但测试过程不再执行);

5.测试执行结果回写Excel表格:测试执行结果会回写到Excel测试用例中,同时测试用例执行完成后会自动打开浏览器呈现本次测试的测试报告。

6.详细的log日志:每执行一次测试,会产生一个log文件,存放在log目录下,记录本次测试脚本执行所有过程;

目录结构

一下两图以及代码部分参见引文(这里格式混乱)

Image

Image

接口自动化测试结束后,将测试结果通过邮件发送给相关人员,本文将分享python发送邮件的封装。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from datetime import datetime
import os
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

class HandleEmail():

    def __init__(self, host="smtp.qq.com", port=25, *args, **kwargs):
        self.host = host
        self.port = port

    # 添加文本
    def add_text(self, text):
        return MIMEText(text, "plain", "utf-8")

    # 添加html文本
    def add_html_text(self, html):
        return MIMEText(html, "html", "utf-8")

    # 添加附件,图片,txt,pdf,zip
    def add_accessory(self, filepath):
        res = MIMEText(open(filepath, "rb").read(), "base64", "utf-8")
        res.add_header('Content-Disposition','attachment',filename=os.path.basename(filepath))
        return res

        # 添加主题 发件人,收件人
    def add_subject_attach(self, send_email, receiver, subject, sender, attach_info:tuple, send_date=None):
        """

        @param send_email: 发送方email
        @param receiver:  接收方email群发是列表形式 ["xxx@qq.com",XXXX@qq.com,....]
        @param subject: 邮件主题
        @param sender: 发送发的名字,一般指测试人员
        @param attach_info: 构建附件元组
        @param send_date: 发送日期,"%Y-%m-%d %H:%M:%S",当为None时用当前时间发送邮件
        @return: msg 可以传给 send_email()方法发送邮件
        """

        msg = MIMEMultipart('mixed')
        msg['Subject'] = subject
        msg['From'] = '{0} <{1}>'.format(sender, send_email)
        msg['To'] = ";".join(receiver)
        if send_date:
            msg['Date'] = send_date
        else:
            msg['Date'] = datetime.strftime(datetime.now(), "%Y-%m-%d %H:%M:%S")
        if isinstance(attach_info, tuple):
            for i in attach_info:
                msg.attach(i)
        return msg

    def send_email(self, send_email, pwd, receiver, msg):
        try:
            smtp = smtplib.SMTP(self.host, port=self.port)
            smtp.login(send_email, pwd)
            smtp.sendmail(send_email, receiver, msg.as_string())
            print("{0}给{1}发送邮件成功,发送时间:{2}".format(send_email, receiver,
                                                  datetime.strftime(datetime.now(), "%Y-%m-%d %H:%M:%S")))
        except Exception as e:
            print('SMTP Exception:\n' + str(e) + '\n')
            raise e
        finally:
            smtp.quit()

    def send_public_email(self,send_email, receiver, pwd, sender, subject, send_date=None, text="",hmtl="",filepath=None):
        attach_info = []
        text_plain = self.add_text(text=text)
        attach_info.append(text_plain)
        if hmtl:
            text_html = self.add_html_text(hmtl=hmtl)
            attach_info.append(text_html)
        elif filepath :
            file_attach = self.add_accessory(filepath=filepath)
            attach_info.append(file_attach)
        # 构建附件元组
        attach_info = tuple(attach_info)
        # 添加主题和附件信息到msg
        msg = self.add_subject_attach(send_email,receiver,subject,sender,attach_info=attach_info,send_date=send_date)
        # 发送邮件
        self.send_email(send_email, pwd, receiver, msg)

if __name__ == '__main__':
    send_email = "123456@qq.com"
    receiver = ['123456@qq.com','123456678@qq.com']
    pwd = "123456"
    sender = ""
    subject = "测试邮件发送功能"
    text = "各位同事:\n大家好,以下为本次测试报告.\n"
    HandleEmail().send_public_email(send_email, receiver, pwd, sender, subject, send_date=None, text=text,hmtl="",filepath="测试结果文件路径")

 这是我整理的《2024最新Python自动化测试全套教程》,以及配套的接口文档/项目实战【网盘资源】,需要的朋友可以下方视频的置顶评论获取。肯定会给你带来帮助和方向。

【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2039698.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端css线性渐变

background: linear-gradient(90deg,red,green); 1.支持多颜色渐变 2.支持多方向渐变 to left to top left 3.支持角度90deg <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA…

CDH 6.3.1 史上最全安装手册

因项目需要CDH&#xff0c;经过十来次的重复安装&#xff0c;反复踩坑、填坑、验证&#xff0c;终于了今日的成功。 基础设施 设置主机 Nodecloudera-scm-servercloudera-scm-agent操作系统cpu内存cdh-guance01✅✅Centos7.44核16Gcdh-guance02❎✅Centos7.44核16Gcdh-guanc…

Cesium.js:webGIS领域的翘楚,开源全球地理空间数据可视化框架.

说起数据可视化/数字孪生开发&#xff0c;少不了webGIS&#xff0c;聊起webGIS不得不提大名鼎鼎的Cesium.js框架。 CesiumJS是一个用于创建地理空间应用程序的开源JavaScript库。它提供了丰富的地图和地理空间数据的可视化功能&#xff0c;可以用于构建基于地理位置的3D地图、…

在天朝A股,抄底和摸顶,哪个更加困难?

在天朝股市&#xff0c;流传着这么一句话&#xff1a;新手死于追高&#xff0c;老手死于抄底。和“抄底”相对应的就是“摸顶”&#xff0c;有时候就琢磨着&#xff0c;抄底和摸顶&#xff0c;哪个更加困难&#xff1f; 盯着红绿相间的K线&#xff0c;看着起起伏伏的走势&#…

机器学习之随机森林

文章目录 1. 随机森林概述1.1 定义与起源1.2 与其他算法的比较 2. 随机森林的工作原理2.1 决策树基础2.2 Bagging机制2.3 随机性的引入 3. 随机森林的构建过程3.1 数据准备3.2 特征选择3.3 多棵树的集成 4. 随机森林的优缺点分析4.1 优势4.2 局限性 5. 随机森林的应用场景5.1 分…

学习008-02-05-03 Highlight Property Editors(突出显示属性编辑器)

Highlight Property Editors&#xff08;突出显示属性编辑器&#xff09; This lesson explains how to format data that satisfies the specified criteria. 本课介绍如何格式化满足指定条件的数据。 The instructions below show how to do the following: 以下说明显示了…

高性能跨平台网络通信框架 HP-Socket v6.0.2

项目主页 : http://www.oschina.net/p/hp-socket开发文档 : https://www.docin.com/p-4592706661.html下载地址 : https://github.com/ldcsaa/HP-SocketQQ Group: 44636872, 663903943 v6.0.2 更新 一、主要更新 优化Linux通信组件多路复用处理架构&#xff0c;避免“惊群”问…

SP:eric 靶场复现【附代码】(权限提升)

靶机下载地址&#xff1a; https://www.vulnhub.com/entry/sp-eric,274/https://www.vulnhub.com/entry/sp-eric,274/ 1. 主机发现端口扫描目录扫描敏感信息获取 1.1. 主机发现 nmap -sn 192.168.7.0/24|grep -B 2 08:00:27:75:19:80 1.2. 端口扫描 nmap 192.168.7.104 -p…

NetSuite Credit Memo总账影响无成本与存货内容应如何调整?

“某仓库是新建仓库&#xff0c;由于用户未正确初始化退货入库成本&#xff0c;导致7月所做的Credit Memo的总账影响缺少Inventory和COGS的内容。”这是用户当前所碰到的问题场景。 分析一下&#xff0c;实际上用户未从RMA出发走正常退货流程&#xff0c;而直接建立Credit Mem…

reactFiberLane

Lane (车道模型) 英文单词lane翻译成中文表示"车道, 航道"的意思, 所以很多文章都将Lanes模型称为车道模型 Lane模型的源码在ReactFiberLane.js, 源码中大量使用了位运算(有关位运算的讲解, 首先引入作者对Lane的解释(相应的 pr), 这里简单概括如下: Lane类型被定义…

T10打卡-学习笔记

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 配置环境 import matplotlib.pyplot as plt import numpy as np #隐藏警告 import warnings warnings.filterwarnings(ignore)from tensorflow.keras import …

RCE漏洞及绕过

目录 1、RCE概述 &#xff08;1&#xff09;命令执行函数 &#xff08;2&#xff09;代码执行函数 2、回调后门 3、eval和assert 限制字符长度绕过 &#xff08;1&#xff09;反引号或exec &#xff08;2&#xff09;file_put_contents写入文件 &#xff08;3&#xff…

数据结构——循环队列

目录 循环队列的基本知识 循环队列的实现 定义 各个接口的实现 循环队列的基本知识 循环队列的定义 循环队列&#xff08;Circular Queue&#xff09;是一种使用固定大小的数组实现的队列&#xff0c;它将数组的首尾相连&#xff0c;形成环形&#xff0c;以充分利用空间并实…

react组件优化之React.PureComponent,React.memo

在开发中我们经常会考虑项目的优化问题&#xff0c;react作为现在前端的热门框架用的人肯定是非常的多。项目的优化问题也是非常重要的一部分&#xff0c;能大大提高项目的流畅度&#xff0c;用户体验会非常好。react项目中会用到大量的组件嵌套&#xff0c;减少一些组件的不必…

第二证券:虚拟现实概念强势,博士眼镜三连板,星星科技涨停

虚拟现实概念14日盘中再度走强&#xff0c;到发稿&#xff0c;硕贝德、博士眼镜、星星科技“20cm”涨停&#xff0c;亚世光电、亿道信息、卓翼科技亦涨停&#xff0c;佳禾智能涨超9%。 值得注意的是&#xff0c;博士眼镜已连续3个交易日涨停。公司昨日在出资者互动途径表示&am…

【二叉树进阶】--- 根据二叉树创建字符串

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏&#xff1a; 数据结构 从本篇文章开始&#xff0c;博主将分享一些结合二叉树的进阶算法题。 &#x1f3e0; 根据二叉树创建字符串 &#x1f4cc; 题目内容 根据二叉…

若依框架中的mybatis依赖在哪里?

对于刚刚接触若依框架的朋友,可能会比较懵逼,因为他可能在依赖文件中没有找到mybatis的依赖是在什么地方引入的,所以本章教程,就告诉你这个依赖是在什么地方引入的。 在ruoyi-common模块中的pom.xml 存在一个pagehelper-spring-boot-starter <!-- pagehelper 分页插件 -…

一文HDMI (High-Definition Multimedia Interface)

HDMI&#xff08;High-Definition Multimedia Interface&#xff0c;高清多媒体接口&#xff09;是一种紧凑的音视频接口&#xff0c;它能够将未压缩的视频数据以及压缩或未压缩的数字音频数据&#xff0c;从符合HDMI标准的源设备无缝传输到兼容的计算机显示器、视频投影仪、数…

springboot学生练习自测系统-计算机毕业设计源码48462

目 录 摘要 1 绪论 1.1 研究背景 1.2 研究意义 1.3论文结构与章节安排 2 学生练习自测系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据增加流程 2.2.2 数据修改流程 2.2.3 数据删除流程 2.3 系统功能分析 2.3.1 功能性分析 2.4 系统用例分析 2.5本章小…

STM32学习笔记13-FLASH闪存

FLASH简介 STM32F1系列的FLASH包含程序存储器、系统存储器和选项字节三个部分&#xff0c;通过闪存存储器接口&#xff08;外设&#xff09;可以对程序存储器和选项字节进行擦除和编程读写FLASH的用途&#xff1a; 利用程序存储器的剩余空间来保存掉电不丢失的用户数据 通过在…