python发送测试报告邮件
记录学习:
python实现自动发送邮件功能,也是自动化测试的一个重要场景。想要在自动化测试结果出来后,邮箱可以立刻受到结果邮件。
SMTP(Simple Mail Transfer Protocol)是简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。
python的smtplib模块对SMTP协议进行了简单封装,实现了方便的途径来发送邮件,使用SMTP的sendmail方法来发送邮件。
例1:发送HTML格式的邮件
我用的是163邮箱发送的,Server就是smtp.163.com,其他邮箱的则换成别的,还要先到163邮箱中去开启SMTP服务
最后邮箱也成功接收到邮件:
下面是发送自动化测试报告的邮件的,
get_report()方法用于获取最新的测试报告,上面已经通过变量获取到了测试报告的目录,然后使用os.listdir()方法获取目录下的所有文件及文件夹,利用sort()方法对目录下的文件及文件夹按时间重新排序。list[-1]取到的就是最新生成的文件。
图片接上:
最后邮箱也是成功收到了测试报告邮件:
附件通过浏览器打开;
这次练习遇到的一些问题:
①要使用SMTP协议得先去邮箱设置中开启这个服务
②smtp.login(user,pwd)
这里一开始输入的是邮箱地址和邮箱登录密码,结果在执行代码的时候报授权认证的错误
raise SMTPAuthenticationError(code, resp)
smtplib.SMTPAuthenticationError: (535, b'Error: authentication failed')
后面百度后问题是因为开启服务的时候有一个【授权码】,所以在代码中那个填密码的变量应该使用邮箱开启SMTP服务后出现的授权码,这样就可以成功进行发送邮件。
③get_report()获取最新的测试报告的这个方法中,之前一开始只是单纯的使用dirs.sort(),结果执行代码的时候一直没能取到最新的测试报告,后面翻阅了工具书改了下代码才成功了的,key=lambda fn:os.path.getmtime(report_path+'/'+fn)
dirs.sort(key=lambda fn:os.path.getmtime(report_path+'/'+fn))