https://blog.csdn.net/u011541946/article/details/77278837

本篇继续回答网友的问题,这个主题是如何通过邮件发送测试报告。通过邮件发送测试报告,这个很重要,也很有必要。不管你使用什么自动化测试框架,都建议添加发送测试报告的功能。先来设计我们的发送邮件的场景:假如我们测试报告是固定的名称,放在固定的路径下。

1.下载java mail api包

浏览器打开https://mvnrepository.com/artifact/com.sun.mail/javax.mail/1.6.0,点击download jar,把下载下来的jar文件,放在当前项目的tools文件夹下,并添加到当前项目的library里。具体这里不过多描述,前面我们添加了很多次jar包。

2.在testSuite包下新建一个测试发送邮件的类。

其实这个发送邮件的类,我们可以单独写成一个静态类,设置一个变量,邮件的附件,也就是我们测试报告文件的路径就是这个变量。今天我们暂时不考虑这么多,只是简单来利用QQ邮箱发送一个测试报告。我的测试报告是TestNG自动化生成的一个html文件。

3.如何开启QQ上的smtp服务

我们在使用QQ的smtp服务器之前,我们需要登录web qq邮箱,开启smtp,具体看下面两张图。

上面红圈的授权码需要记录下来,放到我们接下来的代码中关于身份认证这块,替代password。如果你填写的是你QQ的密码,代码运行后应该报535错误,身份认证失败。

4. 测试发送邮件类的具体代码。

package testSuite;

import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

public class SendEmail {

public static void main(String[] args) {

// 创建一个Property文件对象
Properties props = new Properties();

// 设置邮件服务器的信息,这里设置smtp主机名称
props.put("mail.smtp.host", "smtp.qq.com");

// 设置socket factory 的端口
props.put("mail.smtp.socketFactory.port", "465");

// 设置socket factory
props.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");

// 设置需要身份验证
props.put("mail.smtp.auth", "true");

// 设置SMTP的端口,QQ的smtp端口是25
props.put("mail.smtp.port", "25");

// 身份验证实现
Session session = Session.getDefaultInstance(props, new javax.mail.Authenticator() {

protected PasswordAuthentication getPasswordAuthentication() {
// 第二个参数,就是我QQ开启smtp的授权码
return new PasswordAuthentication("570xxxx@qq.com", "kvsivuydzdbpbffd");

}

});

try {

// 创建一个MimeMessage类的实例对象
Message message = new MimeMessage(session);

// 设置发件人邮箱地址
message.setFrom(new InternetAddress("570xxx@qq.com"));

// 设置收件人邮箱地址
message.setRecipients(Message.RecipientType.TO,InternetAddress.parse("2048xxxx@qq.com"));

// 设置邮件主题
message.setSubject("测试发送邮件");

// 创建一个MimeBodyPart的对象,以便添加内容
BodyPart messageBodyPart1 = new MimeBodyPart();

// 设置邮件正文内容
messageBodyPart1.setText("这个是邮件的正文部分");

// 创建另外一个MimeBodyPart对象,以便添加其他内容
MimeBodyPart messageBodyPart2 = new MimeBodyPart();

// 设置邮件中附件文件的路径
String filename = ".\\test-output\\emailable-report.html";

// 创建一个datasource对象,并传递文件
DataSource source = new FileDataSource(filename);

// 设置handler
messageBodyPart2.setDataHandler(new DataHandler(source));

// 加载文件
messageBodyPart2.setFileName(filename);

// 创建一个MimeMultipart类的实例对象
Multipart multipart = new MimeMultipart();

// 添加正文1内容
multipart.addBodyPart(messageBodyPart1);

// 添加正文2内容
multipart.addBodyPart(messageBodyPart2);

// 设置内容
message.setContent(multipart);

// 最终发送邮件
Transport.send(message);

System.out.println("=====邮件已经发送=====");

} catch (MessagingException e) {

throw new RuntimeException(e);

}

}

}
       运行一下,我能收到邮件,邮件中附件确实是TestNG生成的测试报告文件。记得替换你自己QQ邮箱信息在上面相关的地方,关于如何通过邮件发送测试报告,就介绍到这里。至于如何在完成自动化测试脚本就第一时间通过邮件发送测试报告,有必要的话,在后面文件再介绍。
---------------------
作者:Anthony_tester
来源:CSDN
原文:https://blog.csdn.net/u011541946/article/details/77278837
版权声明:本文为博主原创文章,转载请附上博文链接!

