python+selenium+HTMLTestRunner生成测试报告并发送邮件给指定邮箱

配置邮件发送人及接收人,并执行测试用例,最后发送测试报告到指定邮箱(注意:打开测试报告目录后,最后记得关闭,不然邮箱接收到的测试报告内容将会为空)

import time
import unittest
import os
import smtplib
from HTMLTestRunner import HTMLTestRunner
from email.mime.text import MIMEText
from email.header import Header
from email.mime.multipart import MIMEMultipart#================发送邮件===================
def send_mail(file_new):mail_host = 'smtp.qq.com'mail_user = '123456@qq.com'mail_pwd = 'v*****g'  # qq生成的授权码receivers = ['123456@126.com']subject = '自动化测试报告'f=open(file_new,'rb')mail_content=f.read()#把报告作为邮件内容#msg=MIMEText(mail_content,'html','utf-8')#msg['Subject']=Header(subject,'utf-8')#把报告作为附件发送att = MIMEText(mail_content, 'base64', 'utf-8')att['Content-Type'] = 'application/octet-stream'att['Content-Disposition'] = 'attachment; filename=test_report.html'msg = MIMEMultipart('related')msg['Subject'] = Header(subject,'utf-8')msg.attach(att)#连接邮箱,登录,发送邮件smtpObj = smtplib.SMTP()smtpObj.connect(mail_host)# 上面两行也可以写成:smtpObj=smtplib.SMTP_SSL(mail_host,465)smtpObj.login(mail_user, mail_pwd)smtpObj.sendmail(mail_user, receivers, msg.as_string())#=====================查找最新的测试报告===================
def new_report(test_report):lists = os.listdir(test_report)# lambda argument_list: expression表示的是一个函数# 比如:lambda x, y: x*y;函数输入是x和y,输出是它们的积x*y# lists.sort(key=lambda fn: os.path.getmtime(result_dir+'\\'+fn))lists.sort(key=lambda fn: os.path.getmtime(test_report + '/' + fn))latest_file = os.path.join(test_report, lists[-1])print(latest_file)return latest_filedef main():"""一个一个加suite = unittest.TestSuite()# suite.addTest(TestAdd("test_case"))suite.addTest(TestAdd("test_add1"))suite.addTest(TestAdd("test_add2"))suite.addTest(TestSub("test_sub1"))suite.addTest(TestSub("test_sub2"))runner = unittest.TextTestRunner()runner.run(suite)"""test_dir = r"./test_case/"test_report=r'./report/'"""TestLoader是用来加载TestCase到TestSuite中的,其中有几个loadTestsFrom__()方法,就是从各个地方寻找TestCase,创建它们的实例,然后add到TestSuite中,再返回一个TestSuite实例"""discover = unittest.defaultTestLoader.discover(test_dir, pattern="test_*.py")#给生成的测试报告设置名称current_time = time.strftime("%Y-%m-%d %H_%M_%S")file_name=test_report+current_time+"_result.html"fp=open(file_name,"wb")runner = HTMLTestRunner(stream=fp,title="测试报告",description="用例执行情况啦啦啦:")runner.run(discover)fp.close()latest_report=new_report(test_report)send_mail(latest_report)if __name__ == '__main__':main()

百度为例如下:

from selenium import webdriver
import unittest
import time
from HTMLTestRunner import HTMLTestRunnerclass Baidu(unittest.TestCase):def setUp(self):self.driver=webdriver.Chrome()self.driver.maximize_window()self.driver.implicitly_wait(10)self.base_url="http://www.baidu.com"def test_baidu_search(self):'''百度搜索测试一下注释'''driver=self.driverdriver.get(self.base_url)driver.find_element_by_id("kw").clear()driver.find_element_by_id("kw").send_keys("HTMLTestRunner")driver.find_element_by_id("su").click()time.sleep(2)def tearDown(self):self.driver.quit()if __name__ == '__main__':"""testunit=unittest.TestSuite()testunit.addTest(Baidu("test_baidu_search"))current_time=time.strftime("%Y-%m-%d %H_%M_%S")file_name="C:\\Users\\xxx\\Documents\\"+current_time+"_result.html"fp=open(file_name,'wb')runner=HTMLTestRunner(stream=fp,title="百度搜索测试报告",description="用例执行情况:")runner.run(testunit)fp.close()"""unittest.main()

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

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

相关文章

格密码:LWE设计公钥密码系统

目录 一. LWE公私钥对 二. 怎么加密? 三. 怎么解密? 四. 正确性分析 五. 安全性 在格密码中,LWE(Learning With Errors)问题非常重要,本文章将介绍一些基于LWE设计的公钥密码方案,并详细讨论这些方案是如何运行的…

oracle怎样才算开启了内存大页?

oracle怎样才算开启了内存大页? 关键核查下面三点: 1./etc/sysctl.conf vm.nr_hugepages16384这是给了32G,计划sga给30G,一般需多分配2-4G sysctl -p生效 看cat /proc/meminfo|grep Huge啥结果? 这种明显是配了…

蓝牙物联网开发与应用:五大核心应用场景!

蓝牙技术在物联网中的五大核心应用场景 1、智能家居 通过蓝牙连接智能家居设备,如智能灯泡、智能插座、智能恒温器等,可以实现远程控制、语音控制等功能,提高家居的智能化程度和便利性。 2、智能穿戴设备 蓝牙技术可以连接智能手表、智能手…

01AVue入门(持续学习中)

1.使用AVue开发简单的前端页面直接简单到起飞,他是Element PlusVueVite开发的,不需要向元素的前端代码一样一个组件要传很多参数,他可以使用Json文本来控制我们要传入的数据结构来决定显示什么 //我使用的比较新,我们也可以使用cdn直接使用script标签直接引入 2.开发中遇到的坑…

