淺談自動化測試框架開發

蟲師發表於2021-07-29

在自動化測試專案中,為了實現更多功能,我們需要引入不同的庫、框架

首先,你需要將常用的這些庫、框架都裝上。

pip install requests
pip install selenium
pip install appium
pip install pytest
pip install pytest-rerunfailures
pip install allure-pytest
...

然後,在專案中使用他們。

import pytest
import yagmail
from selenium import webdriver


class MyTest:

    def setup(self):
        self.browser = webdriver.Chrome()

    def test_case(self):
        browser.find_element_by_id("user").send_keys("admin")
        browser.find_element_by_id("pawd").send_keys("admin123")
        # ...
        page.close()


if __name__ == "__main__":
    pytest.main(["-s", "-v", "./test_case.py",
        "--html", "./test_report.html",
        "--reruns", "3"
    ])
    yagmail.SMTP()
    # ...

設計與封裝

例如上面的自動化專案程式碼,我們寫多了之後,就會發現常用的庫就是那麼幾個,而且用法大同小異,俗稱樣板程式碼。

這個時候你就可以考慮去做一些封裝,然後把那些常用的功能封裝成了一堆公共方法,在你的專案程式碼中呼叫,這樣可以更快速的完成開發任務,並且便於應對需求的變化。

import pytest
from common import mail
from test_data import TestData
from page import LoginPage


class MyTest:

    def test_case(self, browser):
        page = LoginPage(browser)
        page.username.send_keys(TestData.admin)
        page.passowrd.send_keys(TestData.admin_pawd)
        # ...
        page.close()


if __name__ == "__main__":
    pytest.main(["-s", "-v", "./test_case.py",
        "--html", "./test_report.html",
        "--reruns", "3"
    ])
    mail.SMTP()
    # ...

自動化測試框架

自動化測試框架和你在專案中封裝的公共模組有著一些不同。

  • 它實現的功能更通用:例如,你可以在專案中封裝一個登入的公共模組,用於所以用例的登入,但不能在框架裡面封裝一個登入,因為,你們的專案登入是用賬號密碼,別人家用的是手機號+驗證碼,你封裝的登入脫離了你的專案就不可用了,顯然不應該放到框架裡。

  • 它應該是和專案分離:因為它要給更多的人使用,並且不能輕易被修改,因此,它應該是獨立安裝的,不應該和專案程式碼混到一起。如果一個框架被使用者輕易的改來改去。請問,如何升級?使用者想體驗新的版本怎麼辦?

  • 它應該有一些設計創新:我可不可以把selenium的get()方法改個名字叫open()封裝到自己的框架裡。當然可以,如果整個框架都是在把別人的API自己換個名字包一層,這和紅芯瀏覽器有什麼區別?

假設我們開發的自動化測試框架叫xtest

首先,需要安裝xtest。

pip install xtest

使用xtest編寫測試用例。

import xtest
from xtest import TestData
from page import LoginPage


class MyTest:

    def test_case(self, browser):
        page = LoginPage()
        page.username.send_keys(TestData.user)
        page.passowrd.send_keys(TestData.pawd)
        # ...

if __name__ == "__main__":
    xtest.main(mail=True)

它應該以更簡單的方式實現更強大的功能。當然,不同型別的框架,難易程度也是不同的,實現一個web框架的所需要知識更多,實現一個機器學習框架就更難了,自動化測試框架是站在一堆人的肩膀上來實現,難度係數要低很多。

相關文章