背景
在執行自動化測試的過程中,為了實現自動化的高通過率,可能會反復的重試,直至大多數甚至全部用例執行通過,以此來需要人為分析的用例量,減少人力投入,提高執行效率;
在用例少或者資源消耗小,用例執行快速高效的情況下,可以每次都執行全量用例,但是一旦用例數達到一定量級,全量重試就不再適用,重試失敗用例或者指定用例才能滿足需求。
在前面的文章中 pytest構造測試緩存執行指定用例 提到構造測試緩存執行指定用例,或者將使用上次測試任務歸檔的緩存重試失敗的用例,使用緩存測試的方法可以執行指定用例,大大提高執行效率。
但是反復的重試,有帶來的新的問題,報告有多份,第一份報告包含全部用例數據,通過率可能又不甚理想,后續報告通過率上去了,但缺失了大部分的測試用例,可能無法全面反映測試狀況。
測試任務 | 輸入描述 | 輸出 |
---|---|---|
任務A | 無緩存,全量測試 | 緩存A,報告A |
任務B | 使用緩存A重試 | 緩存B,報告B |
任務C | 使用緩存B重試 | 緩存C,報告C |
任務D | 使用緩存C重試 | 緩存D,報告D |
… | … | … |
基于上述種種問題,實踐中,理想自動化測試的理想狀態是:使用緩存重試失敗用例,每次報告都包含全部的測試用例數據,在每份報告的用例總數不變的情況下,用例的整體通過率能夠逐漸提高
本文將提供解決方案,在實踐中可以有效地提升自動化測試報告的質量與效率,確保在反復重試過程中,無論是報告的完整性還是數據呈現都得到合理保障
測試前置改造
前置中增加兩個變量pytest_cache
與allure_result
用于傳遞緩存與allure結果文件壓縮包下載地址,通過判斷是否有對應參數值進行下載解壓到工作目錄,參考示例腳本:
- pytest_cache:緩存下載地址
- allure_result:allure結果文件下載地址
# /bin/bash
# 變量參數(觸發測試任務時傳遞)
export pytest_cache=http://10.132.1.127:8123/PytestTask/1000_pytest_cache.tar.gz
export allure_result=http://10.132.1.127:8123/PytestTask/1000_allure-results.tar.gz # 判斷是否有指定緩存,如果有就下載緩存,用例重試失敗用例
if [ -n "$pytest_cache" ]; thencd ${WORKSPACE};wget ${pytest_cache} -O ./pytest_cache_old.tar.gz;tar -zxf ./pytest_cache_old.tar.gz;
fi# 判斷是否有指定報告數據,如果有就下載,用于后續合并
if [ -n "$allure_result" ]; thencd ${WORKSPACE};wget ${allure_result} -O ./allure_result_old.tar.gz;tar -zxf ./allure_result_old.tar.gz;
fi
pytest測試命令
pytest測試命令必須指定參數:--last-failed --last-failed-no-failures all --alluredir ./allure-results
其中--alluredir
參數指定的值必須為/allure-results
因為后文會對其進行打包歸檔
- –last-failed
功能:此選項指示 pytest 僅運行上次測試運行中失敗的測試用例。如果上次運行中有測試未通過,這個選項會讓你專注于解決這些具體的失敗用例,而不是每次都運行所有測試。
應用場景:在調試時,如果你發現某些測試失敗,這個選項允許你快速重試并關注那些失敗的測試,而不必進行全面的測試。 - –last-failed-no-failures all
功能:此選項用于擴展 --last-failed 的功能。如果在上次測試中沒有任何失敗的測試用例,則會運行所有測試。
應用場景:這確保了即使在上一次運行中沒有失敗,你也能執行整個測試套件,確保代碼的完整性和正確性。 - –alluredir ./allure-results
功能:此選項指定了用于存儲測試報告結果的目錄,它用于與 Allure 報告工具兼容。執行測試后,pytest 會將測試結果(成功和失敗)以 Allure 支持的格式存儲到你指定的目錄(在這里是 ./allure-results)。
應用場景:這樣做可以生成可視化的測試報告,便于后期查看和分析測試結果。運行完成后,可以使用 Allure 命令生成和查看測試報告,幫助更好地理解測試情況。
完整的pytest測試命令例如:pytest -v -s -l ${test_dir} -m "${mark}" --last-failed --last-failed-no-failures all -n ${concurrency} --reruns ${reruns} --timeout 7200 --show-capture=stderr --dist=worksteal --durations=30 --alluredir ./allure-results
測試后置改造
改造測試后置,主要是生成測試報告,并且將測試生成的一些文件進行打包上傳歸檔,便于后續使用(這里的文件服務是一個單獨的web服務)
# /bin/bash
# 參數變量
# 文件服務地址,用于緩存文件
export file_server=10.132.1.127:8123
# 文件服務地址上存放的目錄
export save_dir=PytestTask
# 測試任務編號(正常應該是讀取環境變量)
export task_num=1001# 生成報告
allure generate -c -o allure-report ./allure-results# 聲明報告類型數組
report_types=("allure-report" "allure-results" "pytest_cache")# 打包文件
for report_type in "${report_types[@]}"; dotar_name="${task_num}_${report_type}.tar.gz"if [[ "$report_type" == "pytest_cache" ]]; thentar -zcf ${tar_name} ./.pytest_cacheelsetar -zcf ${tar_name} ./${report_type}fi
done# 上傳文件
for report_type in "${report_types[@]}"; dofile_address="./${task_num}_${report_type}.tar.gz"curl -X POST "http://${file_server}/files/${save_dir}" -F "file=@$file_address" || echo -e "\033[31m ${file_server}服務異常,報告上傳失敗 \033[0m"
done# 輸出下載地址
echo -e "\e[31m 歸檔文件下載地址: http://${file_server}/${save_dir}/${task_num}_allure-results.tar.gz \e[0m"
echo -e "\e[31m 歸檔報告下載地址: http://${file_server}/${save_dir}/${task_num}_allure-report.tar.gz \e[0m"
echo -e "\e[31m 歸檔緩存下載地址: http://${file_server}/${save_dir}/${task_num}_pytest_cache.tar.gz \e[0m"