计算密集型 vs. IO密集型
计算密集型任务的特点是要进行大量的计算,消耗CPU资源,比如计算圆周率、对视频进行高清解码等等,全靠CPU的运算能力。这种计算密集型任务虽然也可以用多任务完成,但是任务越多,花在任务切换的时间就越多,CPU执行任务的效率就越低,所以,要最高效地利用CPU,计算密集型任务同时进行的数量应当等于CPU的核心数。对于计算密集型任务,最好用运行效率高的C语言编写。也可使用python多进程,充分利用多cpu。
涉及到网络、磁盘IO的任务都是IO密集型任务,这类任务的特点是CPU消耗很少,任务的大部分时间都在等待IO操作完成(因为IO的速度远远低于CPU和内存的速度)。对于IO密集型任务,任务越多,CPU效率越高,但也有一个限度。常见的大部分任务都是IO密集型任务,比如Web应用。对于IO密集型任务,最好用脚本语言编写。可使用python多线程。
多线程执行测试用例
实例:
import threading
from time import sleep,ctime
from selenium import webdriver
#测试用例1
def test_baidu(browser,search):
print("开始,现在时间是%s"%ctime())
print("浏览器是%s"%browser)
if browser =="ff":
driver = webdriver.Firefox()
elif browser =="chrome":
driver = webdriver.Chrome()
elif browser =="ie":
driver =webdriver.Ie()
else:
print("浏览器输入错误!")
driver.get(r"http://www.baidu.com")
driver.implicitly_wait(5)
driver.find_element_by_xpath("//*[@id=‘kw‘]").send_keys(search)
driver.find_element_by_id("su").click()
sleep(2)
driver.quit()
if __name__ =="__main__":
#定义字典存放test_baidu函数的参数
dicts = {"ff": "python", "chrome": "selenium", "ie": "unittest"}
#创建空列表存放线程
threads =[]
#遍历字典,并把线程append进threads
for browser,search in dicts.items():
t = threading.Thread(target=test_baidu,args=(browser,search)) #args参数是一个元组,作用是给test_baidu()传参
threads.append(t)
#把字典内容索引替代
file = range(len(dicts))
#启动线程
for i in file:
threads[i].start()
#守护线程
for i in file:
threads[i].join()
测试结果:
由测试结果得到:多线程同时开始执行测试用例,大大缩小测试总时间。
多线程结合分布式执行测试用例
Selenium Girl 只是提供了多操作系统、多浏览器的执行环境,但不提供并行执行测试用例,Selenium Girl只能现在一个系统或浏览器上执行完测试用例外再从另一个操作系统或浏览器上执行测试用例。
启动Selenium server
在本机启动一个主hub和一个node节点:本机IP地址(192.168.0.101),节点端口4444/5555
java -jar selenium-server-standalone-2.48.0.jar -role hub
java -jar selenium-server-standalone-2.48.0.jar -role node -port 5555
启动一个远程node:p(192.168.0.102)在虚拟机里面:端口是6666
java -jar selenium-server-standalone-2.48.0.jar -role node -port 6666 -hub http://192.168.0.101:4444/gird/register
测试脚本:
‘‘‘
在不同主机、不同浏览器同时执行测试用例,多线程;
利用Selenium Girl提供分布式执行测试用例;
先启动Selenium server,这里分别在本地主机启动一个hub和一个node,在其他主机(虚拟机)启动一个node。
‘‘‘
from selenium.webdriver import Remote
import threading
from time import *
#测试用例
def test_baidu(host,browser):
print("开始:%s"%ctime())
print(host,browser)
dc ={‘browserName‘:browser}
driver = Remote(
command_executor=host,
desired_capabilities=dc
)
driver.get(r‘http://www.baidu.com‘)
driver.implicitly_wait(10)
driver.find_element_by_link_text("新闻").click()
sleep(2)
driver.get_screenshot_as_file(r‘D:\testscreen\baidu.jpg‘)
driver.quit()
if __name__ ==‘__main__‘:
#启动参数,指定运行主机和浏览器
lists={‘http://127.0.0.1:4444/wd/hub‘:‘chrome‘,
‘http://127.0.0.1:5555/wd/hub‘:‘internet explorer‘,
‘http://192.168.216.128:6666/wd/hub‘:‘firefox‘ #远程节点node
}
threads =[]
files = range(len(lists))
#创建线程,并append进线程组
for host,browser in lists.items():
t = threading.Thread(target=test_baidu,args=(host,browser))
threads.append(t)
#启动每一个线程
for i in files:
threads[i].start()
#守护每一个线程
for i in files:
threads[i].join()
运行结果:
原文地址:https://www.cnblogs.com/xiaohuhu/p/10185350.html