zoukankan      html  css  js  c++  java
  • unittest 运行slenium(五)---运行代码并生成HTMLTestRunner报告

    整体代码如下:

    import os
    import sys
    import time
    import datetime
    import unittest
    import HTMLTestRunner
    
    # git config --global user.name “用户名”
    
    # git config --global user.email “邮箱”
    
    
    # 获取项目路径下的目录
    path_project = os.path.split(os.path.abspath(__file__))[0]
    os.chdir(path_project)
    
    # 将项目路径保存
    sys.path.append(path_project)
    
    # 获取当前文件所在目录
    CUR_PATH = os.path.dirname(os.path.realpath(__file__))
    
    # 设置时间格式
    day_now = time.strftime("%Y-%m-%d")
    time_now = time.strftime("%H-%M-%S")
    
    
    def add_case(case_name='Case', rule='test*.py'):
        # 加载所有的用例
        case_path = case_name
        # case_path = os.path.join(CUR_PATH,case_name)
        # 定义方法的参数
        discover = unittest.defaultTestLoader.discover(case_path,
                                                       pattern=rule,
                                                       top_level_dir=CUR_PATH)
        print("用例所在位置 %s  执行的文件 %s " % (case_path, rule))
        return discover
    
    
    def run_case(all_case, reportName='report', filename="filename"):
        # 1.1报告存放路径
        report_path = os.path.join(os.getcwd(), reportName)
    
        # 1.2报告根据时间来分类
        report_path = os.path.join(report_path, day_now)
        if not os.path.exists(report_path): os.mkdir(report_path)
    
        filename = "%s-%s.html" % (time_now, filename)
        report_abspath = os.path.join(report_path, filename)
    
        print("新创建报告文件所在位置 %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("最新报告名 %s" % lists[-1])
    
        # 找到最新生成的报告文件
        report_file = os.path.join(report_path, lists[-1])
        return report_file
    
    
    def run_main(file_name, rule='test*.py'):
        # 加载用例
        all_case = add_case(file_name, rule)
    
        # 运行文件所在目录为文件名
        file_name = str.split(file_name, '\')[-1]
    
        # 生成测试报告的路径
        run_case(all_case, filename=file_name)
    
        # 获取最新测试报告所在的文件路径
    
        report_path = os.path.join("report", day_now)  # 最新报告文件夹在项目中的路径
        report_path = os.path.join(CUR_PATH, report_path)  # 拼接项目
    
        # 获取最新的测试报告
        report_file = get_report_file(report_path)
        print("最新报告路径为{0}".format(report_file))
    
    
    def list_dir(file_dir):
        '''
            通过 listdir 得到的是仅当前路径下的文件名,不包括子目录中的文件,如果需要得到所有文件需要递归
        '''
        # print('
    
    <><><><><><> listdir <><><><><><>')
        # print("current dir : {0}".format(file_dir))
        file_dir = os.path.join(CUR_PATH, file_dir)
        dir_list = os.listdir(file_dir)
        file_name = []
        for cur_file in dir_list:
            # 获取文件的绝对路径
            path = os.path.join(file_dir, cur_file)
            if os.path.isfile(path):  # 判断是否是文件还是目录需要用绝对路径
                # print("{0} : is file!".format(cur_file))
                continue
            if os.path.isdir(path):
                # print("{0} : is dir!".format(cur_file))
                list_dir(path)  # 递归子目录
                file_name.append(cur_file)
        return file_name
    
    
    def start_loading_case():
        file_name = r'case'
        all_dir = list_dir(file_name)
    
        for dir in range(len(all_dir)):
            if "__pycache__" in all_dir[dir]:
                continue
            else:
                dir = os.path.join(file_name, all_dir[dir])
                print("需要运行的文件: %s" % dir)
                run_main(dir)
    
    
    def start_single_loading():
        run_main('demo', "test_*.py")
    
    
    if __name__ == '__main__':
        # 记录运行时间
        startTime = datetime.datetime.now()
        print("
    Start Run Time: %s
    " % startTime)
        # 指定case所在位置并自动运行位置下需要运行的test文件夹,并且每个文件夹都自动生成一个相应的html报告
        start_loading_case()
        # 指定需要运行的test文件夹,运行完毕之后只生成一个相应的html报告
        # start_single_loading()
        # 记录结束时间
        stopTime = datetime.datetime.now()
        print("
    Finish Run Time: %s
    " % stopTime)
        # 打印一共运行的时间
        print('
    Running time: %s
    ' % (stopTime - startTime), file=sys.stderr)

    项目所在位置:

    https://github.com/namexiaohuihui/demotest

    个人记录而已,不理解的可以留言。请勿直接喷

  • 相关阅读:
    如何在Ubuntu上安装Wine 2.6
    51nod 1012 最小公倍数LCM
    二次urldecode注入
    CTF中的变量覆盖问题
    redis的bind误区
    宽字节注入原理
    PHP靶场-bWAPP环境搭建
    xxe-lab学习
    PHP代码审计之create_function()函数
    SSRF打认证的redis
  • 原文地址:https://www.cnblogs.com/xiaodingdong/p/11753387.html
Copyright © 2011-2022 走看看