gatlingとmqttでいくつかのテストを行いたいと思います。ギャトリングのためのさまざまなプラグインがあります。 jeanadrienのプラグインを使用することにしました。他のプラグインはサブスクライブアクションをサポートしていないからです。gatling用のjeanadrien/gatling-mqtt-protocolプラグインの問題を公開して購読する
私はjavaで "serverside" mqttクライアント(ブローカとデータベースと同じノード上でクライアントが実行されます)を実装しました。クライアントは、トピック「番号」から番号をサブスクライブする機能を備えています。トピックから番号を購読した後、クライアントはmongodbから数値データセットを読み込みます。 mongodbからデータセットを読み込んだ後、クライアントはトピック「データ」に関するデータセットを公開します。
"MQTT Box"を使用してuser-clientとして機能をテストしましたが、次の図のように正常に動作します。番号をトピック「番号」に送信し、トピック「データ」からデータをサブスクライブします。 MQTT-Box
今、私は同じシナリオを作るためにプラグインでギャトリングを使いたいと思います。そのために私はスカラ・テストスクリプトを書いた。
package mqtt
import com.github.jeanadrien.gatling.mqtt.Predef._
import io.gatling.core.Predef._
import scala.concurrent.duration._
class Mqtt extends Simulation {
val mqttConf = mqtt
// MQTT broker
.host("tcp://localhost:1883")
val scn = scenario("MQTT")
.exec(connect)
.exec(subscribe("data").qosExactlyOnce)
.exec(publish("number", "10").qosExactlyOnce)
setUp(scn.inject(atOnceUsers(1))).protocols(mqttConf)
}
私はこのエラーを取得するテスト実行中:15:
をシミュレーションmqtt.Mqttは... 10を始め37.310 [ERROR] cgjgmaPublishAction - 'mqttPublish-1' の実行に失敗しました:できません キャストクラス[B
に型クラスjava.lang.Stringの値が10しかし、私のスクリプトは、gitのからexamleに似ています: https://github.com/jeanadrien/gatling-mqtt-protocol/blob/master/src/test/scala/MqttScenarioExample.scala
多分問題は、[Byte]配列の文字列を変換する必要があることです。 どうすれば修正できますか?
さらに、サブスクリプションの結果をトピック「データ」からチェックしたいと思います。私のwebsocketスクリプトに似ています:
.check(wsAwait.within(10 seconds).until(1).regex(""".*"data_id" : 100.0.*"""))
mqttでチェックを使うにはどうしたらいいですか?