自動化測試程式如何將瀏覽器種類視為外部參數同時執行IE, Chrome, Firefox? (python範例)
這篇文章主要說明當完成一個自動化測試程式時,如何根據需要指定不同的參數,
讓這個自動化測試程式可以執行 IE、Chrome或是FireFox,而不需要修改程式。
要達到這個目的,自動化測試程式必須將啟動瀏覽器的部分做參數化。
最後,舉 python 為程式範例說明。另外附上python unitTest的用法。
測試情境
我們將完成一個測試程式,這個測試程式會 –
1. 訪問 http://www.python.org
2. 搜尋 “Selenium”
3. 驗證 Window Title
執行時,可以用外部參數,firefox或是 Chrome就會啟動相對應的瀏覽器
$python multipleBrowser.py firefox
$python multipleBrowser.py chrome
程式說明
python程式如何讀外部參數?
這個程式我們利用外部參數,來判斷是否要啟動 firefox or chrome
BROWSER = sys.argv[1]
測試個案與瀏覽器環境準備
我們必須相測試步驟分為兩大部分。
一部分是瀏覽器環境的準備。也就是根據參數執行相對應的瀏覽器。FireFox or Chrome
- def test_firefox():
- def test_chrome():
一部分是測試步驟。也就是我們要執行的測試個案。這個例子主要是瀏覽網站與驗證網頁資訊。
- def test_searchResults(driver):
因此,在每次的瀏覽器環境準備結束後,我們都會執行相對應的測試個案。test_searchResults。
Python UnitTest完整程式範例
[pastacode lang=”python” message=”” highlight=”” provider=”manual”]
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import unittest, time, re, sys
import os
import unittest
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
class multipleBrowser_unittests(unittest.TestCase):
args = sys.argv[1].split(" ")
def setUp(self):
args = self.args
if args[0].lower() == "firefox":
self.driver = webdriver.Firefox()
else:
self.driver = webdriver.Chrome("D:\\Python27\\chromedriver.exe")
self.load = self.driver.get
def tearDown(self):
if self.driver:
self.driver.quit()
def test_should_load_wikipedia(self):
self.load("https://www.wikipedia.org")
self.assertIn("Wikipedia", self.driver.title)
if __name__ == "__main__":
#import sys;sys.argv = ['', 'Test.testName']
unittest.main(argv=sys.argv[1:])
[/pastacode]
Python完整程式範例
[pastacode lang=”python” message=”” highlight=”” provider=”manual”]
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import os
import sys
CHROME_DRIVER_LOCATION = "D:\\Python27\\chromedriver.exe"
TEST_URL = "http://www.python.org"
def test_chrome():
print "setting up CHROME"
chromedriver = CHROME_DRIVER_LOCATION
os.environ["webdriver.chrome.driver"] = chromedriver
driver = webdriver.Chrome(chromedriver)
driver.get(TEST_URL)
test_searchResults(driver)
def test_firefox():
print "setting up FIREFOX"
driver = webdriver.Firefox()
driver.get(TEST_URL)
test_searchResults(driver)
def test_searchResults(driver):
assert "Python" in driver.title
elem = driver.find_element_by_name("q")
elem.send_keys("selenium")
elem.send_keys(Keys.RETURN)
assert "Welcome" in driver.title
driver.close()
print "Closed driver and finished"
if __name__ == '__main__':
NUMARGUMENTS = len(sys.argv)
BROWSER = "firefox"
print str(sys.argv)
if(NUMARGUMENTS == 2):
BROWSER = sys.argv[1]
BROWSER = str(BROWSER).lower()
if BROWSER == "firefox":
test_firefox()
elif BROWSER == "chrome":
test_chrome()
else:
print "The parameter only takes 'firefox' or 'chrome'. \nCan't identify the browser: " + BROWSER
else:
print "It only takes one parameter either 'firefox' or 'chrome' "
[/pastacode]