欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python Selenium 之?dāng)?shù)據(jù)驅(qū)動(dòng)測(cè)試的實(shí)現(xiàn)

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

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

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

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

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

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

一個(gè)簡(jiǎn)單的數(shù)據(jù)驅(qū)動(dòng)測(cè)試

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

下面實(shí)現(xiàn)百度搜索測(cè)試,傳入搜索關(guā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兩個(gè)參數(shù)用來接收元組解析的數(shù)據(jù)。當(dāng)運(yùn)行腳本時(shí),ddt把測(cè)試數(shù)據(jù)轉(zhuǎn)換為有效的python標(biāo)識(shí)符,生成名稱為更有意義的測(cè)試方法。結(jié)果如下:

使用外部數(shù)據(jù)的數(shù)據(jù)驅(qū)動(dòng)測(cè)試

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

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

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

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

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

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)

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

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

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

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

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

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

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python利用字典和列表實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)

    Python利用字典和列表實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Python如何利用字典和列表實(shí)現(xiàn)一個(gè)簡(jiǎn)易的學(xué)生信息管理系統(tǒng),文中詳細(xì)注釋,方便理解,需要的可以參考一下
    2022-06-06
  • Python urllib3軟件包的使用說明

    Python urllib3軟件包的使用說明

    這篇文章主要介紹了Python urllib3軟件包的使用說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • Python面向?qū)ο蟮膬?nèi)置方法梳理講解

    Python面向?qū)ο蟮膬?nèi)置方法梳理講解

    面向?qū)ο缶幊淌且环N編程方式,此編程方式的落地需要使用“類”和 “對(duì)象”來實(shí)現(xiàn),所以,面向?qū)ο缶幊唐鋵?shí)就是對(duì) “類”和“對(duì)象” 的使用,今天給大家介紹下python 面向?qū)ο箝_發(fā)及基本特征,感興趣的朋友一起看看吧
    2022-10-10
  • python使用socket實(shí)現(xiàn)圖像傳輸功能

    python使用socket實(shí)現(xiàn)圖像傳輸功能

    這篇文章主要為大家詳細(xì)介紹了python使用socket實(shí)現(xiàn)圖像傳輸功能,linux服務(wù)器與win10主機(jī)間的圖像傳輸,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • Python isinstance判斷對(duì)象類型

    Python isinstance判斷對(duì)象類型

    Python中判度對(duì)象類型方法非常簡(jiǎn)單,不需要像別的語言一樣使用如下的判斷方法
    2008-09-09
  • Python創(chuàng)建7種不同的文件格式的方法總結(jié)

    Python創(chuàng)建7種不同的文件格式的方法總結(jié)

    今天的這篇文章呢,小編來介紹一下如何通過Python來創(chuàng)建各種形式的文件,這里包括了:文本文件、CSV文件、Excel文件、壓縮文件、XML文件、JSON文件和PDF文件,需要的可以參考一下
    2023-01-01
  • Python學(xué)習(xí)之異常中的finally使用詳解

    Python學(xué)習(xí)之異常中的finally使用詳解

    這篇文章主要為大家介紹一下Python異常語法中的另一個(gè)成員—finally,通過學(xué)習(xí)finally,可以幫助我們更好的處理異常,快來跟隨小編一起學(xué)習(xí)一下吧
    2022-03-03
  • Python中的axis參數(shù)的具體使用

    Python中的axis參數(shù)的具體使用

    在我們使用Python中的Numpy和Pandas進(jìn)行數(shù)據(jù)分析的時(shí)候,經(jīng)常會(huì)遇到axis參數(shù),本文就來介紹一下axis參數(shù)的具體使用,感興趣的可以了解一下
    2021-12-12
  • 一文帶你精通Python中*args和**kwargs的應(yīng)用技巧

    一文帶你精通Python中*args和**kwargs的應(yīng)用技巧

    如果能在Python中創(chuàng)建適應(yīng)不同場(chǎng)景的函數(shù),而無需每次都重寫它們,會(huì)使得操作簡(jiǎn)潔方便,這就是*args和**kwargs的魔力所在,下面我們就來看看它們的具體一些應(yīng)用技巧吧
    2024-03-03
  • python-django中的APPEND_SLASH實(shí)現(xiàn)方法

    python-django中的APPEND_SLASH實(shí)現(xiàn)方法

    這篇文章主要介紹了python-django中的APPEND_SLASH實(shí)現(xiàn)方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-06-06

最新評(píng)論