共享目录搭建

【linux系统】 1.sudo yum install nfs-utils 或 sudo apt install nfs-common 问题:如果apt install nfs-common报错dpkg: error processing package rpcbind (--configure) 解决方法:删除所有信息之后update sudo mv/var/lib/dpkg/info/ /va…

鸿蒙ArkTS语言介绍与TS基础法

1、ArkTS介绍 ArkTS是HarmonyOS主力应用开发语言,它在TS基础上,匹配ArkUI框架,扩展了声明式UI、状态管理等响应的能力,让开发者以更简洁、更自然的方式开发跨端应用。 JS 是一种属于网络的高级脚本语言,已经被广泛用…

【ITK库学习】使用itk库进行图像配准:“Hello World”配准(一)

目录 1、itkImageRegistrationMethod / itkImageRegistrationMethodv42、itkTranslationTransform3、itkMeanSquaresImageToImageMetric / itkMeanSquaresImageToImageMetric44、itkRegularStepGradientDescentOptimizerv / itkRegularStepGradientDescentOptimizerv4 图像配准…

MyBatis的ORM!!!

首先你要明白为什么使用ORM:我们看一个示例,我们发现我们要声明的pojo类中的属性名和数据库中的字段名不一致,这时就需要我们使用MyBatis的ORM。 首先还是准备工作: 1.创建Maven工程,还没有配置Maven的和还不会的去看这…

2023年12月20日学习总结

今日to do list: 学习kaggle中store sales中的dart forcasting🎯 大概搜集一个声纹识别的报告(老师给的新项目😭) 学习时不刷手机 okkkkkkkkkkkkkk 开始👍 1. 时间序列预测- a complete guide 总结一下这…

mysql创建用户和赋权

1.创建用户 CREATE USER new_userlocalhost IDENTIFIED BY user_password; “localhost"只允许本地连接,而”%"允许所有IP地址都可以连接到服务器。 2.赋权 GRANT ALL PRIVILEGES ON database_name.* TO new_userlocalhost; FLUSH PRIVILEGES; 3.给…

Python调用谷歌翻译API实现文本翻译

语种缩略表示 LANGUAGES {af: afrikaans,sq: albanian,am: amharic,ar: arabic,hy: armenian,az: azerbaijani,eu: basque,be: belarusian,bn: bengali,bs: bosnian,bg: bulgarian,ca: catalan,ceb: cebuano,ny: chichewa,zh-cn: chinese (simplified),zh-tw: chinese (tradi…

【C++初阶】学习string类的模拟实现

目录 前言:一、创建文件和类二、实现string类2.1 私有成员和构造函数2.2 析构函数2.3 拷贝构造函数2.3.1 写法12.3.2 写法2 2.4 赋值重载函数2.4.1 写法12.4.2 写法2 2.5 迭代器遍历访问2.6 下标遍历访问2.7 reserve2.8 resize2.9 判空和清理2.10 尾插2.10.1 尾插字…

计算机组成原理综合2

21、和外存储器相比,内存储器的特点是________。C A. 容量大、速度快、成本低 B. 容量大、速度慢、成本高 C. 容量小、速度快、成本高 D. 容量小、速度快、成本低 22、某计算机字长16位,存储器容量64KB,若按字编址&#xf…

diffusers-Inpainting

原文链接:添加链接描述 白色mask区域仅使用生成出来的,非白色mask区域使用原始影像,但是图像有点不平滑 import PIL import numpy as np import torchfrom diffusers import AutoPipelineForInpainting from diffusers.utils i…

Ubuntu 常用命令之 gzip 命令用法介绍

gzip 是一个在 Linux 和 Unix 系统中常用的文件压缩工具。它的名字来源于 GNU zip,作为一个自由软件,它是 GNU 项目的一部分。gzip 命令通常用于压缩文件,以节省磁盘空间,或者减小文件的大小,以便于网络传输。 gzip 命…

音视频直播核心技术介绍

直播流程 采集: 是视频直播开始的第一个环节,用户可以通过不同的终端采集视频,比如 iOS、Android、Mac、Windows 等。 前处理:主要就是美颜美型技术,以及还有加水印、模糊、去噪、滤镜等图像处理技术等等。 编码&#…

API文档生成工具-----Knife4介绍

API文档生成工具-----Knife4j的详细介绍、配置及应用 文章目录 一、Knife4j是什么?二、Knife4j如何配置?三、在Controller类或方法上如何使用?四、如何访问API文档?其他项目应用 一、Knife4j是什么? Knife4j是一个基于Swagger构建的开源Java API文档工具,它为…

移动端1像素的解决方案?

在移动端开发中,由于不同设备的像素密度差异,1像素问题成为了一个常见的难题。如果我们不对这个问题进行针对性的解决,那么会导致页面显示效果不美观,甚至影响用户体验。 以下是一些解决方案: 使用css3的scale属性&am…

网络基础介绍

1.网线制作 1.1 网线制作需要的工具 网线 网线钳 水晶头 测试仪 ​编辑 1.2 网线的标准 1.3 网线的做法 2.集线器&交换机&路由器的介绍 3.OSI七层模型 4.路由器的设置 4.1 常见的路由器设置地址 4.2 常见的路由器账号密码 4.3 登录路由器 设置访客网…

管理类联考——数学——真题篇——按知识分类——代数——数列

【等差数列 ⟹ \Longrightarrow ⟹ 通项公式: a n a 1 ( n − 1 ) d a m ( n − m ) d n d a 1 − d A n B a_n a_1(n-1)d a_m(n-m)dnda_1-dAnB an​a1​(n−1)dam​(n−m)dnda1​−dAnB ⟹ \Longrightarrow ⟹ A d , B a 1 − d Ad&#x…