Python-Unittest多线程执行用例

前言php

  假设执行一条脚本(.py)用例一分钟,那么100个脚本须要100分钟,当你的用例达到一千条时须要1000分钟,也就是16个多小时。。。
  那么如何并行运行多个.py的脚本,节省时间呢?这就用到多线程了,理论上开2个线程时间节省一半,开5个线程,时间就缩短五倍了。
   项目结构
  1.项目结构跟以前的设计是同样的:
  · case test开头的.py用例脚本
   · common 放公共模块,如HTMLTestRunner
   · report 放生成的html报告
   · run_all.py 用于执行所有脚本
  2.case文件夹里面用例参考
# coding:utf-8
import unittest
from selenium import webdriver
import time
class Test1(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.driver = webdriver.Firefox()
def setUp(self):
self.driver.get("http://www.cnblogs.com/yoyoketang/")
def test_01(self):
time.sleep(3)
t = self.driver.title
print t
# 随便写的用例,没写断言
def test_02(self):
time.sleep(3)
t = self.driver.title
print t
h = self.driver.window_handles
print h
# 随便写的用例,没写断言
@classmethod
def tearDownClass(cls):
cls.driver.quit()
if __name__ == "__main__":
unittest.main()
   多线程执行
  1.多线程设计思路:
   · 先写一个run的函数
   · 保证for循环能跑的通
   · 在run函数上加个装饰器 @threads(n),n是线程数
   2.run_all参考代码
#!/usr/bin/env python # -*- coding:utf-8 -*-  #设置路径:Defualt Settings---Editor--File and Code Templates


import unittest import HTMLTestRunnerNew import os from tomorrow import threads # 获取路径# 当前脚本所在目录
curpath = os.path.dirname(os.path.realpath(__file__)) #测试用例路径
casepath = os.path.join(curpath, "case") #测试报告路径
reportpath = os.path.join(curpath, "report") def add_case(case_path=casepath, rule="test*.py"): '''加载全部的测试用例''' discover = unittest.defaultTestLoader.discover(case_path, pattern=rule,top_level_dir=None) return discover @threads(5) def run_case(all_case, report_path=reportpath, nth=0): '''执行全部的用例, 并把结果写入测试报告''' report_abspath = os.path.join(report_path, "result%s.html"%nth) with open(report_abspath, "wb+") as file: runner = HTMLTestRunnerNew.HTMLTestRunner(stream=file, title=u'自动化测试报告,测试结果以下:',description=u'用例执行状况:') # 调用add_case函数返回值
 runner.run(all_case) if __name__ == "__main__": # 用例集合
    cases = add_case() # 以前是批量执行,这里改为for循环执行
    for i, j in zip(cases, range(len(list(cases)))): run_case(i, nth=j)  # 执行用例,生成报告
        # print(i,j)

 

 
 3.生成报告,这里生成的报告是多个的,每一个.py脚本生成一个html的报告,接下来遇到的难点就是合并报告了
  如何把多个html报告合并成一个报告呢?
参考连接: http://www.51testing.com/html/80/n-3724680.html   Python-Unittest多线程执行用例
相关文章
相关标签/搜索