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)行提交谣沸。
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)值羔飞。