一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

第7章——Python郵件發(fā)送

 飛絮輕 2021-06-21

Python郵件發(fā)送

SMTPSimple Mail Transfer Protocol

· 即簡(jiǎn)單郵件傳輸協(xié)議。它是一組用于從源地址到目的地址傳輸郵件的規(guī)范,通過(guò)它來(lái)控制郵件的中轉(zhuǎn)方式。SMTP 協(xié)議屬于TCP/IP協(xié)議簇,它幫助每臺(tái)計(jì)算機(jī)在發(fā)送或中轉(zhuǎn)信件時(shí)找到下一個(gè)目的地。SMTP 服務(wù)器就是遵循 SMTP 協(xié)議的發(fā)送郵件服務(wù)器。

SMTP 認(rèn)證

· SMTP 認(rèn)證,簡(jiǎn)單地說(shuō)就是要求必須在提供了賬戶名和密碼之后才可以登錄 SMTP 服務(wù)器,這就使得那些垃圾郵件的散播者無(wú)可乘之機(jī)。

· 增加 SMTP 認(rèn)證的目的是為了使用戶避免受到垃圾郵件的侵?jǐn)_。

更多資料: http://help.163.com/09/1223/14/5R7P6CJ600753VB8.html

smtplib模塊

Python內(nèi)置對(duì)SMTP的支持,可以發(fā)送純文本郵件、HTML郵件以及帶附件的郵件。

Python對(duì)SMTP支持有smtplibemail兩個(gè)模塊,email負(fù)責(zé)構(gòu)造郵件,smtplib負(fù)責(zé)發(fā)送郵件。

注意:使用前需要開(kāi)啟SMTP服務(wù)

案例:使用163郵箱來(lái)結(jié)合smtp模塊發(fā)送郵件 準(zhǔn)備工作:

import smtplib                           #發(fā)送郵件模塊

from email.mime.text import MIMEText    #定義郵件內(nèi)容

from email.header import Header         #定義郵件標(biāo)題

#發(fā)送郵箱服務(wù)器

smtpserver='smtp.163.com'

#發(fā)送郵箱用戶名密碼

user='yuexiaolu2015@163.com'

password='…'

#發(fā)送和接收郵箱

sender='yuexiaolu2015@163.com'

receive='yuexiaolu2015@126.com'

#發(fā)送郵件主題和內(nèi)容

subject='Web Selenium 自動(dòng)化測(cè)試報(bào)告'

content='<html><h1 style="color:red">我要自學(xué)網(wǎng),自學(xué)成才!</h1></html>'

#HTML郵件正文

msg=MIMEText(content,'html','utf-8')

msg['Subject']=Header(subject,'utf-8')

msg['From']='yuexiaolu2015@163.com'

msg['To'] = 'yuexiaolu2015@126.com'

#SSL協(xié)議端口號(hào)要使用465

smtp = smtplib.SMTP_SSL(smtpserver, 465)

#HELO 向服務(wù)器標(biāo)識(shí)用戶身份

smtp.helo(smtpserver)

#服務(wù)器返回結(jié)果確認(rèn)

smtp.ehlo(smtpserver)

#登錄郵箱服務(wù)器用戶名和密碼

smtp.login(user,password)

print("開(kāi)始發(fā)送郵件...")

smtp.sendmail(sender,receive,msg.as_string())

smtp.quit()

print("郵件發(fā)送完成!")

發(fā)送帶附件的郵件

案例:發(fā)送E:\Python_script\目錄下 logo.png圖片文件到指定的郵箱

import smtplib                           #發(fā)送郵件模塊

from email.mime.text import MIMEText    #定義郵件內(nèi)容

from email.mime.multipart import MIMEMultipart  #用于傳送附件

#發(fā)送郵箱服務(wù)器

smtpserver='smtp.163.com'

#發(fā)送郵箱用戶名密碼

user='yuexiaolu2015@163.com'

password='070337shu'

#發(fā)送和接收郵箱

sender='yuexiaolu2015@163.com'

receives=['yuexiaolu2015@126.com','yuexiaolu2015@sina.com']

#發(fā)送郵件主題和內(nèi)容

subject='Web Selenium 附件發(fā)送測(cè)試'

content='<html><h1 style="color:red">我要自學(xué)網(wǎng),自學(xué)成才!</h1></html>'

#構(gòu)造附件內(nèi)容

send_file=open(r"E:\Python_script\logo.png",'rb').read()

att=MIMEText(send_file,'base64','utf-8')

att["Content-Type"]='application/octet-stream'

att["Content-Disposition"]='attachment;filename="logo.png"'

#構(gòu)建發(fā)送與接收信息

msgRoot=MIMEMultipart()

msgRoot.attach(MIMEText(content, 'html', 'utf-8'))

msgRoot['subject']=subject

msgRoot['From']=sender

msgRoot['To'] = ','.join(receives)

msgRoot.attach(att)

#SSL協(xié)議端口號(hào)要使用465

smtp = smtplib.SMTP_SSL(smtpserver, 465)

#HELO 向服務(wù)器標(biāo)識(shí)用戶身份

smtp.helo(smtpserver)

