1. 程式人生 > >python多進程執行自動化測試用例

python多進程執行自動化測試用例

getpid 結束 __main__ from 多線程 使用 commands rip 執行

  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多進程執行自動化測試用例