在自動化測試專案中,為了實現更多功能,我們需要引入不同的庫、框架
。
首先,你需要將常用的這些庫、框架都裝上。
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框架的所需要知識更多,實現一個機器學習框架就更難了,自動化測試框架是站在一堆人的肩膀上來實現,難度係數要低很多。