0
点赞
收藏
分享

微信扫一扫

应用于自动化测试项目

雷亚荣 2024-05-19 阅读 19

为实现多进程运行测试用例,我需要对文件结构进行调整:

/test_project/thread1/baidu_sta.py -----测试用例

/thread1/__init__.py

/thread2/youdao_sta.py -----测试用例

/thread2/__init__.py

/report/ ----测试报告目录

/all_tests_pro.py

我们创建 了 thread1 和 thread2 两个文件 夹,分别放入 了两个测试用 例;下面我们 编写

all_tests_process.py 文件来通过多进程来执行测试用例。

test_all_pro.py

#coding=utf-8

import unittest, time, os, multiprocessing

import HTMLTestRunner

#查找多有含有 thread 的文件,文件夹

def EEEcreatsuit():

casedir=[]

listaa=os.listdir('/home/fnngj/test_project')

for xx in listaa:

if "thread" in xx:

casedir.append(xx)

suite=[]

for n in casedir:

testunit=unittest.TestSuite()

discover=unittest.defaultTestLoader.discover(n,

pattern ='test*.py',

top_level_dir=n)

print discover

for test_suite in discover:

for test_case in test_suite:

testunit.addTests(test_case)

suite.append(testunit)

print "===casedir:====",casedir

print "+++++++++++++++++++++++++++++++++++++++++++++++"

print "!!!suite:!!!",suite

return suite,casedir

#多线程运行测试套件,将结果写入 HTMLTestRunner 报告

def EEEEEmultiRunCase(suite,casedir):

now = time.strftime("%Y-%m-%d-%H_%M_%S",time.localtime(time.time()))

filename = '/home/fnngj/test_project/report/'+now+'result.html'

fp = file(filename, 'wb')

proclist=[]

s=0

for i in suite:

runner = HTMLTestRunner.HTMLTestRunner(

stream=fp,

title=u'测试报告',

description=u'用例执行情况:'

)

proc = multiprocessing.Process(target=runner.run(i),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=EEEcreatsuit()

EEEEEmultiRunCase(runtmp[0],runtmp[1])

all_tests_pro.py 程序稍微复杂,我们分段来进行讲解。

在 EEEcreatsuite1()函数中:

test_all_pro.py

……

casedir=[]

listaa=os.listdir('/home/fnngj/test_project')

for xx in listaa:

if "thread" in xx:

casedir.append(xx)

……

定义 casedir 数组,读取 test_project 目录下的文件夹,找到文件夹的名包含“thread”的文件夹

添加到 casedir 数组中(本例中为 thread1 和 thread2 两个文件夹)。

test_all_pro.py

……

suite=[]

for n in casedir:

testunit=unittest.TestSuite()

discover=unittest.defaultTestLoader.discover(n,

pattern ='test*.py',

top_level_dir=n)

print discover

for test_suite in discover:

for test_case in test_suite:

testunit.addTests(test_case)

suite.append(testunit)

……

定位 suite 数组,for 循环读取 casedir 数组中的数据(即 thread1 和 thread2 两个文件夹)。通过

discover 分别读取文件夹下匹配 test*.py 规则的用例文件,将所有用例文件添加到 testunit 测试条件

中,再将测试套件追加到定义的 suite 数组中。

在整个 EEEcreatsuite1()函数中 返回 suite 和 casedir 两个数组的值。

在 EEEEEmultiRunCase 函数中:

test_all_pro.py

……

def EEEEEmultiRunCase(suite,casedir):

now = time.strftime("%Y-%m-%d-%H_%M_%S",time.localtime(time.time()))

filename = '/home/fnngj/test_project/report/'+now+'result.html'

fp = file(filename, 'wb')

proclist=[]

s=0

for i in suite:

runner = HTMLTestRunner.HTMLTestRunner(

stream=fp,

title=u'测试报告',

description=u'用例执行情况:'

)

proc = multiprocessing.Process(target=runner.run(i),args=(i,))

proclist.append(proc)

s=s+1

for proc in proclist: proc.start()

for proc in proclist: proc.join()

fp.close()

……

定义 proclist()函数,for 循环把 suite 数组中的用例执行结果写入 HTMLTestRunner 测试报告。

multiprocessing.Process 创建用例执行的多进程,把创建的多进程追加到 proclist 数组中,

for 循环 proc.start()开始进程活动,proc.join()等待线程终止。


举报

相关推荐

0 条评论