python多進程執行自動化測試用例
multiprocessing 提供了本地和遠程的並發性,有效的通過全局解釋鎖(Global Interceptor Lock, GIL)來使用進程(而不是線程)。由於 GIL 的存在,在 CPU 密集型的程序當中,使用多線程並不能有效地利用多核 CPU 的優勢,因為一個解釋器在同一時刻只會有一個線程在執行。所以,multiprocessing 模塊可以充分的利用硬件的多處理器來進行工作。它支持 Unix 和Windows 系統上的運行。
例1:
from multiprocessing import Process
def f(name):
print ‘hello‘, name
if __name__ == ‘__main__‘:
p = Process(target=f, args=(‘bob‘,)) #使用Process創建一個進程,target 表示調用對象,args 表示調用對象的位置參數元組
p.start() #開始進程
p.join() #等待進程結束
運行結果:
hello bob
例2:
from multiprocessing import Process
import os
def info(title):
print title
print ‘module name:‘, __name__
if hasattr(os, ‘getppid‘): # 用於判斷系統是否包含 getppid方法
print ‘parent process:‘, os.getppid() #得到父進程 id
print ‘process id:‘, os.getpid() #得到本身進程 id
def f(name):
info(‘function f‘)
print ‘hello‘, name
if __name__ == ‘__main__‘:
info(‘main line‘)
p = Process(target=f, args=(‘bob‘,))
p.start()
p.join()
運行結果:
main line
module name: __main__
process id: 8972
function f
module name: __main__
process id: 10648
hello bob
例3:
我們創建了thread1和thread2兩個文件夾,分別放入了兩個測試用例;下面我們編寫all_tests_process.py文件來通過多進程來執行測試用例。
#coding=utf-8
import unittest, time, os, multiprocessing
import commands
from email.mime.text import MIMEText
import HTMLTestRunner
import sys
sys.path.append(‘\selenium_proces‘def EEEcreatsuite1():
casedir=[]
listaa=os.listdir(‘D:\\selenium_proces\\‘) #讀取selenium_proces 目錄下的文件/文件夾
for xx in listaa: #找到文件/文件夾的名包含“thread”的文件/文件夾添加到 casedir 數組中
if "thread" in xx:
casedir.append(xx)
print casedir
suite=[]
for n in casedir:
testunit=unittest.TestSuite()
discover=unittest.defaultTestLoader.discover(str(n),pattern=‘start_*.py‘,top_level_dir=r‘E:\\‘)
for test_suite in discover:
for test_case in test_suite:
testunit.addTests(test_case)
#print testunit
suite.append(testunit)
return suite,casedir
def EEEEEmultiRunCase(suite,casedir):
now = time.strftime(‘%Y-%m-%d-%H_%M_%S‘,time.localtime(time.time()))
filename = ‘D:\\selenium_python\\report\\‘+now+‘result.html‘
fp = file(filename, ‘wb‘)
proclist=[]
s=0
for i in suite:
runner = HTMLTestRunner.HTMLTestRunner(
stream=fp,
title=str(casedir[s])+u‘測試報告‘,
description=u‘用例執行情況:‘
)
proc = multiprocessing.Process(target=runner.run,args=(i,))
proclist.append(proc)
s=s+1
for proc in proclist:
proc.start()
for proc in proclist:
proc.join()
fp.close()
if __name__ == "__main__":
runtmp=EEEcreatsuite1()
EEEEEmultiRunCase(runtmp[0],runtmp[1])
python多進程執行自動化測試用例