Common Test is Erlang’s functional testing framework. Erlang.mk automates the discovery and running of Common Test suites.
The Common Test user guide is the best place to learn how to write tests. Erlang.mk requires that file names for test suites end with _SUITE.erl and that the files be located in the $(TEST_DIR) directory. This defaults to test/.
The CT_OPTS
variable allows you to set extra Common Test
options. Options are documented in the
Common Test user guide.
You can use it to set Common Test hooks, for example:
CT_OPTS = -ct_hooks cowboy_ct_hook
The CT_SUITES
variable can be used to override what
Common Test suites Erlang.mk will be aware of. It does
not normally need to be set as Erlang.mk will find the
test suites automatically.
The name of the suite is the part before _SUITE.erl
.
If the file is named http_SUITE.erl, the test suite
is http
:
CT_SUITES = http ws
The CT_LOGS_DIR
variable can be used to set where HTML
log files are to be written. This defaults to logs/.
CT_LOGS_DIR = ct_output_log_dir
To run all tests (including Common Test):
$ make tests
To run all tests and static checks (including Common Test):
$ make check
You can also run Common Test separately:
$ make ct
Erlang.mk will create targets for all test suites it finds.
If you have a file named test/http_SUITE.erl, then the
target ct-http
will run that specific test suite:
$ make ct-http
Erlang.mk provides a convenient way to run a specific
group or a specific test case within a specific group,
using the variable t
. Note that this only applies to
suite-specific targets, like the ct-http
example above.
To run all tests from the http_compress
group in the
http_SUITE
test suite, write:
$ make ct-http t=http_compress
Similarly, to run a specific test case in that group:
$ make ct-http t=http_compress:headers_dupe
To do the same against a multi-application repository,
you can use the -C
option:
$ make -C apps/my_app ct-http t=my_group:my_case
Note that this also applies to dependencies. When using Cowboy as a dependency, you can run the following directly:
$ make -C deps/cowboy ct-http t=http_compress
The variable c
can be used to run a specific test when
the test suite does not group test cases:
$ make ct-http c=headers_dupe
A test within a specific subgroup can be run by providing a group path:
$ make ct-http t=[top_level_group,second_level_group,third_level_group]:my_case
Finally, code coverage is available, but covered in its own chapter.