怎样从0开始搭建一个测试框架_5——邮件
来源:互联网 发布:二小姐捏脸数据 编辑:程序博客网 时间:2024/05/16 13:44
怎样从0开始搭建一个测试框架_5
我们已经有了日志、有了报告,生成报告之后需要给其他组员看,自然要有发邮件的功能。这块我们要用到smtplib和email库。
在utils中创建mail.py,初始化时传入全部所需数据,message是正文,可不填,path可以传list或者str;receiver支持多人,用”;”隔开就行
"""邮件类。用来给指定用户发送邮件。可指定多个收件人,可带附件。"""import reimport smtplibfrom email.mime.multipart import MIMEMultipartfrom email.mime.text import MIMETextfrom socket import gaierror, errorfrom utils.log import loggerclass Email: def __init__(self, server, sender, password, receiver, title, message=None, path=None): """初始化Email :param title: 邮件标题,必填。 :param message: 邮件正文,非必填。 :param path: 附件路径,可传入list(多附件)或str(单个附件),非必填。 :param server: smtp服务器,必填。 :param sender: 发件人,必填。 :param password: 发件人密码,必填。 :param receiver: 收件人,多收件人用“;”隔开,必填。 """ self.title = title self.message = message self.files = path self.msg = MIMEMultipart('related') self.server = server self.sender = sender self.receiver = receiver self.password = password def _attach_file(self, att_file): """将单个文件添加到附件列表中""" att = MIMEText(open('%s' % att_file, 'rb').read(), 'plain', 'utf-8') att["Content-Type"] = 'application/octet-stream' file_name = re.split(r'[\\|/]', att_file) att["Content-Disposition"] = 'attachment; filename="%s"' % file_name[-1] self.msg.attach(att) logger.info('attach file {}'.format(att_file)) def send(self): self.msg['Subject'] = self.title self.msg['From'] = self.sender self.msg['To'] = self.receiver # 邮件正文 if self.message: self.msg.attach(MIMEText(self.message)) # 添加附件,支持多个附件(传入list),或者单个附件(传入str) if self.files: if isinstance(self.files, list): for f in self.files: self._attach_file(f) elif isinstance(self.files, str): self._attach_file(self.files) # 连接服务器并发送 try: smtp_server = smtplib.SMTP(self.server) # 连接sever except (gaierror and error) as e: logger.exception('发送邮件失败,无法连接到SMTP服务器,检查网络以及SMTP服务器. %s', e) else: try: smtp_server.login(self.sender, self.password) # 登录 except smtplib.SMTPAuthenticationError as e: logger.exception('用户名密码验证失败!%s', e) else: smtp_server.sendmail(self.sender, self.receiver.split(';'), self.msg.as_string()) # 发送邮件 finally: smtp_server.quit() # 断开连接 logger.info('发送邮件"{0}"成功! 收件人:{1}。如果没有收到邮件,请检查垃圾箱,' '同时检查收件人地址是否正确'.format(self.title, self.receiver))
之后我们修改用例文件,执行完成后发送邮件:
import timeimport unittestfrom selenium import webdriverfrom selenium.webdriver.common.by import Byfrom utils.config import Config, DRIVER_PATH, DATA_PATH, REPORT_PATHfrom utils.log import loggerfrom utils.file_reader import ExcelReaderfrom utils.HTMLTestRunner import HTMLTestRunnerfrom utils.mail import Emailclass TestBaiDu(unittest.TestCase): URL = Config().get('URL') excel = DATA_PATH + '/baidu.xlsx' locator_kw = (By.ID, 'kw') locator_su = (By.ID, 'su') locator_result = (By.XPATH, '//div[contains(@class, "result")]/h3/a') def sub_setUp(self): self.driver = webdriver.Chrome(executable_path=DRIVER_PATH + '\chromedriver.exe') self.driver.get(self.URL) def sub_tearDown(self): self.driver.quit() def test_search(self): datas = ExcelReader(self.excel).data for d in datas: with self.subTest(data=d): self.sub_setUp() self.driver.find_element(*self.locator_kw).send_keys(d['search']) self.driver.find_element(*self.locator_su).click() time.sleep(2) links = self.driver.find_elements(*self.locator_result) for link in links: logger.info(link.text) self.sub_tearDown()if __name__ == '__main__': report = REPORT_PATH + '\\report.html' with open(report, 'wb') as f: runner = HTMLTestRunner(f, verbosity=2, title='从0搭建测试框架 灰蓝', description='修改html报告') runner.run(TestBaiDu('test_search')) e = Email(title='百度搜索测试报告', message='这是今天的测试报告,请查收!', receiver='...', server='...', sender='...', password='...', path=report ) e.send()
执行完成之后可以看到receiver收到了我们的报告。当然,在这块你有可能遇到很多问题,可以根据错误号去网上查询如网易帮助。一般有几种常见的错误:
- 账户密码出错
- 服务器sever出错,这个可以根据你的发送人的邮箱去网站或邮箱设置中查看到
- 邮箱没有开通smtp服务,一般在邮箱设置中
- 邮件被拦截,在title、message以及发送的文件中不要带明显乱码、广告倾向的字符
- sender跟loginuser不一致的问题,发送人必须是登录用户
所有的代码我都放到了GITHUB上传送,可以自己下载去学习,有什么好的建议或者问题,可以留言或者加我的QQ群:455478219讨论。
阅读全文
0 0
- 怎样从0开始搭建一个测试框架_5——邮件
- 怎样从0开始搭建一个测试框架_0——总章
- 怎样从0开始搭建一个测试框架_1——配置
- 怎样从0开始搭建一个测试框架_2——日志
- 怎样从0开始搭建一个测试框架_3——参数化
- 怎样从0开始搭建一个测试框架_4——报告
- 怎样从0开始搭建一个测试框架_6——PageObject
- 怎样从0开始搭建一个测试框架_7——接口
- 怎样从0开始搭建一个测试框架_8——断言
- 怎样从0开始搭建一个测试框架_9——抽取器
- 怎样从0开始搭建一个测试框架_10——数据生成器
- 怎样从0开始搭建一个测试框架_11——支持方法
- 怎样从0开始搭建一个既可以功能测试+又可以接口测试框架(灰蓝作品,qq号:396214358 )
- 从0开始,搭建SSM服务器框架
- 从0开始架构一个IOS程序—— 05— NavigationBar 搭建首页面
- 从0开始学习maven搭建spring+mybatis框架
- 从0开始搭建主流框架(纯代码)
- 从“0”开始搭建个人博客(4)——补充
- iOS事件传递响应机制
- Android中运行Tensorflow程序3-遇到的错误及解决
- Patrol Robot UVA
- c#静态方法和实例方法的内存分配问题
- $(document).ready(function() {})
- 怎样从0开始搭建一个测试框架_5——邮件
- php邮件发送
- Bootstrap基础16——modal提示框
- Struts2学习笔记(四)——Action详解
- ComponentOne 2017 V2版本正式发布
- CentOS7 rpm安装mysql 开放/修改端口 远程访问 开机自启
- HDU2062(Subset sequence)
- Android开发之神奇的Fading Edge,让你的View更有层次感!
- leetcode(543). Diameter of Binary Tree