2

現在、私は Erlang を使用していますが、共通テスト フレームワークを使用して分散テストを行う必要があると考えています。私はこれについていくつかの記事を読みました。しかし、私は自分のアプリケーションを複数のノードで実行できませんct_master. それは何日も私を悩ませます — スレーブノードは私自身のアプリケーションを含めることができません. これについて何かお知らせいただけますか?

ディレクトリツリー:

$ tree
.
├── logs
├── src
│   ├── aaa.app.src
│   ├── aaa_app.erl
│   └── aaa_sup.erl
└── test
    ├── aaa_SUITE.erl
    ├── dist.spec
    └── spec

テストスイートは次のとおりです。

-module(aaa_SUITE).
-include_lib("common_test/include/ct.hrl").

-compile(export_all).
suite() -> [{timetrap, {seconds, 20}}].
groups() -> [].
all() ->
    [ {exports, Functions} | _ ] = ?MODULE:module_info(),
    [ FName || {FName, _} <- lists:filter(
                               fun ({module_info,_}) -> false;
                                   ({all,_}) -> false;
                                   ({init_per_suite,1}) -> false;
                                   ({end_per_suite,1}) -> false;
                                   ({_,1}) -> true;
                                   ({_,_}) -> false
                               end, Functions)].
init_per_suite(Config) ->
    Config.
end_per_suite(_Config) ->
    ok.
init_per_group(_group, Config) ->
    Config.
end_per_group(_group, Config) ->
    Config.
init_per_testcase(TestCase, Config) ->
    Config.
end_per_testcase(TestCase, Config) ->
    Config.

test_aaa(_Config) ->
    ok = application:start(aaa).

仕様ファイルは次のとおりです。

{node, a_1, 'a1@localhost'}.

{include, [a_1], ["../ebin"]}.
{init, [a_1], [{node_start, [{monitor_master, true}]}, {erl_flags, "-pa ../ebin"}]}.

{logdir, all_nodes, "../logs/"}.
{logdir, master, "../logs/"}.

{alias, aaa, "./"}.
{suites, [a_1], aaa, all}.

を実行してから、erlang シェルでerl -name ct@localhost実行します。ct_master:run("test/dist.spec")

共通テストは常に message で終了します{badmatch,{error,{"no such file or directory","aaa.app"}}}

4

1 に答える 1

0

私は間違いなくこれをハックだと考えていますが、次のようなものが役立つかもしれません:

%% Run the app locally
{ok, _MasterApps} = application:ensure_all_started(my_app),
%% Adding our local code paths to the remote node to ensure
%% proper path resolution
ok = rpc:call(Slave, code, add_pathsz, [code:get_path()]),
%% Start the application remotely
{ok, _SlaveApps} = rpc:call(Slave, application, ensure_all_started, [my_app]).
于 2015-06-02T06:32:27.677 に答える