python线程池(threadpool)实现多线程生成HTMLTestRunner测试报告

#python线程池(threadpool)
#pip install threadpool

"""
使用介绍

(1)引入threadpool模块

(2)定义线程函数

(3)创建线程 池threadpool.ThreadPool()

(4)创建需要线程池处理的任务即threadpool.makeRequests()

(5)将创建的多个任务put到线程池中,threadpool.putRequest

(6)等到所有任务处理完毕theadpool.pool()
"""

import unittest
import time
from HTMLTestRunner import HTMLTestRunner
from framework_Var_A.var_A import *
import os
import threadpool


def add_case():
    '''加载所有的测试用例'''
    test_dir = testcase_path
    # 指定测试用例所在的目录

    # 查找测试用例目录里的用例,赋值给discover
    discover = unittest.defaultTestLoader.discover(testcase_path, pattern='test_*.py')
    print(discover,type(discover))
    return discover


def run_case(all_cases):
    t1 = time.time()
    print('start:%s' % time.ctime())
    # 获取当前时间并格式化
    now = time.strftime('%Y-%m-%d %H-%M-%S')
    # 指定测试报告的存放路径,文件名中加了当前时间,以便每次生成不同的报告
    reportfile = os.path.join(report_path, now + 'result.html')

    # 打开报告
    fp = open(reportfile, "wb")
    # 定义报告存放路径
    runner = HTMLTestRunner(stream=fp, title=u"多线程测试报告", description=u"用例执行情况:")

    runner.run(all_cases)
    # 执行测试用例
    fp.close()
    # 关闭报告文件,不关的话生成的报告是空的
    t2=time.time()
    print('end:%s' % time.ctime())
    print('总共花费时间:%s' % (t2-t1))

if __name__ == "__main__":
    cases = add_case()
    #run_case(cases)


    pool = threadpool.ThreadPool(10)
    requests = threadpool.makeRequests(run_case, cases)
    [pool.putRequest(req) for req in requests]
    pool.wait()

 

你可能感兴趣的:(selenium自动化,unittest)