Boost C++ 函式庫

...世界上最受推崇且設計精良的 C++ 函式庫專案之一。 Herb SutterAndrei Alexandrescu,《C++ Coding Standards

執行 Boost 迴歸測試

在本機執行迴歸測試

在您的 Boost 副本上執行迴歸測試很容易。

要執行函式庫的迴歸測試,請從<boost-root>/libs/<library>/test目錄執行 Boost 的 b2 工具程式。要執行單一測試,請在命令列上指定其名稱(可在<boost-root>/libs/<library>/test/Jamfile.v2中找到)。

請參閱《入門指南》以取得建置或下載bjam的說明,以及如何在您的 Boost 發行版本中導覽。

要執行每個函式庫的迴歸測試,請從b2<boost-root>/status目錄執行。

要執行 Boost.Build 的迴歸測試,請從python test_all.py<boost-root>/tools/build/v2/test目錄執行。(需要 Python 2.3 ≤ 版本 < 3.0。)

執行 Boost 的自動迴歸測試和報告

這將執行所有 Boost 迴歸測試,並將結果回報給 Boost 社群。

需求

  • Python (2.3 ≤ 版本 < 3.0)。
  • Git(最新版本)。
  • 每個要測試的編譯器至少 5 GB 的磁碟空間。

逐步說明

  1. 為您要測試的分支建立一個新的目錄。
  2. run.py 腳本下載到該目錄
    1. 在您的瀏覽器中開啟 run.py 腳本。
    2. 點擊**_原始碼_**按鈕。
    3. 另存新檔為run.py在您剛才建立的目錄中。
  3. 執行 "python run.py 選項... [指令]",**需包含以下三個必要選項**,以及您想使用的任何其他選項

    • --runner=- 您選擇的名稱,用於在報告中識別您的結果 1, 2
    • --toolsets=- 您要用來測試的工具集 3
    • --tag=- 您要測試的標籤(即分支)。目前唯一有意義的標籤是developmaster.

    例如

    python run.py --runner=Metacomm --toolsets=gcc-4.2.1,msvc-8.0 --tag=develop

**注意**:如果您在防火牆/代理伺服器後方,所有功能應該仍然可以正常運作。在極少數情況下,如果無法正常運作,您可以透過--proxy選項明確指定代理伺服器參數,例如

python run.py ... --proxy=http://www.someproxy.com:3128

選項

commands: cleanup, collect-logs, get-source, get-tools, patch, regression,
setup, show-revision, test, test-boost-build, test-clean, test-process, test-
run, update-source, upload-logs

Options:
  -h, --help            show this help message and exit
  --runner=RUNNER       runner ID (e.g. 'Metacomm')
  --comment=COMMENT     an HTML comment file to be inserted in the reports
  --tag=TAG             the tag for the results
  --toolsets=TOOLSETS   comma-separated list of toolsets to test with
  --libraries=LIBRARIES
                        comma separated list of libraries to test
  --incremental         do incremental run (do not remove previous binaries)
  --timeout=TIMEOUT     specifies the timeout, in minutes, for a single test
                        run/compilation
  --bjam-options=BJAM_OPTIONS
                        options to pass to the regression test
  --bjam-toolset=BJAM_TOOLSET
                        bootstrap toolset for 'bjam' executable
  --pjl-toolset=PJL_TOOLSET
                        bootstrap toolset for 'process_jam_log' executable
  --platform=PLATFORM   
  --user=USER           Boost SVN user ID
  --local=LOCAL         the name of the boost tarball
  --force-update        do an SVN update (if applicable) instead of a clean
                        checkout, even when performing a full run
  --have-source         do neither a tarball download nor an SVN update; used
                        primarily for testing script changes
  --ftp=FTP             FTP URL to upload results to.
  --proxy=PROXY         HTTP proxy server address and port
                        (e.g.'http://www.someproxy.com:3128')
  --ftp-proxy=FTP_PROXY
                        FTP proxy server (e.g. 'ftpproxy')
  --dart-server=DART_SERVER
                        the dart server to send results to
  --debug-level=DEBUG_LEVEL
                        debugging level; controls the amount of debugging
                        output printed
  --send-bjam-log       send full bjam log of the regression run
  --mail=MAIL           email address to send run notification to
  --smtp-login=SMTP_LOGIN
                        STMP server address/login information, in the
                        following form: <user>:<password>@<host>[:<port>]
  --skip-tests          do not run bjam; used for testing script changes

