pytest是python的測試框架,它提供了許多功能,
測試運行
組織pytest的測試用例代碼
:模塊名稱以test_開頭,類名以Test開頭,函數名以test_開頭, 然后用pytest命令
即可運行測試用例。
- 可以在命令行中,用pytest命令運行
- 也可以在代碼中,用pytest.main()運行
api自動化測試實現
- 第一步:通過
代碼編寫
,最終需要在測試用例,test_開頭的函數中,對接口進行請求,然后斷言。 - 第二步:pytest運行時,就可以批量調接口api, 使用**–aluredir**參數,可以
生成allure的測試報告
。 - 第三步:代碼
集成到git和jenkins
中,代碼最后在jenkins里面,運行pytest命令,allure的測試報告存在Jenkins的workspace中。
再結合Jenkins的allure插件
可以在Jenkins中,查看歷史測試報告
。 最后可以設置Jenkins的郵件(釘釘)通知
,發送報告。
具體代碼實現
- 代碼目錄下有一個libs 目錄(業務層), 一個功能模塊寫成一個py文件。 然后去封裝接口,pytest測試用例方法,再調用libs層封裝方法。
a【各個模塊的請求方法、url 集中存在一個yaml文件中】 b【請求參數,預期值,是放到excel中的】
- 業務層的業務類繼承了BaseApi基類,也是自己封裝的,提供了請求方法--------它可以獲取到對應模塊的接口的 method 和 URL
- 在測試用例的類中,每個測試方法那里,首先使用xrld獲取到excel文件中對應接口的請求參數。使用 @pytest.mark.parametrize把數據傳給測試用例,進行數據驅動。
- 初始化和身份校驗
- pytest它支持寫初始化和清除的代碼,使用@pytest.fixture()裝飾器。參數:scope,參數3:autouse
- 用例testcase目錄,添加conftest.py, 里面寫了整個項目運行前的初始化,進行登錄。并且返回了token。 頁面類進行實例化時,會傳傳入token,頁面類請求接口時,會自動帶上token。
- 我在之前公司的實際項目中,也是初始化進行了登錄,然后把token保存到配置中-----方式有所不同。
以上pyest部分未提到的一些用法
- 測試用例調用初始化方法:
- @pytest.fixture(autouse=True) 、
- @pytest.mark.usefixtures(“方法名”) 、
- 或直接在test_開頭的函數中,直接把
fixture定義的方法名
當成參數傳入。
- 裝飾器 @pytest.mark.repeat(2) 可以重復運行測試用例。
- pytest-assume庫提供的,pytest.assume() 斷言,如果斷言失敗,會繼續執行,直到全部執行完。
- 測試用例方法上,添加@pytest.mark.skipif(True, reason=“跳過原因”),可以跳過用例。 (或 @pytest.mark.skip)
- pytest命令運行時,可以添加 -k 參數,指定某個測試用例py模塊,或者測試用例類,或者某個測試用例方法。
allure測試報告
安裝allure-pytest
- allure.attach() 可以添加更多的日志、截圖等。
- @allure.epic、@allure.feature、@allure.story、@allure.title, 讓用例分層。
- 使用with allure.step(),可以添加步驟。 若調用外部方法,也可以使用裝飾器@allure.step(),裝飾在外部方法上