美文网首页自动化测试笔记
从零搭建接口测试框架(七)——邮件与运行脚本

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

作者: 小楼_987f | 来源:发表于2019-05-17 19:07 被阅读10次

    七. 邮件与运行脚本

    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)
    

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/ykvoaqtx.html