1深夯、什么是單元測(cè)試框架
單元測(cè)試是指在軟件開(kāi)發(fā)當(dāng)中急膀,針對(duì)軟件的最小單位(函數(shù)邀跃,方法)進(jìn)行正確性的檢查測(cè)試。
2小槐、單元測(cè)試框架主要做什么
測(cè)試發(fā)現(xiàn):從多個(gè)文件里面去找到我們需要的測(cè)試用例拇派。
測(cè)試執(zhí)行:按照一定的順序和規(guī)則去執(zhí)行測(cè)試用例,并生成結(jié)果凿跳。
測(cè)試判斷:通過(guò)斷言判斷預(yù)期結(jié)果和實(shí)際結(jié)果的差異件豌。
測(cè)試報(bào)告:統(tǒng)計(jì)測(cè)試進(jìn)度,耗時(shí)控嗜,通過(guò)率等數(shù)據(jù)茧彤,并生成測(cè)試報(bào)告。
3疆栏、單元測(cè)試框架和自動(dòng)化測(cè)試框架有什么關(guān)系
(1)自動(dòng)化測(cè)試框架作用:
提高測(cè)試效率曾掂,降低自動(dòng)化用例的維護(hù)成本。
減少人工干預(yù)壁顶,提高測(cè)試的準(zhǔn)確性珠洗,增加代碼的重用性。
核心思想是讓不懂代碼的人若专,也能夠通過(guò)這個(gè)框架去實(shí)現(xiàn)自動(dòng)化測(cè)試许蓖。
(2)Pytest單元測(cè)試框架和自動(dòng)化測(cè)試框架的關(guān)系
單元測(cè)試框架:只是自動(dòng)化測(cè)試框架中的組成部分之一。
pom設(shè)計(jì)模式、數(shù)據(jù)驅(qū)動(dòng)膊爪、關(guān)鍵字驅(qū)動(dòng)自阱、全局配置文件的封裝、日志監(jiān)控米酬、Selenium
和Requests
的二次封裝沛豌、報(bào)告郵件、斷言體系的設(shè)計(jì)封裝等赃额,都是自動(dòng)化測(cè)試框架中的組成部加派。
4、Pytest測(cè)試框架說(shuō)明
Pytest是Python的?種單元測(cè)試框架爬早,全功能且非常成熟哼丈,同?帶的Unittest測(cè)試框架類(lèi)似,相?于Unittest框架使?起來(lái)更簡(jiǎn)潔筛严,效率更?醉旦。
Pytest測(cè)試框架,主要有以下幾個(gè)特點(diǎn):
Pytest是一個(gè)非常成熟的Python的單元框架桨啃,比Unittest更靈活车胡,容易上手。
Pytest支持參數(shù)化配置照瘾。
Pytest能夠支持簡(jiǎn)單的單元測(cè)試和復(fù)雜的功能測(cè)試匈棘,還可以和Selenium,Requests析命,Appium結(jié)合實(shí)現(xiàn)web自動(dòng)化主卫,接口自動(dòng)化,APP自動(dòng)化鹃愤。
-
執(zhí)行測(cè)試過(guò)程中可以將某些測(cè)試跳過(guò)簇搅,或者對(duì)某些預(yù)期失敗的case標(biāo)記成失敗,也支持重復(fù)執(zhí)行失敗的case软吐。(跳過(guò)用例和reruns失敗用例重試)
即:支持測(cè)試用例的
skip
和xfail
處理瘩将。 Pytest可以很好的和Jenkins進(jìn)行持續(xù)集成。
Pytest可以和
allure
生成非常美觀的測(cè)試報(bào)告凹耙。在Pytest框架下可以執(zhí)行Unittest框架的用例姿现。
-
Pytest有很多非常強(qiáng)大的第三方插件,并且這些插件能夠?qū)崿F(xiàn)很多實(shí)用的操作肖抱。
并且也可以自定義Pytest插件备典。
5、Pytest框架和Unittest框架區(qū)別
(1)Unittest
Unittest是Python標(biāo)準(zhǔn)庫(kù)中自帶的單元測(cè)試框架虐沥,Unittest有時(shí)候也被稱為PyUnit熊经,就像JUnit是Java語(yǔ)言的標(biāo)準(zhǔn)單元測(cè)試框架一樣泽艘,Unittest框架則是Python語(yǔ)言的標(biāo)準(zhǔn)單元測(cè)試框架欲险。
Unittest支持自動(dòng)化測(cè)試镐依,測(cè)試用例的初始化、關(guān)閉和測(cè)試用例的聚合等功能天试,它有一個(gè)很重要的特性:它是通過(guò)類(lèi)(class)的方式槐壳,將測(cè)試用例組織在一起。
(2)Pytest
Pytest是Python的另一個(gè)第三方單元測(cè)試庫(kù)喜每。它的目的是讓單元測(cè)試變得更容易务唐,并且也能擴(kuò)展到支持應(yīng)用層面復(fù)雜的功能測(cè)試。
(3)區(qū)別
1)用例編寫(xiě)規(guī)則:
-
Unittest
測(cè)試框架:1带兜、提供
test.cases
枫笛,test suites
,test fixtures
刚照,test rurner
相關(guān)類(lèi)刑巧,讓測(cè)試更加明確、方便无畔、可控啊楚。2、測(cè)試文件編寫(xiě)前浑彰,必須先導(dǎo)入
Unittest
測(cè)試框架恭理,import unittest
。3郭变、測(cè)試類(lèi)必須繼承
unittest.TestCase
類(lèi)颜价,且測(cè)試類(lèi)要Test_
開(kāi)頭。(可去掉橫線诉濒,下同)4周伦、測(cè)試方法要以
test_
開(kāi)頭。5循诉、測(cè)試類(lèi)必須要用
unittest.main()
方法執(zhí)行横辆。 -
Pytest
測(cè)試框架:1、基于Unittest的擴(kuò)展框架茄猫,比Unittest更簡(jiǎn)潔狈蚤、更高效。
2划纽、測(cè)試文件必須
test_
開(kāi)頭脆侮。3、測(cè)試類(lèi)命名必須以
test_
開(kāi)頭勇劣。4靖避、測(cè)試方法必須
test_
開(kāi)頭(函數(shù)也一樣)潭枣。(規(guī)則可自定義。)
-
總結(jié):
Unittest
:用例格式復(fù)雜幻捏,不能兼客Pytest用例盆犁。Pytest
:用例格式簡(jiǎn)單,可以兼容Unittest用例篡九。
2)用例的前置和后置:
-
Unittest
測(cè)試框架:提供了
setUp/tearDowm
方法谐岁,只能針對(duì)所有用例。 -
Pytest
測(cè)試框架:1榛臼、Pytest提供了模塊級(jí)伊佃、函數(shù)級(jí)、類(lèi)級(jí)沛善、方法級(jí)的
setup/teardown
航揉,比Unittest的setup/tearDowm
方法更活。模塊級(jí)
setup_module/teardown_module
:開(kāi)始于模塊始末金刁,全局帅涂。類(lèi)級(jí)
setup_class/teardown_class
:只在類(lèi)中前后運(yùn)行一次(類(lèi)中)。函數(shù)級(jí)
setup_function/teardow_function
:只對(duì)函數(shù)用例生效(不在類(lèi)中)胀葱。方法級(jí)
setup_method/teardown_method
:開(kāi)始于方法始末(在類(lèi)中)漠秋。類(lèi)里面的
setup/teardown
:運(yùn)行在調(diào)用方法的前后。
2抵屿、函數(shù)前加
@pytest.fixtures()
裝飾器庆锦,在測(cè)試用例中使用Fixture函數(shù)。可作用于
function\module\class\session
中轧葛。fixture
相對(duì)于setup/teardown
來(lái)說(shuō)的優(yōu)勢(shì)搂抒,如下:命名方式靈活,不局限于
setup/teardown
尿扯。conftest.py
配置里可以實(shí)現(xiàn)數(shù)共享求晶,無(wú)需import
就可自動(dòng)找到配置數(shù)據(jù),可供多個(gè).py
文件調(diào)用衷笋。scope="module"
芳杏,可以實(shí)現(xiàn)多個(gè).py
文件跨文件共享前置。scope="session"
辟宗,可以實(shí)現(xiàn)多個(gè).py
文件跨文件使用一個(gè)session
來(lái)完成用例爵赵。使用
yeild
返回,相當(dāng)于teardown
的作用泊脐。
3)參數(shù)化:
Unittest
測(cè)試框架:結(jié)合DDT實(shí)現(xiàn)參數(shù)化空幻。Pytest
測(cè)試框架:直接使用@pytest.mark.parametrize
裝飾器。
4)斷言:
Unittest
測(cè)試框架:可使用提供的assertEqual
容客,assertIn
秕铛、assertTrue
约郁,assertFalse
斷言方法。Pytest
測(cè)試框架:直接使用Python語(yǔ)言內(nèi)置的assert
表達(dá)式但两。
5)用例分類(lèi)執(zhí)行:
Unittest
測(cè)試框架:默認(rèn)執(zhí)行全部用例鬓梅,可以通過(guò)加載testsuite
執(zhí)行部分模塊的用例。Pytest
測(cè)試框架:可以通過(guò)@pytest.mark
來(lái)標(biāo)記測(cè)試用例镜遣,執(zhí)行命令前加上參數(shù)"-m"己肮,即可運(yùn)行標(biāo)記的用例士袄。
6)失敗重運(yùn)行:
Unittest
測(cè)試框架:無(wú)悲关。Pytest
測(cè)試框架:支持用例執(zhí)行失敗重跑,提供了pytest-rerunfailures
插件娄柳。
7)報(bào)告:
Unittest
測(cè)試框架:使用HTMLTestRunnerNew
庫(kù)生成測(cè)試報(bào)告寓辱。Pytest
測(cè)試框架:使用pytest-HTML
、allure
插件生成測(cè)試報(bào)告赤拒。