gauge(https://github.com/getgauge/gauge)のコード眺めてて得たことを残しときます
1. gaugeがどう動いて何をしているか
- gaugeでのテストの時、gauge本体と言語ごとのプラグインが動く
- 例えばgaugeコマンド(本体)とgauge-java(プラグイン)みたいな
- gauge-javaはgrpcサーバーで、実際のgaugeのテスト処理の実行者。
- gauge-javaはgrpcサーバーを起動してgrpcを待ち受けてるだけ
- 多くの場合gradleやmavenを使ってるわけだが。多分処理の流れとしては、gauge-javaをmainメソッドを実行→ gaugeコマンドを実行するというのをmavenやgradleプラグインで実行をしている(gaugeプラグイン != mavenプラグイン != gradleプラグイン)
- gaugeコマンドはgrpcクライアント(正直、双方向だし、どっちがgrpcサーバーとかクライアントとかよく分からん)
- runコマンドを実行すると、specとcptといったファイル情報の収集する
- 並列数のコマンドオプションによってsingle executionかparallel executionのいずれかが動く
- gaugeコマンドはライフサイクルどおりに動き、ライフサイクルのイベントごとにgrpcリクエストをプラグインに送る
- プラグイン側はイベントごとにgrpcリクエストをハンドルしてプロセッサーが処理を行い、grpcリクエストを送り返す
- grpcでいうところのUnary RPCというものぽい(1回送って1回返す)
- grpcでどういう会話してるかはproto見れば分かる(こことか https://github.com/getgauge/gauge-proto)
2. 具体的な流れ
- コマンド側がBeforeSuiteイベントの処理→grpcリクエストしてgauge-javaプラグインに通知→gauge-javaプラグイン側でBeforeSuiteの処理→grpcリクエスト
- gaugeコマンド側でBeforeSceinarioの処理→grpcリクエスト→gauge-java プラグイン側でBeforeScenarioの処理→grpcリクエスト
というのがずっと続く(BeforeSuite→BeforeScenario→BeforeSpecみたいなライフサイクル毎に)
3. gaugeがよく固まる理由の考察
- 単純にgauge-java自身が起動しないだけなら数十秒でタイムアウトするはず。そうではない原因の時が多そう
- grpcの会話が出来てないとかよくありそう
- gaugeの起動するgrpcサーバーのポートは指定しない限りランダムらしいので、起動はできたけどリクエストは届いてない時があるとか
- grpcのバージョンによっては不安定とか
単純にネットワークI/Oの問題とか
0 件のコメント:
コメントを投稿