Тест нескольких экземпляров с использованием junit - PullRequest
4 голосов
/ 16 декабря 2011

У меня есть сервер Java на сокете сервера. Клиенты подключаются к этому сокету сервера и обмениваются потоками объектов ввода / вывода. Теперь мне нужно проверить приложение на масштабируемость. Это означает, что мне нужно запустить один и тот же тест для отправки запросов и проверить, способен ли сервер обрабатывать запросы от случайных клиентов.

Является ли приведенный ниже тестовый пример на основе юнитов правильным способом проверки случайных соединений / запросов. У меня такое ощущение, что приведенный ниже код тестирует клиентов последовательно.

Некоторые ссылки, которые я прочитал, и у меня не работали

Создание тестового набора JUnit с несколькими экземплярами параметризованного теста

public class ScalePostiveTestCases {
SendQueue sendQueue;
Socket clientSocket = null;

public static void main(String[] args) throws Throwable {       
    testSearching() ;
}

@SuppressWarnings("unchecked")
private static void testSearching() throws ClassNotFoundException, InstantiationException, IllegalAccessException {
    TestSuite tests = new TestSuite();
    for (int i = 0; i < 99; i++) {
        Class<SingleSearchTest> singleSearchTest = (Class<SingleSearchTest>) ClassLoader
                .getSystemClassLoader().loadClass(
                        "SingleSearchTest");

        SingleSearchTest singleSearch = singleSearchTest.newInstance();
        tests.addTest(singleSearch);
    }
    TestRunner.run(tests);
}
public class SingleSearchTest extends TestCase {
    static SingleSearchTest singleSearch    = null;
    private String          device, connection, user;
    private ClientSession   clientSession;
    private SendQueue       sendQueue;

    public static SingleSearchTest main(String args[]) {
        singleSearch = new SingleSearchTest();
        return singleSearch;
    }

    public SingleSearchTest() {
       super("testSingleSearch");
       Random rand = new Random();
    }
}

Ответы [ 2 ]

2 голосов
/ 16 декабря 2011

Вы создаете множество тестов, в которых по одному клиенту.

Что вам нужно сделать, так это создать один простой тест, который создает много клиентов, которые выполняются одновременно.


В моих юнит-тестах;

  • запустить сервер как отдельный поток (чтобы я мог его выключить)
  • использовать ExecutorService в качестве пула потоков для клиентов
  • имеет цикл для создания всех задач, каждый из которых создает клиента, и выполняет их. Когда закончите, вернитесь с задания.
  • отключить ExecutorService.
  • пройти все задания и проверить, что они пройдены. Если они сгенерировали ошибку, ошибка будет сгенерирована в текущем (тестовом) потоке.
0 голосов
/ 01 февраля 2012

Просто выяснил, что я использовал threadExecutor.isTeridity и threadExecutor.showdown вместо использования threadExecutor.isShutDown и threadExecutor.shutdownNow.Я также попробовал threadExecutor.awaitTermination.Работал.В основном оба теста выполняются параллельно.

public static void testLoading() {
    threadExecutor = Executors.newCachedThreadPool();
    for (int i = 0; i < 50; i++) {
        SingleClientTest clientTest = new SingleClientTest();
        randomStringList.add(clientTest.getRandomString());
        threadExecutor.execute(clientTest);
    }
    threadExecutor.shutdownNow();
    try {
        threadExecutor.awaitTermination(2, TimeUnit.SECONDS);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
//      while (!threadExecutor.isShutdown()) {
//      }
}
public static void testSearching() {
    threadExecutor = Executors.newCachedThreadPool();
    for (int i = 0; i < 50; i++) {
        SingleSearchTest searchTest = new SingleSearchTest(randomStringList);
        threadExecutor.execute(searchTest);
    }
    threadExecutor.shutdownNow();
    try {
        threadExecutor.awaitTermination(2, TimeUnit.SECONDS);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
//      while (!threadExecutor.isShutdown()) {
//      }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...