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

python自動化測試Data?Driven?Testing(DDT)用例解析

 更新時間:2023年09月07日 14:25:42   作者:趙澤鑫  
這篇文章主要為大家介紹了python自動化測試Data?Driven?Testing(DDT)用例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

What is Data Driven Testing

數(shù)據(jù)驅(qū)動測試(Data-driven test)是一種軟件測試方法,其中測試數(shù)據(jù)以表格或電子表格格式存儲。數(shù)據(jù)驅(qū)動測試允許測試人員輸入一個單一的測試腳本,可以對表格中的所有測試數(shù)據(jù)執(zhí)行測試,并期望在同一表格中的測試輸出。它也被稱為表驅(qū)動測試或參數(shù)化測試。尤其是針對于自動化測試,DDT幾乎是所有自動化測試默認遵循的規(guī)范。當我們執(zhí)行自動化測試的時候,都會遵照DDT的要求,盡量將測試中的可變數(shù)據(jù)抽象出來,變成單獨的文件,這個文件的格式可以是csv、xslx,也可以是json、xml或者是database。

Why Data Driven Testing

DDT的數(shù)據(jù)一般包括支持自動化測試用例執(zhí)行的測試數(shù)據(jù),UI測試使用的元素定位數(shù)據(jù),和測試產(chǎn)生的測試結(jié)果。使用DDT的方式編寫我們的測試腳本可以

1. 盡量保證test case和容易發(fā)生變化的數(shù)據(jù)解耦。這樣當容易發(fā)生變化的數(shù)據(jù)變更后可以在統(tǒng)一的位置進行維護。同時腳本的實現(xiàn)方式發(fā)生變化的時候不影響用例本身的執(zhí)行。

2. 可以復用代碼,避免重復冗余的代碼。

How to create a Data Driven Automation Framework

DDT究竟怎么落地到實際的測試中呢?舉個例子,最簡單的登陸注冊頁面,正確的用戶名,錯誤的密碼;正確的密碼,錯誤的用戶名;正確的用戶名,正確的密碼; 甚至輸入用戶名的格式和密碼的格式不同都會產(chǎn)生不同的用例。那我們可以把這些不同的數(shù)據(jù)存在一個文件中,用變量的方式把數(shù)據(jù)傳遞到登陸的方法中,這樣就完成了一個簡單的DDT測試腳本。

為了能更加方便的使用DDT的方式編寫測試,有很多工具來輔助我們更簡單的實現(xiàn)DDT。如果你的常用編程語言是python,可以了解下python中的selenium-ddt庫。里面的常用方法是@data@ddt、@unpack、@file_data這四種裝飾器。

import os
from ddt import ddt, data, unpack, file_data
import unittest
def get_data():
   testdata = [{'name': 'tom', 'age': 20}, {'name': 'kite', 'age': 30}]
   return testdata
@ddt
class MyTestCase(unittest.TestCase):
   @data(1, 2, 3) //單組元組數(shù)據(jù)
   def test1(self, value):
       print(value)
   @data((1, 2, 3), (4, 5, 6))
   def test2(self, value):
       print(value)
   @data((1, 2, 3), (4, 5, 6)) //多組元組數(shù)據(jù)
   @unpack // 加入unpack方法后使用兩組數(shù)據(jù)執(zhí)行該用例
   def test3(self, value1, value2, value3):
       print(value1, value2, value3)
   @data([{'name': 'tom', 'age': 20}, {'name': 'kite', 'age': 30}]) //列表數(shù)據(jù)
   def test4(self, value):
       print(value)
   @data({'name': 'tom', 'age': '20'}, {'name': 'kite', 'age': '30'})//字典數(shù)據(jù)
   def test5(self, value):
       print(value)
   @data({'name': 'tom', 'age': '20'}, {'name': 'kite', 'age': '30'})//多組字典數(shù)據(jù)拆分
   @unpack
   def test6(self, name, age):
       print(name, age)
   testdata = [{'name': 'tom', 'age': 20}, {'name': 'kite', 'age': 30}]
   # @data(*testdata)
   @data(get_data()) //可以引用其他方法中的數(shù)據(jù)
   def test7(self, value):
       print(value)
   @file_data(os.getcwd() + '/test.json')//讀取文件應用文件中的數(shù)據(jù)
   def test8(self, value2):
       print(value2)
