自動化測試模型

自動化測試模型可以看作自動化測試框架與工具設(shè)計的思想。自動化測試不僅僅是單純寫腳本運行就可以了,還需要考慮到如何使腳本運行效率提高,代碼復(fù)用、參數(shù)化等問題。自動化測試模型分為四大類:線性模型、模塊化驅(qū)動、數(shù)據(jù)驅(qū)動、關(guān)鍵字驅(qū)動。

  • 線性模型
    通過錄制或編寫對應(yīng)應(yīng)用程序的操作步驟產(chǎn)生的線性腳本。單純的來模擬用戶完整的操作場景。線性腳本中每個腳本都相互獨立,且不會產(chǎn)生其他依賴與調(diào)用,其實就是簡單模擬用戶某個操作流程都腳本。
    優(yōu)點:每個腳本相對獨立,且不產(chǎn)生其他依賴和調(diào)用。
    缺點:用例之間存在重復(fù)的操作, 開發(fā)成本高。比如重復(fù)的用戶登錄和退出。維護成本高,由于重復(fù)的操作,當(dāng)重復(fù)的操作發(fā)生改變時,則需要逐一進行腳本的修改。

案例:在帝國軟件主頁自動登錄和退出操作

from selenium import webdriver
from time import sleep

'''
線性模型:
線性腳本中每個腳本都相互獨立,且不會產(chǎn)生其他依賴與調(diào)用,其實就是簡單模擬用戶某個操作流程的腳本。
'''

driver = webdriver.Chrome()

driver.get("http://localhost/")

# 登錄賬號
driver.find_element_by_name('username').clear()
driver.find_element_by_name('username').send_keys('xiaojuan')

driver.find_element_by_name('password').clear()
driver.find_element_by_name('password').send_keys('123456')

driver.find_element_by_name('Submit').click()


sleep(5)

# 退出登錄
driver.find_element_by_link_text('退出').click()

sleep(2)

alert = driver.switch_to.alert
alert.accept()

driver.quit()

  • 模塊化驅(qū)動
    模塊化驅(qū)動,把重復(fù)的操作代碼封裝為獨立的公共模塊,當(dāng)用例執(zhí)行時需要用到這部分,直接調(diào)用即可。比如登錄系統(tǒng)、退出登錄、截圖函數(shù)等等。
    優(yōu)點:減少代碼重復(fù)性,提高代碼的復(fù)用性,可維護性高。
    缺點:雖然模塊化的步驟相同,但是測試數(shù)據(jù)不同,仍需要編寫重復(fù)的腳本。比如說重復(fù)的登錄模塊,如果登錄用戶不同,依舊要重復(fù)編寫登錄腳本。

案例:封裝登錄模塊及調(diào)用登錄模塊

from selenium import webdriver
from time import sleep


class Login():

    def user_login(self, driver):
        # 登錄賬號
        driver.find_element_by_name('username').clear()
        driver.find_element_by_name('username').send_keys('xiaojuan')

        driver.find_element_by_name('password').clear()
        driver.find_element_by_name('password').send_keys('123456')

        driver.find_element_by_name('Submit').click()

    def user_logout(self, driver):
        # 退出登錄
        driver.find_element_by_link_text('退出').click()

        sleep(2)

        alert = driver.switch_to.alert
        alert.accept()


if __name__ == "__main__":
#  以下腳本,當(dāng)前模塊運行時調(diào)用,當(dāng)其它模塊調(diào)用該模塊時,不運行
    driver = webdriver.Chrome()
    driver.get("http://localhost/")

    driver.implicitly_wait(10)

    L = Login()
    L.user_login(driver)
    L.user_logout(driver)

調(diào)用以上登錄模塊內(nèi)容:

from loginClass import *
from selenium import webdriver


driver = webdriver.Chrome()
driver.get("http://localhost/")

driver.implicitly_wait(10)

Login().user_login(driver)
Login().user_logout(driver)

