您好,登錄后才能下訂單哦!
怎么在Python中使用Selenium 實現數據驅動測試?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
為了創建數據驅動測試,需要在測試類上使用@ddt裝飾符,在測試方法上使用@data裝飾符。@data裝飾符把參數當作測試數據,參數可以是單個值、列表、元組、字典。對于列表,需要用@unpack裝飾符把元組和列表解析成多個參數。
下面實現百度搜索測試,傳入搜索關鍵詞和期望結果,代碼如下:
import unittest from selenium import webdriver from ddt import ddt, data, unpack @ddt class SearchDDT(unittest.TestCase): '''docstring for SearchDDT''' def setUp(self): self.driver = webdriver.Chrome() self.driver.implicitly_wait(30) self.driver.maximize_window() self.driver.get("https://www.baidu.com") # specify test data using @data decorator @data(('python', 'PyPI')) @unpack def test_search(self, search_value, expected_result): search_text = self.driver.find_element_by_id('kw') search_text.clear() search_text.send_keys(search_value) search_button = self.driver.find_element_by_id('su') search_button.click() tag = self.driver.find_element_by_link_text("PyPI").text self.assertEqual(expected_result, tag) def tearDown(self): self.driver.quit() if __name__ == '__main__': unittest.main(verbosity=2)
在test_search()方法中,search_value與expected_result兩個參數用來接收元組解析的數據。當運行腳本時,ddt把測試數據轉換為有效的python標識符,生成名稱為更有意義的測試方法。結果如下:
使用外部數據的數據驅動測試
如果外部已經存在了需要的測試數據,如一個文本文件、電子表格或者數據庫,那也可以用ddt來直接獲取數據并傳入測試方法進行測試。
下面將借助外部的CSV(逗號分隔值)文件和EXCLE表格數據來實現ddt。
通過CSV獲取數據
同上在@data裝飾符使用解析外部的CSV(testdata.csv)來作為測試數據(代替之前的測試數據)。其中數據如下:
接下來,先要創建一個get_data()方法,其中包括路徑(這里默認使用當前路徑)、CSV文件名。調用CSV庫去讀取文件并返回一行數據。再使用@ddt及@data實現外部數據驅動測試百度搜索,代碼如下:
import csv, unittest from selenium import webdriver from ddt import ddt, data, unpack def get_data(file_name): # create an empty list to store rows rows = [] # open the CSV file data_file = open(file_name, "r") # create a CSV Reader from CSV file reader = csv.reader(data_file) # skip the headers next(reader, None) # add rows from reader to list for row in reader: rows.append(row) return rows @ddt class SearchCSVDDT(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome() self.driver.implicitly_wait(30) self.driver.maximize_window() self.driver.get("https://www.baidu.com") # get test data from specified csv file by using the get_data funcion @data(*get_data('testdata.csv')) @unpack def test_search(self, search_value, expected_result): search_text = self.driver.find_element_by_id('kw') search_text.clear() search_text.send_keys(search_value) search_button = self.driver.find_element_by_id('su') search_button.click() tag = self.driver.find_element_by_link_text("PyPI").text self.assertEqual(expected_result, tag) def tearDown(self): self.driver.quit() if __name__ == '__main__': unittest.main(verbosity=2)
測試執行時,@data將調用get_data()方法讀取外部數據文件,并將數據逐行返回給@data。執行的結果也同上~
通過Excel獲取數據
測試中經常用Excle存放測試數據,同上在也可以使用@data裝飾符來解析外部的CSV(testdata.csv)來作為測試數據(代替之前的測試數據)。其中數據如下:
接下來,先要創建一個get_data()方法,其中包括路徑(這里默認使用當前路徑)、EXCEL文件名。調用xlrd庫去讀取文件并返回數據。再使用@ddt及@data實現外部數據驅動測試百度搜索,代碼如下:
import xlrd, unittest from selenium import webdriver from ddt import ddt, data, unpack def get_data(file_name): # create an empty list to store rows rows = [] # open the CSV file book = xlrd.open_workbook(file_name) # get the frist sheet sheet = book.sheet_by_index(0) # iterate through the sheet and get data from rows in list for row_idx in range(1, sheet.nrows): #iterate 1 to maxrows rows.append(list(sheet.row_values(row_idx, 0, sheet.ncols))) return rows @ddt class SearchEXCLEDDT(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome() self.driver.implicitly_wait(30) self.driver.maximize_window() self.driver.get("https://www.baidu.com") # get test data from specified excle spreadsheet by using the get_data funcion @data(*get_data('TestData.xlsx')) @unpack def test_search(self, search_value, expected_result): search_text = self.driver.find_element_by_id('kw') search_text.clear() search_text.send_keys(search_value) search_button = self.driver.find_element_by_id('su') search_button.click() tag = self.driver.find_element_by_link_text("PyPI").text self.assertEqual(expected_result, tag) def tearDown(self): self.driver.quit() if __name__ == '__main__': unittest.main(verbosity=2)
關于怎么在Python中使用Selenium 實現數據驅動測試問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。