第一篇 :? 自動化測試框架pytest系列之基礎(chǔ)概念介紹(一)-CSDN博客
接上文
3.pytest功能介紹
3.1 第一條測試用例
首先 ,你需要編寫一個登錄函數(shù),主要是作為被測功能,同時編寫一個測試腳本 ,進(jìn)行測試登錄功能 。
登錄函數(shù)腳本: login.py
# 1. 實現(xiàn)登錄函數(shù)
def login(username,password):
? ?db_username = 'admin'
? ?db_password = '123456'
?
? ?# 判斷用戶名是否為空
? ?if username is None or username == "":
? ? ? ?return {"code":1,"message":"用戶名不能為空!"}
? ?# 判斷密碼是否為空
? ?if password is None or password == "":
? ? ? ?return {"code":2,"message":"密碼不能為空"}
?
? ?# 用戶名和密碼是否和數(shù)據(jù)庫中的匹配
? ?if username == db_username and password == db_password:
? ? ? ?return {"code":0,"message":"登錄成功"}
?
? ?# 登錄失敗
? ?return {"code":3,"message":"用戶名或密碼不正確!"}
測試腳本 :test01_login.py
class TestLogin():
?
?
? ?# case1 : 輸入正確的用戶名和正確的密碼進(jìn)行登錄
? ?def test_login_success(self):
? ? ? ?print("1")
? ? ? ?expect_result = 0
? ? ? ?actual_result = login('admin','123456').get('code')
? ? ? ?assert expect_result == actual_result
?
?
? ?# case2 : 輸入正確的用戶名和錯誤的密碼進(jìn)行登錄
? ?def test_password_is_wrong(self):
? ? ? ?print("2")
? ? ? ?expect_reesult = 3
? ? ? ?actual_result = login('admin','1234567').get('code')
? ? ? ?assert expect_reesult == actual_result
?
? ?# case3 : 輸入用戶名和空的密碼進(jìn)行登錄
? ?def test_password_is_null(self):
? ? ? ?print("3")
? ? ? ?expect_reesult = 2
? ? ? ?actual_result = login('admin', '').get('code')
? ? ? ?assert expect_reesult == actual_result
編寫好了以上的測試用例 ,那么該如何運行該測試用例呢 ,這里就涉及到了pytest的具體功能了 。
3.2 pytest的運行方式
通過pytest驅(qū)動測試用例運行,通常有兩種形式 :通過命令行運行和通過main方法運行 。
但你無論使用那種方式運行,它們的共同點就是選項 ,也就是說他們都使用了共同的選項 ,只不過是運行方式不同 。
我們使用一個選項來說明兩者的不同運行方式,加入-s這個選項:
-
使用命令行+選項運行 ,打開cmd窗口 ,運行命令 :
pytest -s
-
使用main方法運行 ,在代碼中輸入 :
pytest.main(['-s'])
其它的選項也都是這樣運行 ,簡單的總結(jié):
-
如果選擇在命令行運行 :pytest + 選項 + 運行的測試用例
-
如果選擇main函數(shù)運行 :pytest.main([選項]) ,這里要說明的是將選項傳入到列表中,注意一定放在列表中 。
那么 ,都有哪些選項呢 ?具體包括 : ?
接下來我們使用上面編寫的測試用例對以上的選項進(jìn)行說明 :
pytest -k “string” :匹配文件名、類名、函數(shù)名包含string的,并且可以使用邏輯操作符(and , or ,not)進(jìn)行匹配 。看下面的場景:
-
如果只想運行測試用例
test_login_success
的話 :pytest test01_login.py -k "login_success"
-
如果想運行
test_password_is_wrong
和test_password_is_null
用例:pytest test01_login.py -k "is_wrong or is_null"
,這里就使用了邏輯操作符or ,代表或者 。 -
以上第二種情況也可以這樣寫 :
pytest test01_login.py -k "not login_success"
pytest -m string : 需要在代碼中編寫裝飾器@pytest.mark.標(biāo)記符 ,然后通過命令行去匹配這些用例 。
-
如果想運行用例級別為p2的用例 :
pytest test01_login.py -m p2
?運行結(jié)果 :
pytest -s : 將測試用例中的打印信息輸出到控制臺 。 ?
pytest -v : 輸出更加詳細(xì)的信息到控制臺 。 ?
pytest -q : 輸出最簡化的信息 。
?
pytest -x : 遇到錯誤的時停止運行。
運行結(jié)果 : ?
pytest --trace : 代碼出錯不知道原因咋辦 ?在Python中是不是的打斷點,這個就像Python的打斷點,可以讓你一步一步的運行,每按一次n鍵 ,就運行一行代碼 。 ?
?
pytest --pdb : 這個也可以打斷點 ,關(guān)鍵是這個可以進(jìn)行交互,比如讓其輸出變量等 。
?pytest -runxfail : 將標(biāo)記為失敗的用例正常情況下是不運行 ,但是加上此參數(shù) ,繼續(xù)會運行 。
看下兩者的運行結(jié)果 : ?
pytest --lf : 只跑上次測試失敗的用例 ,這就意味著至少要跑兩次 。 ?
pytest --ff : 先跑上次測試失敗的用例 ,再把其他用例再執(zhí)行一遍 。 ?
pytest -n number : 需要安裝pytest-xdisk模塊,同時運行多個線程 ,在用例量大的情況下,可以使用這個參數(shù) 。
-
如果想3個線程一起跑 ,你可以運行 :
pytest -n 3
pytest --alluredir : 需要安裝allure-pytest模塊 ,可以通過它生成allure測試報告所需要的測試數(shù)據(jù) 。然后再使用allure生成測試報告 。但在這里我們主要說明如何生成測試報告的數(shù)據(jù) :
-
將測試報告數(shù)據(jù)寫入到result目錄中中 :pytest --alluredir=result
pytest --html 需要安裝pytest-html模塊 ,可以直接生成html的測試報告 。
-
如果想要直接生成html測試報告到當(dāng)前路徑下,報告名為report.html :
pytest --html=report.html
pytest --reruns : 需要安裝pytest-rerunfailures模塊 ,運行失敗的測試用例可以再次重跑 。
-
如果想要在兩次重試之間增加延遲時間,可以使用--reruns-delay選項 ,它的單位是秒 ,比如我想重跑最多3次,每次間隔1秒:
pytest --reruns 3 --reruns-delay 1
,不過該插件和其他功能有些兼容性問題 ,比如和fixture , pdb
多重斷言 :需要安裝pytest-assume模塊 ,它可以進(jìn)行多重斷言,也就是在一條測試方法中編寫多個斷言,如果其中一個斷言失敗了,它還可以繼續(xù)運行,不過在代碼中編寫方式就不同了 。
?
?
設(shè)置測試用例的運行順序: 需要安裝模塊pytest-ordering ,如果運行的測試用例希望給它控制順序 ,尤其是流程性用例 ,一般都會有順序的 。這個直接通過裝飾器給用例設(shè)置就可以了 。
運行結(jié)果 : ?
pytest --count 不斷的重復(fù)測試直到失敗: 需要安裝模塊pytest-repeat ,如果有的測試用例偶發(fā)性的出現(xiàn)bug,不好復(fù)現(xiàn)怎么辦 ,就多運行幾次 ,這個模塊就可以讓他多運行幾次 。比如我讓它運行10次 ,運行命令可以為 :pytest --count=10
?文章來源:http://www.zghlxwxcb.cn/news/detail-784099.html
這就是以上的主要選項 ,基本涵蓋了主要pytest選項 。當(dāng)然,如果使用pytest.main()函數(shù)運行 ,也是這些選項 ,只需要將這些選項放在列表中,然后傳入main函數(shù)中即可。 ?文章來源地址http://www.zghlxwxcb.cn/news/detail-784099.html
到了這里,關(guān)于自動化測試框架pytest系列之21個命令行參數(shù)介紹(二)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!