driver.quit()
  • 數(shù)據(jù)驅(qū)動(參數(shù)化)
    數(shù)據(jù)驅(qū)動,數(shù)據(jù)的改變從而驅(qū)動自動化測試的執(zhí)行,最終引起測試結(jié)果的改變。 裝載數(shù)據(jù)的方式可以是列表、字典或是外部文件(txt、csv、xml、excel),目的就是實現(xiàn)數(shù)據(jù)和腳本的分離。
    優(yōu)點:通過這種方式,將數(shù)據(jù)和用例分離,可以快速增加相似測試,完成不同數(shù)據(jù)情況下的測試。

案例:參數(shù)化封裝登錄模塊,并實現(xiàn)不同賬戶的登錄測試

from selenium import webdriver
from time import sleep


class Login():

    def login(self,driver,username,password):
        # 登錄賬號
        driver.find_element_by_name('username').clear()
        driver.find_element_by_name('username').send_keys(username)

        driver.find_element_by_name('password').clear()
        driver.find_element_by_name('password').send_keys(password)

        driver.find_element_by_name('Submit').click()


    def logout(self,driver):
        # 退出登錄
        driver.find_element_by_link_text('退出').click()

        sleep(2)

        alert = driver.switch_to.alert
        alert.accept()


if __name__ == "__main__":
    driver = webdriver.Chrome()
    driver.get("http://localhost/")

    driver.implicitly_wait(10)

    Login().login(driver, 'xiaojuan1', '123456')
    Login().logout(driver)

    Login().login(driver, 'xiaojuan', '123456')
    Login().logout(driver)

    driver.quit()
from loginClassParam import *
from selenium import webdriver
from time import sleep


driver = webdriver.Chrome()

driver.get("http://localhost/")

driver.implicitly_wait(10)

Login().login(driver, 'xiaojuan', '123456')
Login().logout(driver)

sleep(3)

Login().login(driver, 'xiaojuan1', '123456')
Login().logout(driver)

sleep(2)

driver.quit()
  • 關(guān)鍵字驅(qū)動
    通過關(guān)鍵字的改變引起測試結(jié)果的改變叫關(guān)鍵字驅(qū)動測試。 selenium IDE也是一種傳統(tǒng)的關(guān)鍵字驅(qū)動的自動化工具,Robot Framework 是一個功能更強大的關(guān)鍵字驅(qū)動測試框架。

現(xiàn)實中,使用比較方便的是模塊化驅(qū)動與數(shù)據(jù)驅(qū)動相結(jié)合的形式,使用代碼復(fù)用性高,可維護性好,同時也可以實現(xiàn)測試數(shù)據(jù)與用例分離的效果。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一個自動化測試框架就是一個集成體系,在這一體系中包含測試功能的函數(shù)庫,測試數(shù)據(jù)源,測試對象標準,以及各種可重用的模...
    qianyewhy閱讀 1,202評論 0 1
  • (1)線性模型行 通過錄制或編寫對被測程序的操作步驟產(chǎn)生相應(yīng)的線性腳本,每個腳本相對獨立,且不產(chǎn)生其他依賴與調(diào)用,...
    初見_0308閱讀 309評論 0 0
  • 測試自動化已經(jīng)是常見的技術(shù),自動化測試模型是一個集成體系,定義一個特殊軟件產(chǎn)品的自動化測試規(guī)則。 包含測試功能函數(shù)...
    測試小懶閱讀 512評論 0 0
  • 登錄模塊化 從業(yè)務(wù)流程及用例分析,每一個自動化測試用例的執(zhí)行過程為:先執(zhí)行登錄操作,然后執(zhí)行具體的操作(如文件/文...
    qianyewhy閱讀 677評論 0 0
  • 最后介紹的是烈夫.托爾斯泰,一個自我折磨,自我折騰的人、離家出走的老翁,一個打破生活的安寧以便安撫良心的...
    斑駁明媚閱讀 376評論 0 1

友情鏈接更多精彩內(nèi)容