有人說測試學習多進程(或多線程)有啥用?額告訴你很有用,特別是在自己寫性能測試工具時就可以用到,而且非常方便
這里只介紹非常簡單的多進程模塊(multiprocessing.Process)
代碼如下:
#導入模塊
from multiprocessing import Process import time,os,random
#創建一個測試函數subFunc def subFunc(param,ppid): sleepTime = random.randint(1,10) print('Begin %s subProcess,and will wait %s,subPID is %s,mainPID is %s'%(param,sleepTime,os.getpid(),ppid)) time.sleep(sleepTime) print('End %s subProcess...'%param)
#主程序 if __name__ == '__main__': param = 5 subProcessList = [] print('Begin mainProcess...') for i in range(param): p = Process(target=subFunc,args=(i+1,os.getpid(),)) p.start() subProcessList.append(p) for p in subProcessList: p.join() print('End mainProcess...')
看着代碼是不是很簡單?答案是肯定的,用得多了自然也就簡單了,當然這是最簡單的調用
通過Process()來創建進程,然后使用start啟動進程,最后使用join在所有子進程結束后再執行后面的命令,執行結果如下:
對於需要創建大量子進程的程序來說,不能這么寫,因為我們可以使用進程池模塊(Pool)來實現
具體代碼如下:
#導入模塊 from multiprocessing import Pool import time,os,random #創建一個測試函數subFunc def subFunc(param,ppid): sleepTime = random.randint(1,10) print('Begin %s subProcess,and will wait %s,subPID is %s,mainPID is %s'%(param,sleepTime,os.getpid(),ppid)) time.sleep(sleepTime) print('End %s subProcess...'%param) if __name__ == '__main__': param = 5 print('Begin mainProcess...') #創建進程池 p = Pool(5) for i in range(param): p.apply_async(subFunc,args=(i+1,os.getpid(),)) #關閉進程 p.close() #等待子進程結束后在執行后續命令 p.join() print('End mainProcess...')
也是很簡單的,每步的動作注釋代碼里都有,就不一一解釋了,執行結果如下(和上面的Process類似):
還是那句話,測試人員要向多維度多方向發展,特別是向開發靠攏,把學到的開發知識應用於測試當中,最終成為一個測試開發的復合型人才,這才是未來測試的出路,只做單一的測試只會被淘汰