public RemoteTestRunner() {
        super();
        Utils.checkJMeterVersion();

        ServerStatusController serverStatusController = ServerStatusController.getServerStatusController();
        serverStatusController.start();

        BmTestManager.getInstance().userKeyNotificationListeners.add(new IUserKeyNotification() {
            @Override
            public void onTestUserKeyChanged(String userKey) {
                setUserKey(userKey);
            }
        });

        BmTestManager.getInstance().testInfoNotificationListeners.add(new ITestInfoNotification() {
            @Override
            public void onTestInfoChanged(TestInfo testInfo) {
                setTestInfo(testInfo);
                if ((testInfo.getStatus() == TestStatus.NotRunning) & JMeter.isNonGUI() & BmTestManager.isTestRunning()) {
                    if (Utils.isJMeterServer()) {
                        try {
                            ShutdownClient.main(new String[]{"StopTestNow"});

                        } catch (IOException ioe) {
                            BmLog.error("Distributed remote test was not stopped: " + ioe);
                        }
                    } else {
                        ServerStatusController.getServerStatusController().stop();
                        TestInfoController.stop();
                        testEnded();
                    }
                }
            }
        });

        BmTestManager.getInstance().runModeChangedNotificationListeners.add(new IRunModeChangedNotification() {
            @Override
            public void onRunModeChanged(boolean isLocalRunMode) {
                setIsLocalRunMode(isLocalRunMode);
            }
        });
        JMeterUtils.setProperty(Constants.ATTEMPTS_TO_START_TEST, "0");
    }