码迷,mamicode.com
首页 > 编程语言 > 详细

python多进程执行自动化测试用例

时间:2018-07-21 18:28:53      阅读:1358      评论:0      收藏:0      [点我收藏+]

标签:cal   command   turn   ase   intercept   art   tmp   有一个   参数   

  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多进程执行自动化测试用例

标签:cal   command   turn   ase   intercept   art   tmp   有一个   参数   

原文地址:https://www.cnblogs.com/xiaohuhu/p/9347489.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!