亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Python Selenium 之數據驅動測試的實現

系統 1705 0

數據驅動模式的測試好處相比普通模式的測試就顯而易見了吧!使用數據驅動的模式,可以根據業務分解測試數據,只需定義變量,使用外部或者自定義的數據使其參數化,從而避免了使用之前測試腳本中固定的數據。可以將測試腳本與測試數據分離,使得測試腳本在不同數據集合下高度復用。不僅可以增加復雜條件場景的測試覆蓋,還可以極大減少測試腳本的編寫與維護工作。

下面將使用Python下的數據驅動模式(ddt)庫,結合unittest庫以數據驅動模式創建百度搜索的測試。

ddt庫包含一組類和方法用于實現數據驅動測試。可以將測試中的變量進行參數化。

可以通過python自帶的pip命令進行下載并安裝:pip install ddt . 更多關于ddt的信息可以參考:

https://pypi.org/project/ddt/

一個簡單的數據驅動測試

為了創建數據驅動測試,需要在測試類上使用@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標識符,生成名稱為更有意義的測試方法。結果如下:

Python Selenium 之數據驅動測試的實現_第1張圖片

使用外部數據的數據驅動測試

如果外部已經存在了需要的測試數據,如一個文本文件、電子表格或者數據庫,那也可以用ddt來直接獲取數據并傳入測試方法進行測試。

下面將借助外部的CSV(逗號分隔值)文件和EXCLE表格數據來實現ddt。

通過CSV獲取數據

同上在@data裝飾符使用解析外部的CSV(testdata.csv)來作為測試數據(代替之前的測試數據)。其中數據如下:

Python Selenium 之數據驅動測試的實現_第2張圖片

接下來,先要創建一個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)
          

與上面讀取CVS文件一樣,測試執行時,@data將調用get_data()方法讀取外部數據文件,并將數據逐行返回給@data。執行的結果也同上~

如果想從數據庫的庫表中獲取數據,同樣也需要一個get_data()方法,并且通過DB相關的庫來連接數據庫、SQL查詢來獲取測試數據。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 四虎影视国产精品永久在线 | 久草在线最新视频 | 99精品热视频 | 91精品久久久久久久久网影视 | 色姑娘天天操 | 亚洲国产精品久久精品成人 | 国产欧美日韩精品综合 | 九九国产 | 国产亚洲欧美另类一区二区三区 | 亚洲精品国产不卡在线观看 | 日本视频在线观看不卡高清免费 | 最近更新在线中文字幕一页 | www.xxxx欧美 | 91精品国产欧美一区二区 | 精品久久网站 | 奇米在线免费视频 | 国产精品免费观看视频 | 欧美在线观看高清一二三区 | 成年人黄色小视频 | 国产视频久久久久 | 日韩亚洲欧美在线观看 | 国产香港特级一级毛片 | 中文字幕一区精品 | 久久性| 五月激情丁香婷婷综合第九 | 九九亚洲综合精品自拍 | 日韩国产精品99久久久久久 | 日韩成人国产精品视频 | 手机看片国产精品 | 在线播放a 1 | 性xxxx奶大欧美高清 | 日韩一区二区三区视频在线观看 | 台湾一级毛片永久免费 | 一级中国毛片 | 咪咪爱在线观看 | 久久99国产乱子伦精品免费 | 好爽毛片一区二区三区四区 | 奇米影音777 | 久草免费在线观看视频 | 婷婷综合亚洲 | 99视频精品全部在线播放 |