rebar3使用介紹(七)測試
Rebar3內置了eunit和ct(common_test)測試運行器。通過遵循一些約定,您可以使用單個Rebar3命令運行測試套件。
eunit
運行eunit測試非常簡單:
$ rebar3 eunit
Rebar3將帶上宏{d, TEST, true}和{d, EUNIT, true}編譯所有項目模塊,以便您可以安全地隱藏測試代碼-ifdef(TEST).或-ifdef(EUNIT).部分。它還將自動編譯應用程序test目錄中的任何源文件(如果存在)。然後通過調用eunit:test([{application, App}])測試項目中的每個應用程序。
如果要eunit:test/1使用自己的參數調用,可以使用rebar.config的eunit_tests字段。該參數和在shell里加的參數是等價的,文檔在這裏。Rebar3將盡力確保編譯測試中指定的任何模塊並使其在代碼路徑上可用。
您還可以僅針對特定應用運行測試:
$ rebar3 eunit --application=some_app,some_other_app
或僅適用於特定模塊:
$ rebar3 eunit --module=a,b,c
或者對於特定的測試文件:
$ rebar3 eunit --file="test/my_tests.erl"
或具體目錄:
$ rebar3 eunit --dir="test"
common test (ct)
要運行common_test:
$ rebar3 ct
Rebar3將查看所有應用程序的test目錄,並編譯並運行任何名爲的源文件*_SUITE.erl。
要僅運行特定的測試:
$ rebar3 ct --suite=test/first_SUITE,test/second_SUITE
Rebar3有一個內置的common_test
運行器,支持大多數測試套件和common_test
選項。如果您的測試套件需要使用測試規範或覆蓋規格,請注意Rebar3爲每個配置文件保留單獨的空間,因此,您可能需要調整路徑,以指向_build
下相關配置文件目錄中的模塊和目錄,以便它們按預期工作。如果需要使用不支持的common_test
選項,可以在由rebar3編譯過的beam目錄下使用以下命令運行common_test
$ ct_run -pa `rebar3 path` ...
代碼覆蓋率
設置選項{cover_enabled, true},然後運行任何eunit或ct。或者,運行rebar3 eunit --cover或rebar3 ct --cover。
測試運行將生成覆蓋數據。之後執行rebar3 cover將生成代碼覆蓋率報告。
cover工具將會把.coverdata格式的報告保存到對應空間的cover
目錄下,默認報告文件的名字和任務相關,比如rebar3 ct --cover
對應ct.coverdata
而rebar3 eunit -cover
對應eunit.coverdata
。
額外參數--cover_export_name
可用於指定.coverdata文件的名稱,例如,如果一個項目有2套測試用例,測試用例test/suites1/和test/suites2:
$ rebar3 ct --dir test/suites1 --cover --cover_export_name=suites1
===> Running Common Test suites...
...
$ rebar3 ct --dir test/suites2 --cover --cover_export_name=suites2
===> Running Common Test suites...
...
$ ls _build/test/cover
cover.log suite1.coverdata suite2.coverdata
$ rebar3 cover --verbose
===> Performing cover analysis...
|----------------------------|------------|
| module | coverage |
|----------------------------|------------|
| .... | Y% |
|----------------------------|------------|
| total | X% |
|----------------------------|------------|
coverage calculated from:
_build/test/cover/suites1.coverdata
_build/test/cover/suites2.coverdata
cover summary written to: _build/test/cover/index.html