利用參數化連續打開網頁:
#encoding=utf-8
import unittest
import paramunittest
import time
from selenium import webdriver
@paramunittest.parametrized(
{"url":"http://www.baidu.com","result": "百度"},
{"url":"http://www.sina.com","result": "新浪"},
{"url":"http://www.taobao.com","result": "淘寶"},
)
class TestDemo(unittest.TestCase):
def setParameters(self, url, result):
self.url = url
self.result = result
def test_login(self):
self.driver=webdriver.Firefox()
self.driver.get(self.url)
print("開始執行用例:--------------")
time.sleep(0.5)
print("期望結果:%s " % self.result)
if __name__ == "__main__":
unittest.main(verbosity=2)
為了看結果特意沒關瀏覽器:
一些新的想法,由於每次都需要等一個參數運行完之后才能運行下一個,導致如果一個網站比如新浪,訪問時間很長,則下面的淘寶就需要等待,很浪費時間,於是做了個多線程:
#encoding=utf-8
import unittest
import paramunittest
import time
from selenium import webdriver
@paramunittest.parametrized(
{"url":"http://www.baidu.com","result": "百度"},
{"url":"http://www.sina.com","result": "新浪"},
{"url":"http://www.taobao.com","result": "淘寶"},
)
class TestDemo(unittest.TestCase):
def setParameters(self, url, result):
self.url = url
self.result = result
def test_login(self):
self.driver=webdriver.Firefox()
t = threading.Thread(target=self.driver.get, args=(self.url,))
t.start()
self.driver.get(self.url)
print("開始執行用例:--------------")
time.sleep(0.5)
print("期望結果:%s " % self.result)
if __name__ == "__main__":
unittest.main(verbosity=2)
運行結果變成了6.729,比之前的92.458真的是。。。快了不少啊
補充內容:
上面寫的內容確實能提高腳本運行速度,但是因為腳本比較簡單,只有登錄這步操作,如果是比較復雜的步驟單單一步多線程反而會使得之后的動作fail,下面是學習到的是可以完整執行多個操作的用例,並使得多個這種用例進行並發操作,但是這種方式還無法融合unittest和paramunittest,回報類的錯誤,當然可以利用HTMLTestRunner來將用例放在多個,py文件然后多線程批量運行
#encoding=utf-8
from threading import Thread
from selenium import webdriver
from time import ctime, sleep
def test_baidu(browser, search):
print('start:%s' % ctime())
print('browser:%s,' % browser)
if browser == "ie":
driver = webdriver.Firefox()#Ie()
elif browser == "chrome":
driver = webdriver.Firefox()#Chrome()
elif browser == "ff":
driver = webdriver.Firefox()
else:
print("browser參數有誤,只能為ie,ff,chrome")
driver.get('http://www.baidu.com')
driver.find_element_by_id("kw").send_keys(search)
driver.find_element_by_id("su").click()
sleep(2)
#driver.quit()
if __name__ == '__main__':
lists = {'ie': 'threading', 'chrome': 'driver', 'ff': 'python'}
threads = []
files = range(len(lists))
for brow, sea in lists.items():
t = Thread(target=test_baidu, args=(brow, sea))
threads.append(t)
for t in files:
threads[t].start()
for t in files:
threads[t].join()
print('end:%s' % ctime())
有一點需要注意,就是判斷時一定要用elif,否則由於多線程過快,導致會直接跳到else將其內容print出來如下: