自动化测试笔记

从零搭建接口测试框架(七)——邮件与运行脚本

2019-05-17  本文已影响10人  小楼_987f

七. 邮件与运行脚本

1. 邮件

在第四小节中还遗留了一个 sendMail.py 文件没有说明,它的功能是接收新生成的测试报告名称,将该报告作为附件装载到邮件中,发送出去,收件人在配置文件 config.ini 中指定。内容如下:

  1 import os
  2 import configparser
  3 import smtplib
  4 from email.mime.multipart import MIMEMultipart
  5 from email.mime.application import MIMEApplication
  6 from .getPath import GetPath
  7 
  8 
  9 class SendEmail():
 10     def __init__(self):
 11         # config.ini文件存放路径
 12         config_path = GetPath().get_conf_path()
 13         # 读取配置文件config.ini 
 14         config = configparser.ConfigParser()
 15         config.read(config_path)
 16         self.receiver = config.get('email', 'receiver')    # 获取[email]中指定的收件人
 17         self.subject = config.get('email', 'subject')     # 获取[email]中指定的主题
 18 
 19         self.username = os.environ.get('username')   # 从环境变量获取邮箱账户
 20         self.password = os.environ.get('password')   # 从环境变量获取邮箱密码
 21 
 22 
 23     def sendEmail(self, fname):
 24         """
 25         发送邮件
 26         """
 27         # 测试报告文件完整路径
 28         report_path = os.path.join(GetPath().get_report_dir(), fname)
 29 
 30         msg = MIMEMultipart()
 31         msg["from"] = self.username
 32         msg["to"] = self.receiver
 33         msg["subject"] = self.subject + ': ' + fname
 34 
 35         # 装载附件
 36         part = MIMEApplication(open(report_path, 'rb').read())
 37         part.add_header('Content-Disposition', 'attachment', filename=fname)
 38         msg.attach(part)
 39 
 40         # 发送
 41         s = smtplib.SMTP("smtp.sina.com", timeout=30)
 42         s.login(str(self.username), str(self.password))
 43         s.sendmail(self.username, self.receiver, msg.as_string())
 44         s.close

2. 运行脚本

为了避免每次测试都要输入一长串的命令,我们编写一个简单的脚本 run.py 来运行测试、生成报告,并调用 sendEmail.py 中的方法把报告发送给特定的邮箱,文件内容如下:

  1 #!/usr/bin/python
  2 import os
  3 import datetime
  4 import configparser
  5 from Common.sendEmail import SendEmail
  6 from Common.getPath import GetPath
  7 
  8 # 当前时间
  9 now = str(datetime.datetime.now())[0:19]
 10 # 测试报告名
 11 report_name = now.replace(' ', '-') + '-report.html'
 12 # 测试报告完整路径
 13 report_path = os.path.join(GetPath().get_report_dir(), report_name)
 14 
 15 # config.ini文件存放路径
 16 config_path = GetPath().get_conf_path()
 17 # 读取配置文件config.ini
 18 config = configparser.ConfigParser()
 19 config.read(config_path)
 20 # 获取[email]中指定的active值
 21 active = config.get('email', 'active')
 22 
 23 def run_test():
 24     os.system("pytest -q ./test_main.py --html=../Report/%s  --self-contained-html" %(report_name))
 25     
 26 if __name__ == '__main__':
 27     run_test() 
 28     # 如果已邮件功能已激活且测试报告成功生成
 29     if active == 'yes' and os.path.isfile(report_path):
 30         SendEmail().sendEmail(report_name)

然后,我们为脚本文件添加可执行权限:chmod +x run.py
现在,可以直接在控制台输入./run.py运行测试了:

>>> ./run.py 
.......                                                                                                   [100%]
=============================================== warnings summary ================================================
/usr/lib/python3.7/site-packages/requests/__init__.py:91
  /usr/lib/python3.7/site-packages/requests/__init__.py:91: RequestsDependencyWarning: urllib3 (1.25.2) or chardet (3.0.4) doesn't match a supported version!
    RequestsDependencyWarning)

-- Docs: https://docs.pytest.org/en/latest/warnings.html
------- generated html file: /home/user1/ProgramFile/IntTestDemo/Report/2019-05-17-17:25:16-report.html -------
7 passed, 1 warnings in 0.30 seconds
测试报告2019-05-17-17:25:16-report.html,已发送!
收到的邮件: 测试报告邮件.png

4. 嗯

>>> cd ../    # 回到根目录IntTestDemo
>>> git add .    # 将项目改动放入暂存区
>>> git commit    # 将暂存区的的修改提交到当前分支,m参数表示添加注释
>>> git push origin master    # 推送到远程服务器(github)
上一篇下一篇

猜你喜欢

热点阅读