如果要完整實現自動化測試,需要把專案測試的結果資料等,通過傳送電子郵件的方式,通知需要看到測試報告的使用者。
1、設定郵箱授權碼
想要使用程式碼傳送郵件,首先要對郵箱進行設定:即設定郵箱授權碼。
(1)設定163郵箱
第一次設定授權碼:登入163郵箱 —> 設定 —> POP3/SMTP/IMAP —> 設定授權碼。
第n次設定授權碼: 登入163郵箱 —> 設定 —> POP3/SMTP/IMAP —> 在介面左側欄中有客戶端授權碼選項 —> 重置授權碼。
(2)設定QQ郵箱傳送郵件
- 找到QQ郵箱授權碼,開啟QQ郵箱 —> 設定 —> 賬號 —> POP3開啟服務 —> 開啟
(如果已經開啟了,不知道授權碼,就點溫馨提示裡面的‘生成授權碼’) - 發驗證簡訊獲取授權碼,照著提示發個簡訊,點我已傳送,就會收到授權碼了。
- 收到授權碼後複製,儲存下來,這個就可以當QQ郵箱的密碼了。
2、安裝zmail模組
我們需要適用Python中的zmail
模組,來實現郵件的傳送。
首先在cmd
命令列中,執行如下命令,來安裝zmail
模組。
pip install zmail
或者python -m pip install zmail
提示:在Python中適用
zmail
模組比使用smtplib
庫更加方便。
3、實現程式碼
"""
使用python的zmail模組實現傳送郵件
1.安裝zmail庫
pip install zmail
python -m pip install zmail
2.設定郵箱的授權碼
3.發郵件
1.編輯郵件內容
2.填寫發件人郵箱和授權碼
3.傳送郵件
"""
import zmail
# 1.準備傳送郵件的內容(字典格式)
# 注意subject少用測試或者test,郵箱會自動遮蔽,多了還會拉黑你。
mail_content = {
"subject": "郵件主題",
"content_text": "郵件內容,郵件正文",
"attachments": "../data/add_dep.xls" # 郵件附件(路徑)
}
# 2.使用傳送郵件的賬戶和密碼,密碼是授權碼
server = zmail.server("xxxxxxx@163.com", "xxxxxxx123456")
"""
說明:
關於郵客戶端設定的POP3,SMTP,IMAP地址,
zmail模組都幫助我們設定好了
點選zmail.server()方法即可檢視,如下:
def server(username: str, password: str,
smtp_host: Optional[str] = None,
smtp_port: Optional[int] = None,
smtp_ssl: Optional[bool] = None,
smtp_tls: Optional[bool] = None,
pop_host: Optional[str] = None,
pop_port: Optional[int] = None,
pop_ssl: Optional[bool] = None,
pop_tls: Optional[bool] = None,
config: Optional[str] = None,
timeout=60, debug=False, log: Optional[logging.Logger] = None,
auto_add_from=True, auto_add_to=True) -> MailServer:
"""
# 3.傳送郵件
# 引數:收件人,郵件內容
server.send_mail("yyyyyyy@163.com", mail_content)
# 給多人傳送郵件
# server.send_mail([收件人1, 收件人2], 郵件內容)
4、傳送html格式的郵件
這可以把html格式的測試報告,作為郵件的正文進行傳送。
同時也可以把測試報告作為附件一起傳送。
# 匯入zmail模組
import zmail模組
# 傳送HTML作為郵件內容
# 1.讀取html檔案
with open("report.html", "r", encoding="utf-8") as fp:
content_html = fp.read()
# 2.準備傳送郵件的內容(字典格式)
mail_content = {
"subject": "自動化測試報告",
"content_html": content_html,
"attachments": "report.html"
}
# 3.使用傳送郵件的賬戶和密碼,密碼是授權碼
server = zmail.server("xxxxxxx@163.com", "xxxxxxx123456")
# 4.傳送郵件
# 引數:收件人,郵件內容
server.send_mail("yyyyyyy@163.com", mail_content)
注意:
zmail.read_html()
可以讀取html檔案,但是read_html()
方法讀入純英文的頁面沒有問題。但讀取帶有中文的頁面,就會報錯,因為沒有做編碼處理。
所以我們會使用open()
方法來讀取html中的內容。
我們也可以把原始碼中的read_html()
方法修改一下,加上編碼即可,如下:
def read_html(html_path: str):
"""Get html content by its path."""
path = get_abs_path(html_path)
with open(path, 'r', encoding="utf-8") as f:
content = f.read()
return content
修改完之後就可以用下面程式碼,代替上面的1,2步了。
mail_content = {
"subject": "自動化測試報告",
"content_html": zmail.read_html("../report/report.html"),
"attachments": "report.html"
}