rebar3使用介紹(七)測試

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.coverdatarebar3 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章