selenium,unittest——參數化url,並多線程加快腳本運行速度


利用參數化連續打開網頁:

#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出來如下:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM