pytest測試實(shí)戰(zhàn)

pytest.org 為pytest的官網(wǎng)地址

安裝 pip install pytest

文件以test_開頭或_test結(jié)尾撇吞,類以Test開頭,方法以test_開頭抱虐。

git操作昌阿,在git上創(chuàng)建一個(gè)空的項(xiàng)目(沒有readme)饥脑,在gitbash中執(zhí)行命令$ ssh-keygen -t rsa -C "你的郵箱" 不需要密碼的情況下直接回車到生成成功本地pub證書恳邀,打開證書,將證書信息粘貼到git的ssh設(shè)置位置灶轰。在pycharm的terminal中執(zhí)行g(shù)it給的的git命令進(jìn)行提交谣沸。


git原理圖


pytest --collect-only 只收集用例,觀察執(zhí)行用例的順序

pytest -k "關(guān)鍵字" 執(zhí)行帶某些關(guān)鍵字的用例笋颤,"testcase" "add or div"

pytest xxx.py -vs 可以看到打印輸出乳附,否則pytest時(shí)不顯示打印輸出的。

@pytest.mark.login 可以自定義標(biāo)簽伴澄,還沒在pytest.ini配置文件中添加該標(biāo)簽時(shí)赋除,運(yùn)行會(huì)出現(xiàn)告警錯(cuò)誤。ini的內(nèi)容為:[pytest] markers = login 換行 另外一個(gè)標(biāo)簽非凌,使用pytest -m login 執(zhí)行帶該標(biāo)簽的用例

pytest --junitxml=./result.xml 可以生成一個(gè)測試結(jié)果的xml數(shù)據(jù)举农。

pytest --setup-show 回溯fixture的執(zhí)行過程。

pytest --help 可以查看pytest命令的一些可用參數(shù)敞嗡。

如果使用pytest執(zhí)行颁糟,需要先在setting中進(jìn)行pytest的配置,搜索pytest喉悴,將tools下面的選項(xiàng)選中pytest進(jìn)行配置棱貌。

setup,teardown框架結(jié)構(gòu)箕肃。在setup中進(jìn)行實(shí)例化婚脱,需要在左邊定義的實(shí)例對象加self.在后面的測試用例方法調(diào)用該實(shí)例也需要帶self.實(shí)例名。這樣就不需要在每個(gè)測試用例方法中都各實(shí)例化一次。在測試用例方法中實(shí)例化為a=b() b是一個(gè)在其他文件中定義的類障贸,需要先導(dǎo)入該測試文件涡贱。有模塊級(優(yōu)先級最高),setup_module/teardown_module惹想,函數(shù)級(不在類中)问词,setup_function/teardown_function,類級setup_class/teardown_class,方法級運(yùn)行于方法始末優(yōu)先級高于單獨(dú)的setup嘀粱,setup_method/teardown_method激挪,類里面的運(yùn)行在調(diào)用方法的前后,setup/teardown 锋叨,fixture是類似于該框架的一個(gè)方式垄分。

參數(shù)化:在方法或類上方加一個(gè)@pytest.mark.parametrize("字符串,多個(gè)用逗號(hào)隔開",[列表娃磺,多個(gè)列表就用方括號(hào)括起來薄湿,用逗號(hào)分隔])⊥滴裕可以在方法或類下的所有方法執(zhí)行時(shí)引用參數(shù)豺瘤。為了方便查看用例執(zhí)行的名稱,可以加ids=['對應(yīng)前面的列表數(shù)量听诸,中間逗號(hào)隔開']坐求。參數(shù)化主要提取的是變化的數(shù)據(jù),不變的數(shù)據(jù)不需要提取晌梨。當(dāng)連續(xù)存在多個(gè)變量的參數(shù)化裝飾器桥嗤,會(huì)以笛卡爾積的形式,從內(nèi)往外匹配生成多個(gè)參數(shù)化數(shù)據(jù)的完整組合仔蝌。如果把數(shù)據(jù)放到y(tǒng)aml文件中泛领,就是數(shù)據(jù)驅(qū)動(dòng)的方式。

測試數(shù)據(jù)類型可以分類管理敛惊。浮點(diǎn)型數(shù)據(jù)因?yàn)槎M(jìn)制轉(zhuǎn)換后會(huì)存在一些循環(huán)渊鞋,如所以如果不做位數(shù)限制,就會(huì)無法校驗(yàn)成功豆混。位數(shù)限制可以調(diào)用四舍五入方法round(算式或方法或變量,保留的位數(shù))篓像。小數(shù)轉(zhuǎn)二級制的方法:小數(shù)乘二,看整數(shù)位皿伺。0.1的二進(jìn)制就是0.00001100...?

捕獲異常员辩,可以使用try: except Exception:來包住,Exception是會(huì)捕獲所有異常的鸵鸥,如果要捕獲某些特定類型的錯(cuò)誤奠滑,需要對捕獲的錯(cuò)誤進(jìn)行細(xì)分丹皱,如zeroxxx 是除數(shù)為0的具體錯(cuò)誤。

yaml文件中宋税,列表嵌套列表摊崭。可以有多種方式杰赛。讀取yaml文件的方式 with open ("./datas/calc.yaml") as f:? ? ?datas =yaml.safe_load(f)? ? return datas

datas:

?-

? - 1

? - 2

- [a,b]

ids:

- ['c','d']

需要先裝yaml包呢簸,pip install pyyaml,多種安裝方式都可乏屯。

fixture與setup teardown配置不同的是根时,可以單獨(dú)引入,而不用多個(gè)同時(shí)引用辰晕。應(yīng)用方法蛤迎,@pytest.fixture(),可以傳到普通方法含友,也可以傳到fixture方法中替裆,一個(gè)方法中可以傳多個(gè)fixture。def 普通方法名(fixture方法名): 是直接使用方法名調(diào)用的方式窘问。還有一種方法是@pytest.mark.usefixtures('login'),在測試用例前加裝飾器辆童,該方法在被應(yīng)用方法有return值時(shí),也不會(huì)返回返回值南缓,不推薦使用胸遇。fixture在pytest上有用法介紹。@pytest.fixture()中可以帶的參數(shù)有fixture方法汉形、autouse參數(shù)不帶默認(rèn)為Flase,設(shè)置為True之后倍阐,就會(huì)在所有用例使用概疆。作用域scope:session>module>class>function(默認(rèn))。pytest --setup-show xx.py可以看到fixture的實(shí)際使用情況峰搪。在fixture方法中使用yield岔冀,相當(dāng)于return,有返回值概耻,且還會(huì)執(zhí)行teardown操作使套,即在yield后面的操作還會(huì)繼續(xù)執(zhí)行。

conftest.py 可以存儲(chǔ)fixture方法鞠柄,不需要導(dǎo)入就可以在測試文件中直接調(diào)用侦高。該文件名固定不可改成其他的。放在項(xiàng)目下厌杜,是全局?jǐn)?shù)據(jù)存儲(chǔ)的地方奉呛。如果不同目錄下有多個(gè)conftest.py文件计螺,會(huì)先從近的找,近的沒有瞧壮,去父級目錄找登馒,不會(huì)找兄弟目錄下的conftest。

fixture參數(shù)化咆槽,在fixture裝飾器方法里面帶params=[]參數(shù)陈轿,在fixture方法中調(diào)用request方法,調(diào)用request.param獲取參數(shù)秦忿。還可以帶ids=[]參數(shù)济欢,用來對返回值進(jìn)行用例名的格式化。fixture代替類的setup小渊、teardown時(shí)法褥,可以創(chuàng)建fixture方法,使用scope='class',并在方法中實(shí)例化對象酬屉,并使用yield 實(shí)例化對象進(jìn)行對象的傳遞半等,在用例中,可直接調(diào)用該方法來調(diào)用類方法呐萨,而不需要使用self杀饵。fixture參數(shù)化是返回一個(gè)列表數(shù)據(jù),索引列表下標(biāo)可以取出列表中對應(yīng)的數(shù)據(jù)谬擦。在測試類中切距,加載出該fixture,最終在測試類中的調(diào)用方式如下:


pytest插件

內(nèi)置插件:pytest內(nèi)置的 hook 函數(shù)

外部插件: 通過pip 安裝的插件

本地插件: fixture 自定義的插件內(nèi)容惨远,放在 conftest.py 文件中谜悟,pytest 會(huì)自動(dòng)的發(fā)現(xiàn)這些插件