#服務(wù)器返回結(jié)果確認(rèn)

smtp.ehlo(smtpserver)

#登錄郵箱服務(wù)器用戶名和密碼

smtp.login(user,password)

print("Start send email...")

smtp.sendmail(sender,receives,msgRoot.as_string())

smtp.quit()

print("Send End!")

 

整合測(cè)試報(bào)告發(fā)送

案例獲取…\Test_Baidu\test_report目錄下最新的測(cè)試報(bào)告

import os #用于訪問(wèn)操作系統(tǒng)功能的模塊

#報(bào)告存放位置

report_dir='./test_report'

#os.listdir() 方法用于返回指定的文件夾包含的文件或文件夾的名字的列表

lists=os.listdir(report_dir)

#按時(shí)間順序?qū)υ撃夸浳募A下面的文件進(jìn)行排序

lists.sort(key=lambda fn:os.path.getatime(report_dir+'\\'+fn))

print(lists)

print("latest report is :"+lists[-1])

#輸出最新報(bào)告的路徑

file=os.path.join(report_dir,lists[-1])

print(file)

Python os模塊相關(guān)知識(shí): http://www.cnblogs.com/MnCu8261/p/5483657.html  

lambda 介紹 http://www.cnblogs.com/evening/archive/2012/03/29/2423554.html 

發(fā)送測(cè)試報(bào)告

案例:將E:\Python_script\unittest\Test_Baidu生成的最新測(cè)試報(bào)告發(fā)送到指定郵箱。

import unittest

from BSTestRunner import BSTestRunner

import time

import smtplib                           #發(fā)送郵件模塊

from email.mime.text import MIMEText    #定義郵件內(nèi)容

from email.header import Header         #定義郵件標(biāo)題

import os

def send_mail(latest_report):

    f=open(latest_report,'rb')

    mail_content=f.read()

    f.close()

    smtpserver='smtp.163.com'

    # 發(fā)送郵箱用戶名密碼

    user = 'yuexiaolu2015@163.com'

    password = '…'

    # 發(fā)送和接收郵箱

    sender = 'yuexiaolu2015@163.com'

    receives = ['yuexiaolu2015@126.com', 'yuexiaolu2015@sina.com']

    # 發(fā)送郵件主題和內(nèi)容

    subject = 'Web Selenium 自動(dòng)化測(cè)試報(bào)告'

    # HTML郵件正文

    msg = MIMEText(mail_content, 'html', 'utf-8')

    msg['Subject'] = Header(subject, 'utf-8')

    msg['From'] = sender

    msg['To'] = ','.join(receives)

    smtp = smtplib.SMTP_SSL(smtpserver, 465)

    # HELO 向服務(wù)器標(biāo)識(shí)用戶身份

    smtp.helo(smtpserver)

    # 服務(wù)器返回結(jié)果確認(rèn)

    smtp.ehlo(smtpserver)

    # 登錄郵箱服務(wù)器用戶名和密碼

    smtp.login(user, password)

    print("Start send Email...")

    smtp.sendmail(sender, receives, msg.as_string())

    smtp.quit()

    print("Send Email end!")

def latest_report(report_dir):

    lists = os.listdir(report_dir)

    # 按時(shí)間順序?qū)υ撃夸浳募A下面的文件進(jìn)行排序

    lists.sort(key=lambda fn: os.path.getatime(report_dir + '\\' + fn))

    print(("new report is :" + lists[-1]))

    file = os.path.join(report_dir, lists[-1])

    print(file)

    return file

if __name__ == '__main__':

    test_dir='./test_case'

    report_dir='./test_report'

    discover = unittest.defaultTestLoader.discover(test_dir, pattern="test*.py")

    now = time.strftime("%Y-%m-%d %H_%M_%S")

    report_name = report_dir + '/' + now + 'result.html'

    with open(report_name, 'wb') as f:

        runner = BSTestRunner(stream=f, title="Test Report", description="baidu search")

        runner.run(discover)

    f.close()

    #h獲取最新測(cè)試報(bào)告

    latest_report=latest_report(report_dir)

    #發(fā)送郵件報(bào)告

    send_mail(latest_report)

163郵箱發(fā)生失敗的常見(jiàn)問(wèn)題

http://help.163.com/09/1224/17/5RAJ4LMH00753VB8.html

補(bǔ)充知識(shí)點(diǎn)——By 元素定位

from selenium import webdriver

from selenium.webdriver.common.by import By

from  time import sleep

driver=webdriver.Firefox()

driver.get("http://www.baidu.com/")

driver.implicitly_wait(5)

driver.find_element(By.ID,'kw').clear()

driver.find_element(By.NAME,'wd').send_keys("Selenium ")

driver.find_element(By.CLASS_NAME,'s_ipt').send_keys("自學(xué)網(wǎng) ")

driver.find_element(By.CSS_SELECTOR,"#kw").send_keys("自動(dòng)化測(cè)試")

sleep(3)

driver.find_element(By.ID,'su').click()

sleep(3)

driver.quit()

· find_element(By.ID,"loginName")

· find_element(By.NAME,"SubjectName")

· find_element(By.CLASS_NAME,"u-btn-levred")

