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

python自動(dòng)化測(cè)試Data?Driven?Testing(DDT)用例解析

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

What is Data Driven Testing

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

Why Data Driven Testing

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

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

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

How to create a Data Driven Automation Framework

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

為了能更加方便的使用DDT的方式編寫測(cè)試,有很多工具來(lái)輔助我們更簡(jiǎn)單的實(shí)現(xiàn)DDT。如果你的常用編程語(yǔ)言是python,可以了解下python中的selenium-ddt庫(kù)。里面的常用方法是@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')//讀取文件應(yīng)用文件中的數(shù)據(jù)
   def test8(self, value2):
       print(value2)
if __name__ == '__main__':
   unittest.main()

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

下面是一個(gè)pytest參數(shù)化的。pytest的參數(shù)化是通過(guò)@pytest.mark.parametrize注解來(lái)實(shí)現(xiàn)的。

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

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

login_data = [
  ('test001', 'test001@qq.com', '123456', '123456', '666', '驗(yàn)證碼不正確'),
  ('test200', 'test009@qq.com', '123456', '123456', '111', '注冊(cè)成功,點(diǎn)擊確定進(jìn)行登錄。'),
]
@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ū)動(dòng)測(cè)試過(guò)程中,使用真實(shí)的數(shù)據(jù)是最理想的。
  • 測(cè)試流程應(yīng)該在編寫在測(cè)試腳本內(nèi)。
  • 使用數(shù)據(jù)來(lái)驅(qū)動(dòng)斷言。
  • 測(cè)試數(shù)據(jù)要包含積極和消極的結(jié)果。
  • 將數(shù)據(jù)驅(qū)動(dòng)的功能測(cè)試復(fù)用在其他形式的測(cè)試,如安全或者性能測(cè)試。

Disadvantages of Data Driven testing

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

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

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

相關(guān)文章

  • numpy.linalg.eig() 計(jì)算矩陣特征向量方式

    numpy.linalg.eig() 計(jì)算矩陣特征向量方式

    今天小編就為大家分享一篇numpy.linalg.eig() 計(jì)算矩陣特征向量方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-11-11
  • Python實(shí)現(xiàn)文件下載的方法匯總與適用場(chǎng)景介紹

    Python實(shí)現(xiàn)文件下載的方法匯總與適用場(chǎng)景介紹

    在Python開(kāi)發(fā)中,文件下載是常見(jiàn)需求,本文將全面介紹10種Python下載文件的方法,每種方法都配有完整代碼示例和適用場(chǎng)景分析,大家可以根據(jù)需要進(jìn)行選擇
    2025-05-05
  • Django異步任務(wù)線程池實(shí)現(xiàn)原理

    Django異步任務(wù)線程池實(shí)現(xiàn)原理

    這篇文章主要介紹了Django異步任務(wù)線程池實(shí)現(xiàn)原理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • python中語(yǔ)法糖的妙用分享

    python中語(yǔ)法糖的妙用分享

    在Python中,語(yǔ)法糖是指一些為了增加代碼的可讀性、易用性和簡(jiǎn)潔性而添加的特性,本文為大家整理了一些python中常見(jiàn)語(yǔ)法糖的使用,需要的小伙伴可以了解下
    2023-11-11
  • 手把手教你用Django執(zhí)行原生SQL的方法

    手把手教你用Django執(zhí)行原生SQL的方法

    這篇文章主要介紹了手把手教你用Django執(zhí)行原生SQL的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • python數(shù)據(jù)庫(kù)編程 Mysql實(shí)現(xiàn)通訊錄

    python數(shù)據(jù)庫(kù)編程 Mysql實(shí)現(xiàn)通訊錄

    這篇文章主要為大家詳細(xì)介紹了python數(shù)據(jù)庫(kù)編程,Mysql實(shí)現(xiàn)通訊錄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • 使用uv安裝python任意版本的命令詳解(uv?python?install)

    使用uv安裝python任意版本的命令詳解(uv?python?install)

    uv是一個(gè)超快速的Python包安裝器和解析器,用Rust編寫,是pip、pip-tools和virtualenv的高速替代品,這篇文章主要介紹了使用uv安裝python任意版本命令(uv?python?install)的相關(guān)資料,需要的朋友可以參考下
    2025-08-08
  • python基于Selenium的web自動(dòng)化框架

    python基于Selenium的web自動(dòng)化框架

    這篇文章主要介紹了python基于Selenium的web自動(dòng)化框架,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • 詳解使用Python處理文件目錄的相關(guān)方法

    詳解使用Python處理文件目錄的相關(guān)方法

    這篇文章主要介紹了使用Python處理文件目錄的相關(guān)方法,使用到了os模塊,需要的朋友可以參考下
    2015-10-10
  • python去掉空格的一些常用方式

    python去掉空格的一些常用方式

    處理字符串時(shí)經(jīng)常要定制化去掉無(wú)用的空格,python 中要么用存在的常規(guī)方法,或者用正則處理,下面這篇文章主要給大家介紹了python去掉空格的一些常用方式,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-01-01

最新評(píng)論

松原市| 靖西县| 清水县| 庐江县| 信阳市| 东乡县| 库尔勒市| 洪江市| 高台县| 临漳县| 平塘县| 双桥区| 吉木乃县| 阿克陶县| 岳普湖县| 九江市| 双流县| 阳朔县| 孟州市| 桃园市| 曲沃县| 孝感市| 鹤岗市| 桂林市| 新巴尔虎左旗| 云梦县| 防城港市| 滨州市| 剑阁县| 九江市| 南昌县| 饶阳县| 芜湖市| 遵义市| 文昌市| 昆明市| 增城市| 永丰县| 利川市| 佛坪县| 邢台市|