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多線程執行用例
相關文章
相關標籤/搜索