· find_element(By.TAG_NAME,"input")

· find_element(By.LINK_TEXT,"退出")

· find_element(By.PARTIAL_LINK_TEXT,"退")

· find_element(By.XPATH,".//*[@id='Title")

· find_element(By.CSS_SELECTOR,"[type=submit]")

補(bǔ)充知識(shí)點(diǎn)——方法的參數(shù)個(gè)數(shù)

def fun_args1(args):

    print("args is %s" %args)

def fun_args2(args1,args2):

    print("args is %s and %s" %(args1,args2))

def fun_var_args(*args):

    for value in args:

        print("args:", value)

# fun_args1('51zxw')

# fun_args1()

# fun_args2('51zxw','Python')

# fun_args2('51zxw')

fun_var_args("Python")

fun_var_args("hello","51zxw")

fun_var_args("Selenium",'Python','51zxw')

fun_var_args()

Page Object

Page ObjectSelenium自動(dòng)化測(cè)試項(xiàng)目開(kāi)發(fā)實(shí)踐的最佳設(shè)計(jì)模式之一,通過(guò)對(duì)界面元素和功能模塊的封裝減少冗余代碼,同時(shí)在后期維護(hù)中,若元素定位或功能模塊發(fā)生變化,只需要調(diào)整頁(yè)面元素或功能模塊封裝的代碼,提高測(cè)試用例的可維護(hù)性。

BasePage.py

from  time import sleep

class Page():

    '''頁(yè)面基礎(chǔ)類'''

    #初始化

    def __init__(self, dirver):

        self.base_url = 'http://localhost'

        self.driver = dirver

        self.timeout = 10

    #打開(kāi)不同的子頁(yè)面

    def _open(self, url):

        url_ = self.base_url + url

        print("Test page is%s" %url_)

        self.driver.maximize_window()

        self.driver.get(url_)

        sleep(2)

        assert self.driver.current_url == url_, 'Did ont land on %s' % url_

    def open(self):

        self._open(self.url)

    #元素定位方法封裝

    def find_element(self,*loc):

        return self.driver.find_element(*loc)

LoginPage.py

from BasePage import *

from selenium.webdriver.common.by import By

class LoginPage(Page):

    '''首頁(yè)登錄頁(yè)面'''

    url='/'

    #定位器

    username_loc=(By.NAME,'username')

    password_loc=(By.NAME,'password')

    submit_loc=(By.NAME,'Submit')

    #用戶名輸入框元素

    def type_username(self,username):

        self.find_element(*self.username_loc).clear()

        self.find_element(*self.username_loc).send_keys(username)

    #密碼輸入框元素

    def type_password(self,password):

        self.find_element(*self.password_loc).clear()

        self.find_element(*self.password_loc).send_keys(password)

    #登錄按鈕元素

    def type_submit(self):

        self.find_element(*self.submit_loc).click()

#登錄功能模塊封裝

def test_user_login(driver,username,password):

    '''測(cè)試用戶名密碼是否可以登錄'''

    login_page=LoginPage(driver)

    login_page.open()

    login_page.type_username(username)

    login_page.type_password(password)

    login_page.type_submit()

loin_test.py

from LoginPage import *

from selenium import webdriver

driver=webdriver.Firefox()

username = '51zxw'

password = '123456'

test_user_login(driver, username, password)

sleep(3)

driver.quit()

參考文檔:

http://www./ 

http://blog.csdn.net/menglei8625/article/details/7721746 

http://blog.csdn.net/bravezhe/article/details/7659198 

http://blog.csdn.net/spritzdance/article/details/5362220

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    欧美黄色成人真人视频| 亚洲男人的天堂色偷偷| 99久久免费中文字幕| 精品国产丝袜一区二区| 国产高清一区二区不卡| 久久免费精品拍拍一区二区| 日韩三极片在线免费播放| 欧美日韩少妇精品专区性色| 午夜精品久久久免费视频| 国产成人高清精品尤物| 九九热视频经典在线观看| 亚洲乱妇熟女爽的高潮片| 精品人妻少妇二区三区| 亚洲一区二区三区中文久久| 亚洲精品熟女国产多毛| 加勒比东京热拍拍一区二区| 国产一区二区三区色噜噜| 欧美成人免费夜夜黄啪啪 | 亚洲国产性感美女视频| 亚洲国产av在线视频| 天海翼高清二区三区在线| 久久国内午夜福利直播| 午夜激情视频一区二区| 又大又紧又硬又湿又爽又猛| 中文字幕久久精品亚洲乱码| 欧美黑人在线一区二区| 青青操成人免费在线视频| 最近最新中文字幕免费| 精品人妻一区二区三区四区久久| 手机在线观看亚洲中文字幕| 国产成人高清精品尤物| 激情内射日本一区二区三区| 亚洲日本韩国一区二区三区| 中文字幕人妻一区二区免费 | 国产无摭挡又爽又色又刺激| 九九蜜桃视频香蕉视频| 空之色水之色在线播放| 男人大臿蕉香蕉大视频| 在线视频免费看你懂的| 91久久精品国产一区蜜臀| 亚洲免费观看一区二区三区|