pip install pytest-ordering 控制用例的執(zhí)行順序,在pytest上搜索后點(diǎn)擊homepage進(jìn)入github說明頁北秽,配合注釋器@pytest.mark.second 或者@pytest.mark.run(order=1)等順序參數(shù)使用葡幸。其中的hook函數(shù)pytest_collection_modifyitems(session,config,items)可以放到conftest中。用來自定義用例順序贺氓,比如將方法應(yīng)用的items:List 改為列表類型后蔚叨,再使用items.reverse()來翻轉(zhuǎn)列表順序。還可以對用例集的字符進(jìn)行轉(zhuǎn)碼辙培。增加一個(gè)用例集的循環(huán)蔑水,并在循環(huán)內(nèi)設(shè)置item.name=item.name.encode('utf-8').decode('unicode-escape'),item._nodeid=item.nodeid.encode('utf-8').decode('unicode-escape')python的external庫的site_package下的pytest中有一個(gè)Hookspec文件扬蕊,里面有所有的hook函數(shù)搀别。可以通過源碼https://github.com/ftobia/pytest-ordering/blob/develop/pytest_ordering/__init__.py中的item.add_marker(pytest.mark.run(order=order))方法來給方法打標(biāo)簽如item.add_marker(pytest.mark.foo)

item.nodeid=item.nodeiitem.nodeid.encode('utf-8').decode('unicode-escape')

pip install pytest-dependency 控制用例的依賴關(guān)系

pip install pytest-xdist 分布式并發(fā)執(zhí)行測試用例 按照cpu核數(shù)隨機(jī)分配用例給不同的核

pip install pytest-rerunfailures 失敗重跑

pip install pytest-assume 多重校驗(yàn) 使所有斷言都被執(zhí)行(正常碰到斷言失敗就會(huì)停止)

pip install pytest-radom-order 用例隨機(jī)執(zhí)行

pip install pytest-html 測試報(bào)告


如果需要被引用厨相,則package下需要有init文件领曼。

allure測試報(bào)告生成

安裝java 環(huán)境 建議jdk 1.8版本

allure 下載地址:Central Repository: io/qameta/allure/allure-commandline/2.13.8?1?安裝 allure環(huán)境鸥鹉,配置bat文件所在地址為環(huán)境變量

安裝 allure-pytest庫 pip install allure-pytest

Allure help 幫助文檔

生成 allure 測試結(jié)果 :pytest --alluredir=./report/

展示報(bào)告:allure serve ./report

生成最終版本的報(bào)告: allure generate ./report

在本地搭建一個(gè)網(wǎng)站服務(wù)(例如:Django)

python manage.py runserver (http://127.0.0.1:8000/?2)

@allure.feature("大分類名")

@allure.story("小類別名")

pytest.ini文件,通過pytest --help查看pytest.ini的一些配置信息庶骄。注釋使用分號(hào)開頭毁渗,在文件中加入python_files = 需要自定義被收集的用例文件名(不用帶引號(hào),多個(gè)值单刁,中間用空格隔開)灸异。其他還有日志、addopts = -vs --alluredir=./result --clean-alluredir等命令行參數(shù)的默認(rèn)值羔飞。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末肺樟,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子逻淌,更是在濱河造成了極大的恐慌么伯,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件卡儒,死亡現(xiàn)場離奇詭異田柔,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)骨望,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進(jìn)店門硬爆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人擎鸠,你說我怎么就攤上這事缀磕。” “怎么了劣光?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵袜蚕,是天一觀的道長。 經(jīng)常有香客問我赎线,道長廷没,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任垂寥,我火速辦了婚禮,結(jié)果婚禮上另锋,老公的妹妹穿的比我還像新娘滞项。我一直安慰自己,他們只是感情好夭坪,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布文判。 她就那樣靜靜地躺著,像睡著了一般室梅。 火紅的嫁衣襯著肌膚如雪戏仓。 梳的紋絲不亂的頭發(fā)上疚宇,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天,我揣著相機(jī)與錄音赏殃,去河邊找鬼敷待。 笑死,一個(gè)胖子當(dāng)著我的面吹牛仁热,可吹牛的內(nèi)容都是我干的榜揖。 我是一名探鬼主播,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼抗蠢,長吁一口氣:“原來是場噩夢啊……” “哼举哟!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起迅矛,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤妨猩,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后秽褒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體壶硅,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年震嫉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了森瘪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,127評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡票堵,死狀恐怖扼睬,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情悴势,我是刑警寧澤窗宇,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站特纤,受9級特大地震影響军俊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜捧存,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一粪躬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧昔穴,春花似錦镰官、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至宙搬,卻和暖如春笨腥,著一層夾襖步出監(jiān)牢的瞬間拓哺,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工脖母, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留士鸥,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓镶奉,卻偏偏與公主長得像础淤,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子哨苛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評論 2 355

推薦閱讀更多精彩內(nèi)容