問題タブ [parallel-testing]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
spring - 動的 DB ポートと並行して Spring との統合テストを実行する方法
説明
Redis DB への接続を伴う多数の統合テストを伴う成長中のアプリケーションがあります。数が増えているため、少なくともクラスレベルでそれらを並列化したいと考えています。これまで、すべてのテストを順番に実行com.github.kstyrc embedded-redis 0.6
し、静的@BefroreClass
/@AfterClass
メソッド (jUnit 4) に埋め込まれた redis DB ( ) を開始 (停止) しました。DB のポートは常に同じです -- 9736
。これは、jedis 接続プールのapplication.properties
viaにも設定されています。spring.redis.port=9736
並列化が機能するには、ポートを動的に取得し、接続プーリングのために接続ファクトリにアナウンスする必要があります。この問題は、構成に実装することでしばらくして解決しBeanPostProcessor
ました。私が抱えている残りの問題は、Bean のライフサイクルと Web アプリケーションのコンテキストを正しくインターセプトすることです。
コード スニペットの並列テスト
アプリケーションのプロパティ
実装BeanPostProcessor
構成
動的ポートによる並列テストの起動とシャットダウン
テストの並列化は次の方法で達成されますmaven-surefire-plugin 2.18.1
補足
何が起こるかというと、Spring Bean の初期化フェーズ中に、接続プールが開始される前にJedisConnectionFactory
、TestConfig が Bean のライフサイクルにフックし、ランダムに選択されたポートで Redis サーバーを開始します。spring.redis.port=${random.int[4000,5000]}
redisServer 自体は Bean であるため、 を使用しdestroyMethod
て Bean の破棄時にサーバーを停止し、これをアプリケーション コンテキストのライフサイクルに任せます。シーケンシャルからパラレルへの移行は、静的ポートから動的ポートに関してうまくいきました。
問題
しかし、テストを並行して実行すると、次のようなエラーが発生します
java.lang.IllegalStateException: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@22b19d79 has been closed already
。
そして
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'spring.redis-org.springframework.boot.autoconfigure.data.redis.RedisProperties': Initialization of bean failed; nested exception is java.lang.IllegalStateException: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@22b19d79 has been closed already
を通して
ヘルプ
問題についてよくわかりません。おそらく、tearDown 呼び出しを省略することができ offerRepository.deleteAll()
ます@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)
が、セットアップ時のエラーwebAppContextSetup(this.wac).apply(springSecurity()).build()
は依然として残ります。
並行して実行しているときにアプリケーション コンテキストが台無しになりましたか、それともセットアップのアプリケーション コンテキストが既に閉じられているのはなぜですか?
間違ったアプローチ (間違ったパターン) を選択しましたか? もしそうなら、私たちは何を変えるべきですか?
java - TestNG は親クラスから @Parameters を継承します
TestNG を使用して、同時実行クロス ブラウザー テスト フレームワークのスタブを作成しようとしています。しかし、親クラスから@Parametersを取得できず、取得し続けているようです
TestNG.xml
BaseTest
子テスト
これを機能させる方法について十分な情報が見つからなかったので、何かアイデアがあれば聞いてみたいと思います。
すでにチェック済みですが、十分な情報がありません: スーパークラスの TestNG アノテーション
selenium - cucumberJS 機能ファイルの並列実行
CucumberJS が機能ファイルの実行を並行して処理できるかどうか疑問に思っています。現在、同時に異なるテスト ディレクトリを指し、それをセレン グリッド ハブに渡す少数の Jenkins ジョブを使用して、並列テストを処理しています。これは、ハブが受信したリクエストを処理し、一種の強制的な「並列」で実行するため、機能します。私たちが望む主な目標は、テストを実行し、セッションの最大数 (たとえば 4) を設定することです。これにより、本質的に一度に実行できる機能ファイルが 4 つになります。
私はキュウリがこれを十分にサポートしていないことを知っています.cucumberjsがそうするかどうかは疑わしいですが、誰かが成功したnpmモジュールがあると確信しています. どんな助けも私のチームにとって大きな利益となり、他の場所でcucumberjs /分度器のユーザーを見つけることはめったにありません!