最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python Selenium 之數(shù)據(jù)驅(qū)動測試的實現(xiàn)

 更新時間:2019年08月01日 14:39:27   作者:菜鳥可米  
這篇文章主要介紹了Python Selenium 之數(shù)據(jù)驅(qū)動測試的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

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

下面將使用Python下的數(shù)據(jù)驅(qū)動模式(ddt)庫,結(jié)合unittest庫以數(shù)據(jù)驅(qū)動模式創(chuàng)建百度搜索的測試。

ddt庫包含一組類和方法用于實現(xiàn)數(shù)據(jù)驅(qū)動測試??梢詫y試中的變量進行參數(shù)化。

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

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

一個簡單的數(shù)據(jù)驅(qū)動測試

為了創(chuàng)建數(shù)據(jù)驅(qū)動測試,需要在測試類上使用@ddt裝飾符,在測試方法上使用@data裝飾符。@data裝飾符把參數(shù)當作測試數(shù)據(jù),參數(shù)可以是單個值、列表、元組、字典。對于列表,需要用@unpack裝飾符把元組和列表解析成多個參數(shù)。

下面實現(xiàn)百度搜索測試,傳入搜索關鍵詞和期望結(jié)果,代碼如下:

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兩個參數(shù)用來接收元組解析的數(shù)據(jù)。當運行腳本時,ddt把測試數(shù)據(jù)轉(zhuǎn)換為有效的python標識符,生成名稱為更有意義的測試方法。結(jié)果如下:

使用外部數(shù)據(jù)的數(shù)據(jù)驅(qū)動測試

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

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

通過CSV獲取數(shù)據(jù)

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

接下來,先要創(chuàng)建一個get_data()方法,其中包括路徑(這里默認使用當前路徑)、CSV文件名。調(diào)用CSV庫去讀取文件并返回一行數(shù)據(jù)。再使用@ddt及@data實現(xiàn)外部數(shù)據(jù)驅(qū)動測試百度搜索,代碼如下:

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)

測試執(zhí)行時,@data將調(diào)用get_data()方法讀取外部數(shù)據(jù)文件,并將數(shù)據(jù)逐行返回給@data。執(zhí)行的結(jié)果也同上~

通過Excel獲取數(shù)據(jù)

測試中經(jīng)常用Excle存放測試數(shù)據(jù),同上在也可以使用@data裝飾符來解析外部的CSV(testdata.csv)來作為測試數(shù)據(jù)(代替之前的測試數(shù)據(jù))。其中數(shù)據(jù)如下:

接下來,先要創(chuàng)建一個get_data()方法,其中包括路徑(這里默認使用當前路徑)、EXCEL文件名。調(diào)用xlrd庫去讀取文件并返回數(shù)據(jù)。再使用@ddt及@data實現(xiàn)外部數(shù)據(jù)驅(qū)動測試百度搜索,代碼如下:

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文件一樣,測試執(zhí)行時,@data將調(diào)用get_data()方法讀取外部數(shù)據(jù)文件,并將數(shù)據(jù)逐行返回給@data。執(zhí)行的結(jié)果也同上~

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

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

相關文章

  • 基于Python實現(xiàn)格斗小游戲的示例代碼

    基于Python實現(xiàn)格斗小游戲的示例代碼

    格斗游戲,曾經(jīng)是街機廳里最火爆的游戲之一,甚至可以把“之一”去掉,那個年代的格斗游戲就是街機游戲的王。本文就來用Python實現(xiàn)一個簡單的格斗游戲,感興趣的可以了解一下
    2023-03-03
  • 利用Matlab繪制各類特殊圖形的實例代碼

    利用Matlab繪制各類特殊圖形的實例代碼

    作為一個功能強大的工具軟件,Matlab具有很強的圖形處理功能,提供了大量的二維、三 維圖形函數(shù),這篇文章主要給大家介紹了關于如何利用Matlab繪制各類特殊圖形的相關資料,需要的朋友可以參考下
    2021-07-07
  • 在Pandas中給多層索引降級的方法

    在Pandas中給多層索引降級的方法

    今天小編就為大家分享一篇在Pandas中給多層索引降級的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • Python如何設置指定窗口為前臺活動窗口

    Python如何設置指定窗口為前臺活動窗口

    這篇文章主要介紹了Python如何設置指定窗口為前臺活動窗口,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • 如何基于Python實現(xiàn)word文檔重新排版

    如何基于Python實現(xiàn)word文檔重新排版

    這篇文章主要介紹了如何基于Python實現(xiàn)word文檔重新排版,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-09-09
  • 淺談用Python實現(xiàn)一個大數(shù)據(jù)搜索引擎

    淺談用Python實現(xiàn)一個大數(shù)據(jù)搜索引擎

    這篇文章主要介紹了淺談用Python實現(xiàn)一個大數(shù)據(jù)搜索引擎,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • Python之lxml安裝失敗的解決

    Python之lxml安裝失敗的解決

    這篇文章主要介紹了Python之lxml安裝失敗的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Python?redis模塊的使用教程指南

    Python?redis模塊的使用教程指南

    這篇文章主要為大家詳細介紹了Python?redis模塊的使用教程指南的相關資料,文中的示例代碼講解詳細,感興趣的小伙伴快跟隨小編一起學習一下吧
    2022-10-10
  • Python爬蟲requests庫多種用法實例

    Python爬蟲requests庫多種用法實例

    這篇文章主要介紹了Python爬蟲requests庫多種用法實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05
  • python中flatten()函數(shù)用法詳解

    python中flatten()函數(shù)用法詳解

    本文主要介紹了python中flatten()函數(shù)用法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02

最新評論

额尔古纳市| 汕头市| 凤山市| 沂水县| 大埔县| 翁源县| 赞皇县| 本溪| 石河子市| 建宁县| 永清县| 汶川县| 平乡县| 柳州市| 宁晋县| 德清县| 白银市| 汝南县| 曲靖市| 静安区| 永修县| 开平市| 古蔺县| 阿克陶县| 汶上县| 康平县| 萍乡市| 丹巴县| 武威市| 甘孜| 明溪县| 屯昌县| 乌鲁木齐县| 马公市| 湘西| 浙江省| 东莞市| 江永县| 普宁市| 塔河县| 屏边|