ct_master

Distributed test execution control for Common Test.

Distributed test execution control for Common Test.

This module exports functions for running Common Test nodes on multiple hosts in parallel.

Functions


abort() -> ok

Stops all running tests.

abort(Nodes) -> ok

  • Nodes = atom() | [atom()]

Stops tests on specified nodes.

basic_html(Bool) -> ok

  • Bool = true | false

If set to true, the ct_master logs are written on a primitive HTML format, not using the Common Test CSS style sheet.

get_event_mgr_ref() -> MasterEvMgrRef

  • MasterEvMgrRef = atom()

Gets a reference to the Common Test master event manager. The reference can be used to, for example, add a user-specific event handler while tests are running.

Example:

 gen_event:add_handler(ct_master:get_event_mgr_ref(), my_ev_h, [])

progress() -> [{Node, Status}]

  • Node = atom()
  • Status = finished_ok | ongoing | aborted | {error, Reason}
  • Reason = term()

Returns test progress. If Status is ongoing, tests are running on the node and are not yet finished.

run(TestSpecs) -> ok

  • TestSpecs = string() | [SeparateOrMerged]

run(TestSpecs, InclNodes, ExclNodes) -> ok

  • TestSpecs = string() | [SeparateOrMerged]
  • SeparateOrMerged = string() | [string()]
  • InclNodes = [atom()]
  • ExclNodes = [atom()]

run(TestSpecs, AllowUserTerms, InclNodes, ExclNodes) -> ok

  • TestSpecs = string() | [SeparateOrMerged]
  • SeparateOrMerged = string() | [string()]
  • AllowUserTerms = bool()
  • InclNodes = [atom()]
  • ExclNodes = [atom()]

Tests are spawned on the nodes as specified in TestSpecs. Each specification in TestSpec is handled separately. However, it is also possible to specify a list of specifications to be merged into one specification before the tests are executed. Any test without a particular node specification is also executed on the nodes in InclNodes. Nodes in the ExclNodes list are excluded from the test.

run_on_node(TestSpecs, Node) -> ok

  • TestSpecs = string() | [SeparateOrMerged]
  • SeparateOrMerged = string() | [string()]
  • Node = atom()

run_on_node(TestSpecs, AllowUserTerms, Node) -> ok

  • TestSpecs = string() | [SeparateOrMerged]
  • SeparateOrMerged = string() | [string()]
  • AllowUserTerms = bool()
  • Node = atom()

Tests are spawned on Node according to TestSpecs.

run_test(Node, Opts) -> ok

  • Node = atom()
  • Opts = [OptTuples]
  • OptTuples = {config, CfgFiles} | {dir, TestDirs} | {suite, Suites} | {testcase, Cases} | {spec, TestSpecs} | {allow_user_terms, Bool} | {logdir, LogDir} | {event_handler, EventHandlers} | {silent_connections, Conns} | {cover, CoverSpecFile} | {cover_stop, Bool} | {userconfig, UserCfgFiles}
  • CfgFiles = string() | [string()]
  • TestDirs = string() | [string()]
  • Suites = atom() | [atom()]
  • Cases = atom() | [atom()]
  • TestSpecs = string() | [string()]
  • LogDir = string()
  • EventHandlers = EH | [EH]
  • EH = atom() | {atom(), InitArgs} | {[atom()], InitArgs}
  • InitArgs = [term()]
  • Conns = all | [atom()]

Tests are spawned on Node using ct:run_test/1