一谈竿、用例設(shè)計(jì)規(guī)則
1.unittest
(1)測(cè)試類必須繼承unittest.TestCase
(2)測(cè)試函數(shù)必須以"test_"開頭
(3)測(cè)試類必須有unittest.main()方法
2.pytest
(1)測(cè)試文件的文件名必須以"test_"開頭团驱,或者以"_test"結(jié)尾
(2)測(cè)試類命名必須以"Test"開頭
(3)測(cè)試函數(shù)名必須以"test"開頭
(4)測(cè)試類里面不能使用"__init__"方法
總結(jié):pytest是基于unittest衍生出來(lái)的新的測(cè)試框架,使用起來(lái)相對(duì)于unittest來(lái)說(shuō)更簡(jiǎn)單空凸、效率來(lái)說(shuō)更高嚎花,pytest兼容unittest測(cè)試用例,但是反過(guò)來(lái)unittest不兼容pytest呀洲,所以說(shuō)pytest的容錯(cuò)性更好一些紊选!在使用交互邏輯上面pytest比unittest更全一些!
unittest是python自帶的測(cè)試庫(kù)道逗,自我感覺(jué)的話兵罢,如果對(duì)python只是了解基礎(chǔ)知識(shí),學(xué)unittest框架相對(duì)于來(lái)說(shuō)要好理解些滓窍,unittest框架也完全可以實(shí)現(xiàn)市場(chǎng)上大部分的業(yè)務(wù)測(cè)試趣些!建議可以先了解下unittest框架,然后在學(xué)pytest框架贰您,可以更好的去感受一下兩個(gè)框架的優(yōu)缺點(diǎn)
二坏平、斷言對(duì)比
1.unittest 斷言
assertEqual(a, b)???? # 判斷a和b是否相等
assertNotEqual(a, b)???? # 判斷a不等于b
assertTrue(a)??? # 判斷a是否為Ture
assertFalse(a)??? #判斷a是否為False
assertIn(a, b)???? # a 包含在b里面
asserNotIn(a, b)??? # a 不包含在b里面
......
2.pytest 斷言
pytest只需要用assert 來(lái)斷言就行,assert 后面加需要斷言的條件就可以了锦亦,例如:assert? a = = b? # 判斷a是否等于b舶替、
assert a != b? # 判斷a不等于b、assert a in b?? # 判斷b包含a
總結(jié):從斷言上面來(lái)看杠园,pytest的斷言比unittest要簡(jiǎn)單些顾瞪,unittest斷言需要記很多斷言格式,pytest只有assert一個(gè)表達(dá)式,用起來(lái)比較方便
三陈醒、用例前置和后置
1.unittest前置和后置
(1)通過(guò)setup每個(gè)用例執(zhí)行前執(zhí)行惕橙,teardown每個(gè)用例執(zhí)行后執(zhí)行
(2)通過(guò)setupclass類里面所有用例執(zhí)行前執(zhí)行,teardownclass類里面所有用例執(zhí)行后執(zhí)行
2.pytest前置和后置
(1)模塊級(jí)別:setup_module/teardown_module钉跷,整個(gè).py全部用例開始前執(zhí)行/全部用例執(zhí)行完后執(zhí)行
(2)函數(shù)級(jí)別:setup_function/teardown_function弥鹦,只對(duì)函數(shù)級(jí)別生效,每個(gè)用例開始前和結(jié)束后執(zhí)行一次
(3)類級(jí)別:setup_class/teardown_function,只對(duì)類級(jí)別生效爷辙,類里面所有用例開始前執(zhí)行一次彬坏,所有用例執(zhí)行完執(zhí)行一次
(4)方法級(jí)別:setup_method/teardown_method,只是類里面方法級(jí)別生效,方法開始前執(zhí)行一致膝晾,方法結(jié)束后執(zhí)行一次
(5)方法級(jí)別:setup/teardown栓始,這個(gè)與setup_method/teardown_method用法很類似,但是級(jí)別比method級(jí)別要低血当,也就是說(shuō)在同一個(gè)方法中會(huì)先執(zhí)行setup_method再執(zhí)行setup幻赚,方法結(jié)束后先執(zhí)行teardown再執(zhí)行teardown_method
pytest自定義設(shè)置前置和后置:
通過(guò)firture可以自定義pytest的前置和后置,格式fixture(scope="function", params=None, autouse=False, ids=None, name=Noe)
scope:有四個(gè)級(jí)別臊旭,function(默認(rèn)),class,module,session
params:參數(shù)列表
autouse:False為默認(rèn)值落恼,意思代表需要根據(jù)設(shè)置的條件(scope級(jí)別)來(lái)激活fixture,如果為Ture巍扛,則表示所有function級(jí)別的都被激活fixture
ids:每個(gè)字符串id的列表,感覺(jué)沒(méi)啥實(shí)質(zhì)性作用
name:fixture的名字
四乏德、參數(shù)化
1.unittest參數(shù)化
可以通過(guò)nose_parameterized來(lái)實(shí)現(xiàn)撤奸,格式:@nose_parameterized.parameterized.expand(data), 'data'為list格式的參數(shù)化的數(shù)據(jù)
2.pytest參數(shù)化
通過(guò)裝飾器@pytest.mark.parametrize來(lái)實(shí)現(xiàn)
?
?
五、生成報(bào)告方式
1.unittest
通過(guò)HTMLTestRunner生成
2.pytest
(1)通過(guò)pytest-html生成html格式報(bào)告
(2)通過(guò)allure生成方案(很詳細(xì))