if __name__ == '__main__':
   unittest.main()

代碼比較簡單但是可以說明問題,感興趣的同學可以自己嘗試運行一下,查看結(jié)果??梢钥吹絛dt中支持多種多樣數(shù)據(jù)結(jié)構(gòu)的同時,也支持不同獲取數(shù)據(jù)的來源,可以是定義在腳本中的數(shù)據(jù),也可以是函數(shù)的返回數(shù)據(jù),還可以讀取文件中的數(shù)據(jù)。雖然在pytest支持參數(shù)化注解后就很少人使用selenium-ddt了,但是其中的設(shè)計思想還是值得參考。

下面是一個pytest參數(shù)化的。pytest的參數(shù)化是通過@pytest.mark.parametrize注解來實現(xiàn)的。

@pytest.mark.parametrize的內(nèi)部是ParametrizeMarkDecorator,ParametrizeMarkDecorator的類中傳入了MarkDecorator裝飾器,這個裝飾器被調(diào)用后,會將標記附加在類中,自動應用到類中找到的所有用例里面。

這就是為什么使用注解后的用例可以全部被執(zhí)行的原因。而讀取這些數(shù)據(jù)解析出來,是因為ParametrizeMarkDecorator的實現(xiàn)是一個Iterable,當傳入的data是一個可迭代對象的時候,就可以將data中的數(shù)據(jù)unpack出來。

login_data = [
  ('test001', 'test001@qq.com', '123456', '123456', '666', '驗證碼不正確'),
  ('test200', 'test009@qq.com', '123456', '123456', '111', '注冊成功,點擊確定進行登錄。'),
]
@pytest.mark.parametrize('username,email,pwd,expected', login_data)
def test1_register(self, username, email, pwd, expected):
   self.driver.find_element(By.NAME, 'username').send_keys(username)
   self.driver.find_element(By.NAME, 'email').send_keys(email)
   self.driver.find_element(By.NAME, 'pwd').send_keys(pwd)
   self.driver.find_element(By.NAME, 'comfirmed').click()
   WebDriverWait(self.driver, 5).until(EC.alert_is_present())
   alert = self.driver.switch_to.alert
   assert alert.text == expected
   alert.accept()

Best practices of Data Driven testing

  • 在數(shù)據(jù)驅(qū)動測試過程中,使用真實的數(shù)據(jù)是最理想的。
  • 測試流程應該在編寫在測試腳本內(nèi)。
  • 使用數(shù)據(jù)來驅(qū)動斷言。
  • 測試數(shù)據(jù)要包含積極和消極的結(jié)果。
  • 將數(shù)據(jù)驅(qū)動的功能測試復用在其他形式的測試,如安全或者性能測試。

Disadvantages of Data Driven testing

  • 測試的質(zhì)量取決于實施團隊的自動化技能。
  • 當測試腳本需要大量的數(shù)據(jù)時,數(shù)據(jù)驗證的工作也會比較復雜。
  • 維護測試是一個大問題,因為數(shù)據(jù)驅(qū)動測試需要大量的編碼。
  • 使用DDT完成測試腳本的開發(fā)需要比較高水平的coding能力。
  • 會產(chǎn)生很多文件。主要是與管理測試腳本和測試結(jié)果有關(guān)。

DDT是一種編寫自動化測試的規(guī)范或者說是一個框架,用文件的形式存儲測試數(shù)據(jù),達到數(shù)據(jù)和測試腳本物理上的隔離,從而達到更好維護用例和更make sense的結(jié)果。

