Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

JMeter не записывает тесты приложения на Meteor.JS

jmeter
javascript
Теги: #<Tag:0x00007fedb7d6fdb0> #<Tag:0x00007fedb7d6fae0>

(Владимир Вернусь) #1

Добрый день, разбираюсь с нагрузочным тестированием с помощью инструменты jmeter, пытаюсь записать сценарий авторизации в приложении написанном на meteor js, записывается много запросов, но сам запрос авторизации не записывается, почитал что meteor частично работает через протокол DDP может в этом проблема. Может кто сталкивался с такой проблемой.


(MaximDae) #2

Посмотрите в браузере, что происходит при авторизации (какой запрос отправляется) и сэмулируйте его в Jmeter


(Denys Lapin) #3

Столкнулся с такой же проблемой. Пока что пробую юзать meteor-load-test (https://github.com/alanning/meteor-load-test).
Может у кого-то появились новьіе идеи/експириенс?


(Владимир Вернусь) #4

Решил проблему нагрузочного тестирования метеор приложений средствами Jmeter и Junit.
С помощью java-ddp-client формирую запросы по ddp протоколу к приложению в Junit тестах и данные тесты запускаю через Jmeter Junit Sampler.


(Denys Lapin) #5

А можна по-подробней ? :slight_smile: Например описать какойнибудь кейс и на примере показать как его заимплементить? Или может есть ссьілка на репозиторий


(Владимир Вернусь) #6

Вот например небольшой кейс авторизации в приложении, выполняются два запроса сначала tronicSignIn, а потом login.

public class LoginUser extends TestCase {

    public LoginUser(String test) {
        super(test);
    }

    public LoginUser() {
        super();
    }


    @Before
    protected void setUp() throws Exception {
        System.setProperty(org.slf4j.impl.SimpleLogger.DEFAULT_LOG_LEVEL_KEY, "DEBUG");
        super.setUp();
    }

    @After
    protected void tearDown() throws Exception {
        super.tearDown();
    }

    @Test
    public void testLoginUser() throws URISyntaxException, InterruptedException, NoSuchAlgorithmException {
        String email = "email@mail.ru";
        String subdomain = "test";
        String userId = "ArjLzkHWvbtK9fuWf";
        String accountId = mongo.getAccountId(user).toString();
        String schemaId = "hsykH8LcX8xcb6ayG";
        DDPClient ddp = new DDPClient("host", 3000);
        DDPTestClientObserver obs = new DDPTestClientObserver();
        ddp.addObserver(obs);
        ddp.connect();

        while ("Disconnected".equals(ddp.getState().toString()) || "Closed".equals(ddp.getState().toString())) {
            Thread.sleep(500);
        }

        assertEquals("Connected", ddp.getState().toString());

        Object[] methodArgs11 = new Object[3];
        String password = "123456789a";

        MessageDigest md = MessageDigest.getInstance("SHA-256");
        md.update(password.getBytes());
        byte byteData[] = md.digest();

        StringBuffer sb = new StringBuffer();

        for (int i = 0; i < byteData.length; i++) {
            sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1));
        }

        methodArgs11[0] = subdomain;
        methodArgs11[1] = email;
        methodArgs11[2] = sb.toString();
        ddp.call("tronicSignIn", methodArgs11, obs);

        while (obs.mResumeToken == null) {
            Thread.sleep(500);
        }

        Object[] login = new Object[1];
        java.util.Map < String, Object > resume = new HashMap < String, Object > ();
        resume.put("resume", obs.mResumeToken);
        login[0] = resume;
        ddp.call("login", login, obs);

        while (obs.mSessionId == null) {
            Thread.sleep(500);
        }

        ddp.disconnect();

        while ("Connected".equals(ddp.getState().toString())) {
            Thread.sleep(500);
        }
        assertEquals("Closed", ddp.getState().toString());

    }

}

(Владимир Вернусь) #7

Хочу попробовать тоже meteor-load-test с толкнулся с проблемой на этапе установки при запуске сервера ошибки, не подскажите не сталкивались ли вы с данной проблемой и если да то каковы ее решения?


(Denys Lapin) #8

При установке meteor-load-test проблем особьіх небьіло. Но мьі еще так и не определились какую все-таки тулзу использовать.
В meteor-load-test из коробки не получится (скорее всего) делать связаннье запросьі. Например если брать значение из респонса одного запроса и вставлять в другой.
Смотрели в сторону meteor-down, но она не работает по https. Хотя если получится победить єту ошибку то я бьі вьібрал именно его. Там можна делать логику между колами из коробки.