要測試 develop,請使用 "--tag=develop",要測試 master,請使用 "--tag=master"。或者,您可以替換成您選擇的任何 Boost 樹。

詳細資訊

迴歸測試程序將會

  • 下載最新的迴歸測試腳本。
  • 下載指定的測試工具程式碼,包括 Boost.Jam、Boost.Build 和各種迴歸測試程式。
  • 將最新的程式碼從 Boost Git 儲存庫 下載到子目錄boost.
  • 建置b2process_jam_log(如果需要)。process_jam_log是一個工具程式,用於從 Boost.Build 產生的日誌檔中提取測試結果。
  • 執行回歸測試、處理並收集結果。
  • 將結果上傳到共用的 FTP 伺服器。

持續執行的報告合併程序會合併所有提交的測試執行結果,並將其發佈到不同位置

進階用法

提供關於您環境的詳細資訊

一旦您的回歸測試結果顯示在 Boost 的整體報告中,您可以考慮提供更多關於您自己和您的測試環境的資訊。這些額外的資訊將會呈現在與您的執行器 ID 相關聯的報告頁面上。

預設情況下,頁面的內容只是來自comment.html檔案中的一行,該檔案位於您的run.py目錄中,用於指定測試的平台。您可以透過簡單地更改檔案內容,將更詳細的環境描述(例如您的硬體配置、編譯器版本和測試排程)放到線上。此外,請考慮提供您的姓名和電子郵件地址,以便 Boost 開發人員在遇到與您的特定結果集相關的問題時可以與您聯繫。

增量執行

您可以透過傳遞一個同名的命令列標記,以增量模式執行run.py

python run.py ... --incremental

修補 Boost 原始碼

您可能偶爾需要在執行測試之前對 Boost 程式碼庫進行本地修改,而不干擾回歸程序的自動化特性。要在regression.py:

  1. 下實現此功能,請將所需的修改編寫成一個單一的可執行腳本,該腳本會套用至位於./boost_root子目錄中的原始碼,並將腳本命名為patch_boost ((在 Windows 上為 patch_boost.bat)。將腳本放置在
  2. run.py目錄執行。

驅動程式會檢查patch_boost腳本是否存在,如果找到,則在取得 Boost 原始碼後執行它。

意見回饋

請將所有關於本文檔和測試程序本身的意見/建議發送到 Boost 測試郵件清單

注意事項

[1] 如果您使用不同的編譯器集合交錯執行回歸測試(例如,早上使用 Intel,晚上使用 GCC),則需要為每次執行提供*不同的*執行器 ID,例如your_name-intelyour_name-gcc.

[2] 報告格式/媒介的限制使得您測試的編譯器數量與執行器 ID 的可用空間量之間存在直接的依賴關係。如果您只針對單個編譯器執行回歸測試,請確保選擇一個足夠短的 ID,以免顯著干擾報告的排版。您也可以在執行器 ID 中使用空格,以便報告可以換行顯示名稱。

[3] 如果未提供--toolsets選項,腳本將嘗試使用平台的預設工具集(大多數基於 Unix 的系統為gcc)。

[4] 預設情況下,腳本以所謂的*完整模式*執行:每次run.py呼叫時,先前執行留下的所有檔案(包括成功建構的測試和程式庫的二進位檔)都會被刪除,並且所有內容都會從頭開始重新建構。相反,在*增量模式*下,現有的二進位檔會保持不變,只有自上次執行以來原始碼已更改的測試和程式庫才會重新建構和重新測試。

增量執行方式的主要優點是顯著縮短了 turnaround time( turnaround time 指的是從開始到完成一個流程所需的時間,在軟體開發中,通常指編譯、測試和部署的時間),但遺憾的是,它們並不總是能產生可靠的結果。某些程式碼庫的變更(尤其是對 b2 測試子系統的變更)通常需要切換到完整模式執行一個週期,才能產生可信的報告。

作為一般準則,如果可以負擔的話,最好使用完整模式進行測試。