以上就是python自動化測試Data Driven Testing(DDT)用例解析的詳細內(nèi)容,更多關(guān)于python自動化測試DDT的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 決策樹的python實現(xiàn)方法

    決策樹的python實現(xiàn)方法

    這篇文章主要介紹了決策樹的python實現(xiàn)方法,詳細分析了決策樹的優(yōu)缺點及算法思想并以完整實例形式講述了Python實現(xiàn)決策樹的方法,具有一定的借鑒價值,需要的朋友可以參考下
    2014-11-11
  • python pywinauto使用過程及問題小結(jié)

    python pywinauto使用過程及問題小結(jié)

    在pywinauto庫中,uia即UIAutomation,是微軟提供的用于用戶界面自動化測試和輔助功能訪問的技術(shù)框架,UIAutomation支持自動化腳本與各種UI元素交互,本文給大家介紹python pywinauto使用過程及問題小結(jié),感興趣的朋友一起看看吧
    2024-10-10
  • Python快速從視頻中提取視頻幀的方法詳解

    Python快速從視頻中提取視頻幀的方法詳解

    本文為大家介紹一種從視頻中抽取視頻幀的方法,由于單線程抽取視頻幀速度較慢,因此這里我們增加了多線程的方法,感興趣的小伙伴可以動手嘗試一下
    2022-07-07
  • Python實現(xiàn)批量識別銀行卡號碼以及自動寫入Excel表格步驟詳解

    Python實現(xiàn)批量識別銀行卡號碼以及自動寫入Excel表格步驟詳解

    這篇文章主要介紹了使用Python實現(xiàn)高效摸魚,批量識別銀行卡號碼并且自動寫入Excel表格,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2023-01-01
  • Python無權(quán)點文件轉(zhuǎn)化成鄰接矩陣方式

    Python無權(quán)點文件轉(zhuǎn)化成鄰接矩陣方式

    這篇文章主要介紹了Python無權(quán)點文件轉(zhuǎn)化成鄰接矩陣方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Python實現(xiàn)的樸素貝葉斯分類器示例

    Python實現(xiàn)的樸素貝葉斯分類器示例

    這篇文章主要介紹了Python實現(xiàn)的樸素貝葉斯分類器,結(jié)合具體實例形式分析了基于Python實現(xiàn)的樸素貝葉斯分類器相關(guān)定義與使用技巧,需要的朋友可以參考下
    2018-01-01
  • 讓Python程序定時執(zhí)行的8種方法整理

    讓Python程序定時執(zhí)行的8種方法整理

    在日常工作中,我們常常會用到需要周期性執(zhí)行的任務(wù),一種方式是采用?Linux?系統(tǒng)自帶的?crond?結(jié)合命令行實現(xiàn),另外一種方式是直接使用Python。本文整理了一下?Python?定時任務(wù)的實現(xiàn)方式,希望對大家有所幫助
    2023-01-01
  • Python實現(xiàn)的二維碼生成小軟件

    Python實現(xiàn)的二維碼生成小軟件

    這篇文章主要介紹了Python實現(xiàn)的二維碼生成小軟件,使用wxPython、python-qrcode、pyqrcode、pyqrnative等技術(shù)和開源類庫實現(xiàn),需要的朋友可以參考下
    2014-07-07
  • 基于Python制作炸金花游戲的過程詳解

    基于Python制作炸金花游戲的過程詳解

    《詐金花》又叫三張牌,是在全國廣泛流傳的一種民間多人紙牌游戲。比如JJ比賽中的詐金花(贏三張),具有獨特的比牌規(guī)則。本文江將通過Python語言實現(xiàn)這一游戲,需要的可以參考一下
    2022-02-02
  • python實現(xiàn)發(fā)送郵件及附件功能

    python實現(xiàn)發(fā)送郵件及附件功能

    這篇文章主要為大家詳細介紹了python實現(xiàn)發(fā)送郵件及附件功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05

最新評論