?1、分層設(shè)計(jì)思想幢竹、關(guān)鍵字驅(qū)動(dòng)耳峦、數(shù)據(jù)驅(qū)動(dòng)
1.1PO模式PageLocator、PageObjects焕毫、TestCases
例如:把30個(gè)功能封裝起來蹲坷,有500個(gè)功能測試用例,按照業(yè)務(wù)場景從30個(gè)頁面當(dāng)中調(diào)用需要的頁面即可咬荷。PO模式冠句,全稱Page object,頁面對象模型
將頁面的元素定位和元素行為封裝成一個(gè)page類轻掩,實(shí)現(xiàn)頁面和測試用例的分離幸乒。
在測試用例中,需要調(diào)用頁面對象中的行為唇牧,組成測試用例罕扎。
優(yōu)勢:
(1)當(dāng)某個(gè)頁面元素發(fā)生變化時(shí)聚唐,只需要修改該頁面對象中的代碼即可,測試用例不需要修改腔召。
(2)提高代碼復(fù)用率杆查,結(jié)構(gòu)清晰,維護(hù)代碼容易臀蛛。
(3)測試用例發(fā)生變化時(shí)亲桦,不需要或者只需要修改少數(shù)頁面對象代碼即可。
分層:Testdatas-重用浊仆、不同的環(huán)境不同的數(shù)據(jù)
1.2數(shù)據(jù)驅(qū)動(dòng):ddt模塊客峭,每個(gè)用例啟動(dòng)會話/所有用例啟動(dòng)會話,盡量不依賴測試環(huán)境-選擇自己創(chuàng)建條件
盡量保證用例的獨(dú)立性
保證用例的穩(wěn)定性-連續(xù)運(yùn)行5次-jenkins-盡早加入持續(xù)集成
定位表達(dá)式的靈活的 抡柿、等待方面的處理
用例不宜復(fù)雜舔琅,拆成多個(gè)用例,考慮成本洲劣,選擇性變成自動(dòng)化用例 备蚓。部分前置或后置,用接口來代替
basepage:關(guān)鍵字封裝:等待囱稽、查找元素郊尝、點(diǎn)擊、輸入战惊、獲取文本虚循、獲取屬性、窗口切換样傍、iframe切換横缔、上傳、
元素的操作:等待衫哥、查找茎刚、操作
實(shí)現(xiàn):頁面當(dāng)中的每一個(gè)操作,都進(jìn)行了異常捕獲撤逢、失敗截圖膛锭、操作時(shí)間記錄、日志打印
Pageobjects當(dāng)中蚊荣,全部調(diào)用basepage提供的關(guān)鍵字初狰,來封裝業(yè)務(wù)函數(shù)
1.3pytest測試框架,更方便的篩選用例-冒煙/回歸互例,更方便的用例組織
特點(diǎn):1奢入、自動(dòng)發(fā)現(xiàn)測試用例test_*.py/*_test.py、test_的函數(shù)/Test類并沒有初始化函數(shù)中的test_(函數(shù))
2媳叨、assert斷言
3腥光、fixture(前置后置)測試會話級別(session)关顷、測試模塊(module)、測試類(class)武福、測試用例(function)
4议双、豐富的插件庫,allure庫
1.4Mark功能:
1捉片、標(biāo)簽名先注冊:pytest.ini [pytest] markes=smoke
2平痰、測試用例/測試類/測試模塊 測試用例:@pytest.mark.smoke
測試類/測試模塊 :pytest.mark=[pytest.mark.smoke,pytest.mark.loginn]待確認(rèn)
1.5pytest命令行:
1、pytest在按個(gè)目錄下運(yùn)行伍纫,那就在哪個(gè)目錄中去搜索用例
2觉增、根據(jù)標(biāo)簽過濾用例:-m標(biāo)簽名
3、-s -v 在控制臺當(dāng)中看到更詳細(xì)的用例運(yùn)行狀態(tài)
1.6pytest測試報(bào)告:
1翻斟、xml--跟jenkins集成逾礁,就是解讀xml文件
2、html--插件:pytest html 參數(shù):--html-../../(相對pytest的命令執(zhí)行目錄的相對路徑)
conftest.py
1访惜、共享前置后置
2嘹履、不同的包目錄當(dāng)中,可以有自己的conftest.py
3债热、定義前置后置
@pytest.fixture(scope="")
def func1():
#前置
yield [返回值]
1.7砾嫉、測試類/測試函數(shù) @pytest.mark.usefixture("函數(shù)名稱")
如果有返回值,那么把函數(shù)名稱作為測試 用例的參數(shù)即可窒篱,函數(shù)名稱-返回值
數(shù)據(jù)驅(qū)動(dòng):pytest參數(shù)化
1焕刮、@pytest.mark.parametries("param1",[1,2,3])
def test_1(param1):
pass
2、@pytest.mark.parametries("param1,param2",[(1,2),(3,4)])
def test_2(param1,param2):
pass
3墙杯、@pytest.mark.parametries("param1,param2",[1,2配并,3,4])
@pytest.mark.parametries("param2",[a,b])
def test_3(param1,param2):#兩個(gè)參數(shù)排列組合,有8組測試用例
pass
失敗重試機(jī)制:rerun高镐,插件:pytest-rerun pytest命令參數(shù)(pytest --rerun 5 --reruns-delay 1)
1.8pytest allure報(bào)告生成:
1溉旋、allure 命令環(huán)境安裝
2、pytest-安裝allure插件 命令參數(shù):--alluredir=../..(相對pytest執(zhí)行目錄的路徑)
3嫉髓、allure-serve
4观腊、jenkins進(jìn)一步集成:安裝jenkins的allure 插件
PageLocator、PageObjects算行、TestCase(conftest.py)梧油、TestDatas
common:basepage、logger州邢、工程路徑配置
outputs:日志儡陨、截圖、報(bào)告
main.py:框架入口
API:接口
2自動(dòng)化用例的規(guī)范
2.1自動(dòng)化運(yùn)行測試、測試用例組織迄委、測試報(bào)告生成褐筛、測試日志自動(dòng)生成类少、失敗截圖的自動(dòng)生成叙身、指定輸出路徑、提供入口
編寫規(guī)范:團(tuán)隊(duì)合作
文件命名規(guī)范:函數(shù)命名規(guī)范硫狞、通用的英文名稱(login,action)
元素定位規(guī)范:非絕對定位信轿、定期互相檢查
按模塊分層次:事先搭好
良好的 注釋
2.2pytest收集測試用例的規(guī)則:
1、符合命名規(guī)則test_*.py? *_test.py
2残吩、以test_開頭的函數(shù)名
3财忽、以Test開頭的測試類(沒有_init_函數(shù)),以test開頭的函數(shù)
mark:打標(biāo)簽方法:@pytest.mark.標(biāo)記名泣侮,運(yùn)行用例的時(shí)候可根據(jù)標(biāo)簽名來過濾用例? @pytest.mark
fixture:主要目的是為了提供一種可靠和重復(fù)性的手段去執(zhí)行那些基本的操作
用例執(zhí)行時(shí)清理和準(zhǔn)備 即彪,unnitest中指那些:setup(),teardown(),classSetup()classTeardown()
定義:函數(shù)類聲明時(shí),前面加上@pytest.fixture
區(qū)分環(huán)境準(zhǔn)備和環(huán)境清理使用yield,yield后面的代碼就是環(huán)境清理的
fixture設(shè)置返回值:yield 返回值
contest.py 定義公共的fixture活尊,多個(gè)測試類中都可以調(diào)用隶校,pytest提供了confest.py文件,可以將fixture定義在此文件中蛹锰,運(yùn)行時(shí)不需要導(dǎo)入這個(gè)文件深胳,自動(dòng)去查找,找到對應(yīng)的fixture
2.4編寫自動(dòng)化測試用例應(yīng)遵循的原則:
(1)一個(gè)用例為一個(gè)完整的場景铜犬,從用戶登錄到退出并關(guān)閉網(wǎng)頁
(2)一個(gè)用例只為驗(yàn)證一個(gè)功能點(diǎn)舞终,不要試圖在用戶登錄系統(tǒng)后把所有功能都驗(yàn)一遍。
(3)盡量少的編輯逆向邏輯用例癣猾,例如手機(jī)號輸錯(cuò)有幾十種敛劝,另一方面自動(dòng)化腳本比較脆弱,對于復(fù)雜的逆向邏輯實(shí)現(xiàn)容易出錯(cuò)
(4)用例與用例之間避免出現(xiàn)依賴
(5)一條用例執(zhí)行完成測試之后需要對測試場景進(jìn)行還原纷宇,以免影響其他用例的執(zhí)行攘蔽。