Java+Selenium3框架设计篇5-如何实现邮件发送测试报告的更多相关文章

  1. 《手把手教你》系列基础篇(九十七)-java+ selenium自动化测试-框架设计篇-Selenium方法的二次封装和页面基类(详解教程)

    1.简介 上一篇宏哥介绍了如何设计支持不同浏览器测试,宏哥的方法就是通过来切换配置文件设置的浏览器名称的值,来确定启动什么浏览器进行脚本测试.宏哥将这个叫做浏览器引擎类.这个类负责获取浏览器类型和启动 ...

  2. 《一头扎进》系列之Python+Selenium框架设计篇5 - 价值好几K的框架,哎呦!这个框架还真有点料啊!!!

    1. 简介 其实,到前面这一篇文章,简单的Python+Selenium自动化测试框架就已经算实现了.接下来的主要是介绍,unittest管理脚本,如何如何加载执行脚本,再就是采用第三方插件,实现输出 ...

  3. 《一头扎进》系列之Python+Selenium框架设计篇3- 价值好几K的框架,狼来了,狼来了....,狼没来,框架真的来了

    1. 简介 前边宏哥一边一边的喊框架,就如同一边一边的喊狼来了!狼来了!.....这回是狼没有来,框架真的来了.从本文开始宏哥将会一步一步介绍,如何从无到有地创建自己的第一个自动化测试框架.这一篇,我 ...

  4. 《一头扎进》系列之Python+Selenium框架设计篇4- 价值好几K的框架,呵!这个框架有点意思啊

    1.简介 前面文章,我们实现了框架的一部分功能,包括日志类和浏览器引擎类的封装,今天我们继续封装一个基类和介绍如何实现POM.关于基类,是这样定义的:把一些常见的页面操作的selenium封装到bas ...

  5. 《一头扎进》系列之Python+Selenium框架设计篇2- 价值好几K的框架,不看白不看,看了还想看

    1. 简介 上一篇介绍了自动化框架的架构,今天宏哥就带领小伙伴或者童鞋们开始开工往这个框架里开始添砖加瓦.主要是介绍一个框架unittest单元测试框架和一种设计思想POM. 2. unittest单 ...

  6. Python+Selenium框架设计篇之-简单介绍unittest单元测试框架

    前面文章已经简单介绍了一些关于自动化测试框架的介绍,知道了什么是自动化测试框架,主要有哪些特点,基本组成部分等.在继续介绍框架设计之前,我们先来学习一个工具,叫unittest.       unit ...

  7. Python+Selenium框架设计篇之-什么是自动化测试框架

    1.什么是自动化测试框架 简单来说,自动化测试框架就是由一些标准,协议,规则组成,提供脚本运行的环境.自动化测试框架能够提供很多便利给用户高效完成一些事情,例如,结构清晰开发脚本,多种方式.平台执行脚 ...

  8. 《一头扎进》系列之Python+Selenium框架设计篇1-什么是自动化测试框架-价值好几K的框架,不看别后悔,过时不候

    1. 什么是自动化测试框架 在了解什么是自动化测试框架之前,先了解一下什么叫框架?框架是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法:另一种定义认为,框架是可被应用开发者定制的 ...

  9. Python+Selenium框架设计篇之-什么是POM

    前面我们介绍了Python中的单元测试框架unittest,以后我们所有的测试类文件,都采用unittest来辅助我们进行debug和脚本开发.搞定了debug机制和确定了unittest来进行创建和 ...

随机推荐

  1. 启动 ServiceFabric Windows服务报1053

    Remote Procedure Call (RPC) Locator和 Windows Firewall是否启动. 以管理员身份运行PowerShell,输入Unregister-Scheduled ...

  2. Badboy录制Jmter脚本

    提纲 1.特性和用途 2.下载和安装 3.界面介绍 4.录制脚本(注意:badboy默认是打开就开始录制,需要在step双击后进行取消默认设置) 5.添加断言(参数化设置,注意:badboy默认只运行 ...

  3. HBase读写数据的详细流程及ROOT表/META表介绍

    一.HBase读数据流程 1.Client访问Zookeeper,从ZK获取-ROOT-表的位置信息,通过访问-ROOT-表获取.META.表的位置,然后确定数据所在的HRegion位置: 2.Cli ...

  4. 练习七 Procedure中使用DDL

    1 在存储过程中使用ddl语句有如下异常: create or replace procedure test_create_table (Table_Name in VARCHAR2, column_ ...

  5. 理解JSON对象:JSON.parse、 JSON.stringify

    何时是JSON,何时不是JSON? JSON就是一个有特殊规则的字符串,按照这个规则我们就可以把这个字符串解析成JS对象. JSON是设计成描述数据交换格式的,他也有自己的语法,这个语法是JavaSc ...

  6. git 撤销更改的文件

    在没有git add之前: 1.撤销所有更改:git checkout . 2.撤销指定文件的更改:git checkout -- file.txt git add之后: git reset HEAD ...

  7. BZOJ4858 : [Jsoi2016]炸弹攻击 2

    枚举每个$S$作为原点,将所有$D$和$T$极角排序. 枚举每个$T$,那么另一个$T$需要和当前的$T$夹角不超过$180$度,贡献为内部$D$的个数. 双指针后用前缀和查询区间的贡献即可. 时间复 ...

  8. JavaScrip两个函数的设置为回调

    1.javascript异步编程之回调函数 function fn2(data){ alert(data) } function fn1(callback){ var data = 12+1; cal ...

  9. BKDR Hash 函数实现

    K&R一书中提出的BKDR Hash算法,这里给出C函数实现,实际用的时候分布比较好而且实现简单.唯一不明白的就是为什么选择131这种模式的数字作为种子,隐隐有沃尔夫勒姆31号自动机的似曾相识 ...

  10. 游戏中Row所指代的是什么?

    游戏中Row所指代的是: HTML中row指的是行 SQL指的是列 其实,在翻译中来说,Row既是行也是列:准确一点讲,是横着的 现多指代的是行: