上文中,介绍了如何用Python+Selenium自动化测试项目实战:邮箱为例为例验证了登录成功的测试用例。那如果我们每次执行的结果都要去代码中查看,是不是也挺费劲的。应该怎么做呢?如果程序执行报错或者执行测试用例成功后,发送邮件通知我,咱就不用再打开代码去查看执行结果了,只需每天关注自己的邮件,执行失败的部分,进行提bug或者修改代码就可以了
如何用Python代码的形式实现自动发送SMTP邮件呢?
一、准备工作
需要进行开启要进行发件的邮箱的SMTP的授权,并生成授权码,在发送邮件是输入的密码为授权码,开启方式如下:
以qq邮箱为例:
设置——》账户——》下拉到“POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务”
——》开启服务:POP3/SMTP服务 (如何使用 Foxmail 等软件收发邮件?)——》点击开启并生成授权码(备注:开启授权需要发短信)。生成后的结果如图
二、还是同样的在进行写代码之前,首先我们先理一下思路:
1.发送邮件我们需要输入什么?
(1)标题
(2)内容
(3)谁来发?
(4)发给谁?
2.发送过程有哪些?
(1)建立邮箱连接协议
(2)登录邮箱,登录邮箱时需要发送方的授权码
(3)点击发送
三、理完思路后,我们如何实现呢?
1.输入数据
(1)邮件的标题,需要引入import Header 这个模块,用里面的Header()方法
(2)邮件的内容,需要import MIMEText这个模块,使用MIMEText()函数,进行内容的数据的构建
(3)谁来发,目前不清楚,但是可以用一个请输入:from_email=input(‘请输入发件人邮箱名:’)
(4)发给谁,to_email=input(‘请输入接收人邮箱’)
2.发送过程:
(1)建立邮箱连接协议:
首先需要引入import smtplib模块,stmp=smtplib.SMTP(),建立连接:stmp.connect(‘smtp.qq.com’,25)
(2)登录邮箱,登录邮箱时需要发送方的授权码
授权码:pwd=input(‘请输入授权码:’)
登录:stmp.login(from_email,pwd)
(3)点击发送:stmp.sendmail()
四、以上分析完之后就可以进行代码实现了
1.首先我先把之前登录的邮箱登录这文中的代码封装成函数
from selenium import webdriver
import time
def email_login(url):#封装登录函数,url为形参,方便函数的调用
driver=webdriver.Chrome()#打开浏览器
driver.maximize_window()#最大化浏览器
driver.get(url)# 输入网址,并发送请求 ,得到页面显示
driver.find_element_by_id("lbNormal").click()
driver.switch_to.frame(driver.find_element_by_xpath("//div/div[3]/div[4]/div/div/iframe"))#
driver.find_element_by_name("email").send_keys("自己邮箱的用户名")
driver.find_element_by_name("password").send_keys("自己邮箱的密码")
driver.find_element_by_id("dologin").click()
driver.switch_to.default_content()#跳出frame
driver.implicitly_wait(5)#智能等待
result=driver.find_element_by_class_name("nui-tree-item-text").text#找到收件箱元素并返回文本
# print(result)
if result=='收件箱':
print("本条用例测试通过")
real_result="通过"
else:
print("本条用例执行失败")
real_result = "失败"
time.sleep(5)#
driver.quit()#关闭浏览器
return real_result
2.封装完成后,调用,并编写发送邮件的内容和执行发送的函数(如图):
from email.mime.text import MIMEText #说明发送的邮件内容为纯文本
from email.header import Header #用于构建邮件的标题
import smtplib #用于发送电子邮件
from public_class import email_public28 #从public_class 包中引入email_public28这个模块
def create_email_msg():
real_result=email_public28.email_login("https://mail.126.com/")#调用email_public28这个模块中的函数,输入实际参数
msg = MIMEText('执行用例的结果为:'+ real_result, 'plain', 'utf-8')#构建邮件的内容,类型'plain'纯文本 ,字符编码为utf-8
msg['Subject']=Header("登录用例执行结果:",'utf-8')#构建邮件的标题
return msg#返回标题和内容
#发送电子邮件
def send_email_msg():
from_email=input('请输入发件人邮箱名:')
pwd=input('请输入授权码:') #授权码而非邮箱密码
to_email=input('请输入接收人邮箱')
stmp=smtplib.SMTP() #SMTP邮件发送协议
stmp.connect('smtp.qq.com',25)#建立连接
stmp.login(from_email,pwd)#登录邮箱
real_result = create_email_msg() #调用邮件的内容的函数
stmp.sendmail(from_email,to_email,real_result.as_string()) #发送邮件
stmp.quit() #关闭连接
print('邮件发送成功')
if __name__ == '__main__':
send_email_msg()#调用发送邮件的函数