摘要:被測腳本只有正常退出或者以信號退出才能出發,才能得到覆蓋率結果。如果直接或者用其他信號終止進程,覆蓋率結果將會丟失參考文章腳本覆蓋率分析方法介紹。
關于Coverage
Coverage是Python代碼覆蓋率分析工具,有關它的介紹和安裝方法請見:
Python代碼覆蓋率分析工具Coverage
用Python啟動的web服務可以方便地使用Coverage分析其覆蓋率,假設一個web服務,它的啟停命令如下:
sudo python xxx/main.py --port=8888 --logging=none > /dev/null 2>&1 & ps auxf|grep xxx/main.py |grep -v grep |awk "{print $2}"|sort -r| sudo xargs kill
像這樣用python啟動的服務可以使用Coverage命令行啟動,用kill -2的關閉,即可統計代碼覆蓋率。
啟停命令使用如下啟停命令:
sudo coverage run --parallel-mode --branch --include="yyy/*" xxx/main.py --port=8888 --logging=none > /dev/null 2>&1 & ps auxf|grep xxx/main |grep -v grep |awk "{print $2}"|sort -r|sudo xargs kill -2
與原來的命令區別在啟動命令用coverage run和一組參數替代python,停止命令用kill -2殺進程。
解釋一下啟動命令參數:
--parallel-mode:使Coverage監測被測代碼子進程的覆蓋率,如果被測代碼是多進程的,必須使用此參數;
--branch:統計分支代碼覆蓋率,加上這個參數可使統計更精確,具體區別參見文檔:http://coverage.readthedocs.org/en/latest/branch.html;
--include: 限定要統計代碼的路徑,如果不限定,Coverage會把請求涉及到的所有代碼,包括系統庫和Tornado框架的代碼都分析一遍,會大大拉低代碼覆蓋率;
各參數具體可參見:http://coverage.readthedocs.org/en/latest/cmd.html
停止命令,必須使用kill -2。
這是因為Coverage在實現上使用了atexit模塊注冊一個回調函數,在Python退出時將內存中的覆蓋率結果寫到文件中。被測腳本只有正常退出或者以SIGINT 2信號退出才能出發atexit,才能得到覆蓋率結果。如果直接kill(SIGTERM 15)或者用其他信號終止進程,覆蓋率結果將會丟失(參考文章:Python腳本覆蓋率分析方法介紹)。
CTRL+C發的即是SIGINT 2信號,所以前臺啟動的服務用CTRL+C停止后可以出結果。
Coverage結果收集服務必須以coverage run啟動,并以kill -2終止后,才出現統計結果:
xxx@xxx:/xxx/$ ll
total 2708
drwxr-xr-x 11 root root 4096 Sep 25 11:46 ./
drwxr-xr-x 6 root root 4096 Sep 25 08:30 ../
-rw-rw-rw- 1 root root 284691 Sep 25 11:46 .coverage.xxx.15845.747211
-rw-rw-rw- 1 root root 284917 Sep 25 11:45 .coverage.xxx.15846.592706
-rw-rw-rw- 1 root root 284274 Sep 25 11:45 .coverage.xxx.15847.688607
-rw-rw-rw- 1 root root 284583 Sep 25 11:45 .coverage.xxx.15858.136003
-rw-rw-rw- 1 root root 284274 Sep 25 11:46 .coverage.xxx.15867.746159
-rw-rw-rw- 1 root root 284691 Sep 25 11:46 .coverage.xxx.15876.004083
-rw-rw-rw- 1 root root 283820 Sep 25 11:46 .coverage.xxx.15886.921243
每個.coverage.xxx文件代表一個子進程的覆蓋率,文件名格式為.coverage.<機器名>.<進程號>.<隨機數>。
測試結束后,需要合并測試結果,生成報告:
coverage combine coverage report -m coverage html coverage xml coverage erase
combine會合并7個.coverage.xxx文件成1個.coverage,因為最后Coverage統計的是.coverage的結果。
report/html/xml:直接在終端顯示報告/生成html報告/生成xml報告。
erase會刪除.coverage文件,保證不會影響下次統計的結果。
生成的報告非常清晰,html和xml可以直接點擊進入代碼文件查看。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/37618.html
摘要:由于構造函數不支持參數,必須使用配置文件。使用文件作為的配置文件一般的項目都是多進程,這需要分析子進程的覆蓋率,需要用到配置文件。這里文檔說在構造函數里使用參數可以限制,實測,沒有用會刪除文件,保證不會影響下次統計的結果。 關于Coverage Coverage是Python代碼覆蓋率分析工具,有關它的介紹和安裝方法請見:Python代碼覆蓋率分析工具Coverage 用Python啟...
摘要:簡介是一種用于統計代碼覆蓋率的工具,通過它我們可以檢測測試代碼的有效性,即測試對被測代碼的覆蓋率如何。支持分支覆蓋率統計,可以生成報告。 Coverage簡介 Coverage是一種用于統計Python代碼覆蓋率的工具,通過它我們可以檢測測試代碼的有效性,即測試case對被測代碼的覆蓋率如何。Coverage支持分支覆蓋率統計,可以生成HTML/XML報告。XML報告可以集成入Jenk...
摘要:本文會介紹新增的代碼覆蓋率功能如何收集數據如何基于它收集的數據來改進應用的性能。動態分析是指在應用運行狀態下收集代碼執行數據的過程,換句話說,覆蓋率數據就是在代碼執行過程中通過標記收集到的。 showImg(https://segmentfault.com/img/remote/1460000009013741); 共 1812 字,讀完需 3 分鐘。工欲善其事必先利其器,前端周刊本周...
摘要:本文將進入單元測試的部分,這也是基礎知識中最后一個大塊。本文將重點講述和中的單元測試的生態環境。另外,在中指定要運行的單元測試用例的完整語法是。中使用模塊管理單元測試用例。每個項目的單元測試代碼結構可 本文將進入單元測試的部分,這也是基礎知識中最后一個大塊。本文將重點講述Python和OpenStack中的單元測試的生態環境。 單元測試的重要性 github上有個人畫了一些不同語言的學...
摘要:單元測試框架作為的標準庫,是其他單元測試框架的基礎。可以和和配合使用編寫單元測試。官網地址單元測試覆蓋率工具單元測試中還需要用到代碼覆蓋率工具。代碼覆蓋率統計工具用來發現沒有被測試覆蓋的代碼,完善單元測試的覆蓋率。 在應用程序中,單元是具有一個或多個輸入和單個輸出的軟件中最小可測試部分。單元...
閱讀 2955·2023-04-25 22:16
閱讀 2120·2021-10-11 11:11
閱讀 3254·2019-08-29 13:26
閱讀 600·2019-08-29 12:32
閱讀 3420·2019-08-26 11:49
閱讀 2998·2019-08-26 10:30
閱讀 1950·2019-08-23 17:59
閱讀 1514·2019-08-23 17:57