zoukankan      html  css  js  c++  java
  • 人生苦短,我学python之python+selenium run_all_case

    # coding=utf-8
    import unittest
    import time
    from common import HTMLTestRunner
    from email.mime.text import MIMEText
    from email.mime.multipart import MIMEMultipart
    import smtplib
    import os
    
    '''
    #### 下面三行代码python2报告出现乱码时候可以加上####
    import sys
    reload(sys)
    sys.setdefaultencoding('utf8')
    '''
    
    # 这个是优化版执行所有用例并发送报告,分四个步骤
    # 第一步加载用例
    # 第二步执行用例
    # 第三步获取最新测试报告
    # 第四步发送邮箱 (这一步不想执行的话,可以注释掉最后面那个函数就行)
    
    # 当前脚本所在文件真实路径
    cur_path = os.path.dirname(os.path.realpath(__file__))
    
    def add_case(caseName="case", rule="test*.py"):
        '''第一步:加载所有的测试用例'''
        case_path = os.path.join(cur_path, caseName)  # 用例文件夹
        # 如果不存在这个case文件夹,就自动创建一个
        if not os.path.exists(case_path):os.mkdir(case_path)
        print("test case path:%s"%case_path)
        # 定义discover方法的参数
        discover = unittest.defaultTestLoader.discover(case_path,
                                                      pattern=rule,
                                                      top_level_dir=None)
        print(discover)
        return discover
    
    def run_case(all_case, reportName="report"):
        '''第二步:执行所有的用例, 并把结果写入HTML测试报告'''
        now = time.strftime("%Y_%m_%d_%H_%M_%S")
        report_path = os.path.join(cur_path, reportName)  # 用例文件夹
        # 如果不存在这个report文件夹,就自动创建一个
        if not os.path.exists(report_path):os.mkdir(report_path)
        report_abspath = os.path.join(report_path, "result.html")
        print("report path:%s"%report_abspath)
        fp = open(report_abspath, "wb")
        runner = HTMLTestRunner.HTMLTestRunner(stream=fp,
                                               title=u'自动化测试报告,测试结果如下:',
                                               description=u'用例执行情况:')
    
        # 调用add_case函数返回值
        runner.run(all_case)
        fp.close()
    
    def get_report_file(report_path):
        '''第三步:获取最新的测试报告'''
        lists = os.listdir(report_path)
        lists.sort(key=lambda fn: os.path.getmtime(os.path.join(report_path, fn)))
        print (u'最新测试生成的报告: '+lists[-1])
        # 找到最新生成的报告文件
        report_file = os.path.join(report_path, lists[-1])
        return report_file
    
    def send_mail(sender, psw, receiver, smtpserver, report_file, port):
        '''第四步:发送最新的测试报告内容'''
        with open(report_file, "rb") as f:
            mail_body = f.read()
        # 定义邮件内容
        msg = MIMEMultipart()
        body = MIMEText(mail_body, _subtype='html', _charset='utf-8')
        msg['Subject'] = u"自动化测试报告"
        msg["from"] = sender
        msg["to"] = ",".join(receiver)     # 只能字符串
        msg.attach(body)
        # 添加附件
        att = MIMEText(open(report_file, "rb").read(), "base64", "utf-8")
        att["Content-Type"] = "application/octet-stream"
        att["Content-Disposition"] = 'attachment; filename= "report.html"'
        msg.attach(att)
        try:
            smtp = smtplib.SMTP()
            smtp.connect(smtpserver)                      # 连服务器
            smtp.login(sender, psw)
        except:
            smtp = smtplib.SMTP_SSL(smtpserver, port)
            smtp.login(sender, psw)                       # 登录
        smtp.sendmail(sender, receiver, msg.as_string())
        smtp.quit()
        print('test report email has send out !')
    
    if __name__ == "__main__":
        all_case = add_case()   # 1加载用例
        # # 生成测试报告的路径
        run_case(all_case)        # 2执行用例
        # # 获取最新的测试报告文件
        report_path = os.path.join(cur_path, "report")  # 用例文件夹
        report_file = get_report_file(report_path)  # 3获取最新的测试报告
        # #邮箱配置
        sender = "yoyo@qq.com"
        psw = "xxx"
        smtp_server = "smtp.qq.com"
        port = 465
        receiver = "yoyo@qq.com"
        send_mail(sender, psw, receiver, smtp_server, report_file, port)  # 4最后一步发送报告
  • 相关阅读:
    Ubuntu 14.04 配置FTP
    python 命名规范
    Windows 多用户远程访问 Ubuntu 14.04桌面
    ubuntu 安装Matlab 解决显示中文乱码
    形式参数、实际参数和值传递、引用传递
    关于Hibernate中的临时态, 持久态, 游离态
    HTTP错误
    SpringMVC注解
    java变量的命名使用规则
    字节流与字符流的区别详解
  • 原文地址:https://www.cnblogs.com/w770762632/p/8877574.html
Copyright © 2011-2022 走看看