
本文实例讲述了Python多线程应用于自动化测试操作。分享给大家供大家参考,具体如下:
多线程执行测试用例
实例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
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))
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
1
2
3
|
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
1
|
java -jar selenium-server-standalone- 2.48 . 0 .jar -role node -port 6666 -hub http: //192.168.0.101:4444/gird/register
|
测试脚本:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
'''
在不同主机、不同浏览器同时执行测试用例,多线程;
利用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()
|
运行结果:

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 希望能帮助到你!【100%无套路免费领取】

