自动化测试框架搭建-邮件-5

       在前面生成自动化框架中讲解了一步步生成日志,报告。生成测试报告之后需要提交给他人查看,自然需要用到右键发送的功能,这里学习一下smtplib 和 email 库。

     在utils中创建mail.py,初始化时传入全部所需数据,message是正文,可不填,path可以传list或者str;receiver支持多人,用”;”隔开就行

#coding:utf-8

'''
    邮件类。用来给指定用户发送邮件。可指定多个收件人,可带附件。
'''
import re
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from socket import gaierror,error
from Framework.utils.log1 import logger

class Email():
    def __init__(self,server,sender,password,receiver,title,message = None,path = None):
        '''
        intial Email
        :param server:smtp server,M
        :param sender:
        :param password:
        :param receiver:
        :param title:
        :param message:the content of mail
        :param path:附件路径,可传入list(多附件)或str(单个附件),非必填。
        '''
        self.title = title
        self.message = message
        self.files = path
        self.msg = MIMEMultipart('related')
        self.server = server
        self.sender = sender
        self.receiver = receiver
        self.passwd = password

    def _attach_file(self,att_file):
        '''
        将单个文件添加到附件列表中
        :param att_file:
        :return:
        '''
        att = MIMEText(open('%s' % att_file,'rb'),'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

        #the content of mail
        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)
        except (gaierror and error) as e:
            logger.exception("邮件发送失败,无法连接到SMTP服务器,检查网络以及SMTP服务器。%s", e)
        else:
            try:
                smtp_server.login(self.sender,self.passwd)#login
            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))

修改test_baidu6.py,完成测试用例的执行并进行邮件的发送

#coding:utf-8

"""test_baidu6.py.add a function of send mail"""

import time
import unittest
from selenium import webdriver
from selenium.webdriver.common.by import By
from Framework.utils.config import Config, DRIVER_PATH, DATA_PATH,REPORT_PATH
from Framework.utils.log import logger
from Framework.utils.file_reader1 import ExcelReader
from Framework.utils.mail import Email
import HTMLTestRunner

class 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)
        print "DATA_PATH:",DATA_PATH

    def sub_tearDown(self):
        self.driver.quit()

    def test_search(self):
        datas = ExcelReader(self.excel).data
        print datas
        for d in datas:
            print "d['search']",d['search']
            self.sub_setUp()
            print "self.driver",self.driver
            self.driver.find_element(*self.locator_kw).send_keys(d['search'])
            self.driver.find_element(*self.locator_su).click()
            time.sleep(1)

            #开始是find_element,由于定位的是信息是一组信息(selenium和python selenium),因此需要使用find_elements()进行定位
            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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值