Распределенный тест с общим тестом Эрланга
Сейчас я работаю с Эрлангом и думаю, что мне следует провести несколько распределенных тестов с использованием единой тестовой среды. Я читал статью об этом. Но я не могу запустить свое собственное приложение на нескольких узлах с 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}.
Я просто бегаю erl -name ct@localhost
затем беги ct_master:run("test/dist.spec")
в оболочке эрланга.
Общий тест всегда завершается с сообщением {badmatch,{error,{"no such file or directory","aaa.app"}}}
,
1 ответ
Я определенно считаю это взломом, но что-то вроде этого может помочь:
%% 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]).