2016-10-25 17 views
2

Я создал приложение. Он имеет backend в vertx (java), и я ударяю его с клиента, используя sockJs. Я хочу выполнить тестирование нагрузки (тестирование производительности/производительности) для этого приложения. Раньше я не тестировал нагрузку. Может кто-то, пожалуйста, помогите мне, как это можно сделать? Например, я хочу поражать сервер одновременно со многими подключениями и видеть, когда он терпит неудачу, и что я могу сделать для его улучшения. Вот основной кодЗагрузка тестов для приложений sockjs и vertx

HttpVerticle.java

package sockjs; 

import io.vertx.core.AbstractVerticle; 
import io.vertx.core.Vertx; 
import io.vertx.core.buffer.Buffer; 
import io.vertx.core.http.HttpServer; 
import io.vertx.ext.web.Router; 
import io.vertx.ext.web.handler.sockjs.SockJSHandler; 
import io.vertx.ext.web.handler.sockjs.SockJSHandlerOptions; 
import io.vertx.ext.web.handler.sockjs.SockJSSocket; 

public class HttpVerticle extends AbstractVerticle { 
    static int count = 0; 
    @Override 
    public void start() throws Exception { 
     HttpServer server = vertx.createHttpServer(); 
     Router router = Router.router(Vertx.vertx()); 
     SockJSHandlerOptions options = new SockJSHandlerOptions(); 
     options.setHeartbeatInterval(20000); 
     SockJSHandler sockJSHandler = SockJSHandler.create(vertx, options); 
     sockJSHandler.socketHandler(this::myHandler); 
     router.route("/myapp/*").handler(sockJSHandler); 
     router.route("/myway/*").handler(sockJSHandler); 
     server.requestHandler(router::accept).listen(8080); 
    } 

    private void myHandler(SockJSSocket sockJSSocket) { 
     System.out.println("Connection established " + count); //Calls when the connection is established 
     count++; 
     System.out.println(sockJSSocket); 
     //sockJSSocket.handler(this::processMessage); 
     sockJSSocket.handler(buffer -> { //everytime a message is received, a reply is sent back in uppercase. 
      System.out.println(buffer.toString()); 
      String reply = buffer.toString(); 
      reply = reply.toUpperCase(); 
      sockJSSocket.write((Buffer.buffer(reply))); 
     }); 
    } 

    private void processMessage(Buffer buffer) { 
     System.out.println(buffer.toString()); 
    } 
} 

Main.java

package sockjs; 

import io.vertx.core.Vertx; 
public class Main { 
    public static void main(String[] args) { 
     System.out.println("Vertx server started"); 
     Vertx vertx = Vertx.vertx(); 
     vertx.deployVerticle(new HttpVerticle()); 
    } 
} 

И клиент может быть как:

var sockJsUrl = "https://cdnjs.cloudflare.com/ajax/libs/sockjs-client/1.1.1/sockjs.min.js"; 
var head = document.querySelector("head"); 
var script = document.createElement("script"); 
script.type = "text/javascript"; 
script.src = sockJsUrl; 
head.appendChild(script); 



var sock = new SockJS("http://localhost:8080/myapp"); 
sock.onopen = function() { 
    console.log("Connection open", sock.readyState); 
} 

sock.onmessage = function(event) { 
    console.log("Message from server"); 
    console.log(event); 
} 

sock.onclose = function() { 
    console.log("Connection closed", sock.readyState); 
} 

sock.onerror = function() { 
    console.log("Connection error", sock.readyState); 
} 

Откровенно говоря, у меня нет знания об эффективности тестирования. Поэтому, если кто-то даст мне подробности, я буду благодарен.

+0

Мой проект находится в sockJs, а не в WebSockets. Итак, как я могу использовать thor для этого, поскольку в документе говорится, что Thor использует только протокол ws? – CuriousMind

ответ

0

Посмотрите https://github.com/observing/thor

Примечание это только для WebSocket, так что вы не сможете проверить спектакли для эмуляторов (когда WebSocket не доступен в вашем браузере или сети).

+0

Мое приложение находится на SockJs, все эти инструменты предназначены для websockets или socket.io. Итак, как я могу использовать его для sockJs. – CuriousMind

1

Есть по крайней мере, 3 варианта автономные:

  1. Gatling инструмент - Websocket
  2. Tsung - Websocket
  3. Apache JMeter с WebSocket Sampler плагин

Если вы предпочитаете решение JavaScript на основе вы могли взгляните на Artillery

И пару «обычных» рекомендаций:

  1. Не забудьте для мониторинга системных ресурсов на стороне сервера операционной, то есть процессор, оперативная память, своп, диск и использование сети - любой из них может стать узкое
  2. Запустите приложение под profiler tool телеметрии - это позволит быстрее определить основную причину проблемы, если она связана с приложением
  3. Помните, что конфигурация сервера по умолчанию веб/приложений обычно не подходят для высоких нагрузок, вам может потребоваться как-то заранее настроить его
+0

Мое приложение находится на SockJs, все эти инструменты предназначены для websockets или socket.io. Итак, как я могу использовать его для sockJs. Пожалуйста, скажите мне. – CuriousMind

 Смежные вопросы

  • Нет связанных вопросов^_^