blog

統合テスト・エンジンの ShardingSphere 4.x テスト・エンジン

Junitはすべてのテストデータを集約し、ひとつずつテストメソッドに渡してアサーションを行います。データは砂時計の砂のように扱われます。メタデータとテストデータはファイルに定義されます。メタデータとテ...

Aug 14, 2020 · 4 min. read
シェア

手順

JunitのParameterizedは、すべてのテストデータを集約し、アサーション用のテストメソッドに1つずつ渡します。データ処理は砂時計の流砂のようなものです:

構成

  • 環境クラスファイル
    • /sharding-integration-test/sharding-jdbc-test/src/test/resources/integrate/env.properties
    • /sharding-integration-test/sharding-jdbc-test/src/test/resources/integrate/env/SQL-TYPE/dataset.xml
    • /sharding-integration-test/sharding-jdbc-test/src/test/resources/integrate/env/SQL-TYPE/schema.xml
  • テストケースのクラスファイル
    • /sharding-integration-test/sharding-jdbc-test/src/test/resources/integrate/cases/SQL-TYPE/SQL-TYPE-integrate-test-cases.xml
    • /sharding-integration-test/sharding-jdbc-test/src/test/resources/integrate/cases/SQL-TYPE/dataset/SHARDING-TYPE/*.xml
  • sql-case
    • /sharding-sql-test/src/main/resources/sql/sharding/SQL-TYPE/*.xml

環境設定

統合テストには実際のデータベース環境が必要です。 適切な設定ファイルに従ってテスト環境を作成してください:

/sharding-integration-test/sharding-jdbc-test/src/test/resources/integrate/env.properties まず、以下の例のように設定ファイルを変更します:

# 主キー、同時実行、カラムインデックスなどのテストスイッチ。
run.additional.cases=false
# セグメンテーション戦略では、さまざまな戦略を指定することができる
sharding.rule.type=db,tbl,dbtbl_with_masterslave,masterslave
# データベースをテストするには、さまざまなデータベースを指定できる(H2,MySQL,Oracle,SQLServer,PostgreSQL)
databases=MySQL,PostgreSQL
# MySQL 
mysql.host=.1
mysql.port=13306
mysql.username=root
mysql.password=root
## PostgreSQL 
postgresql.host=db.psql
postgresql.port=5432
postgresql.username=postgres
postgresql.password=
## SQLServer 
sqlserver.host=db.mssql
sqlserver.port=1433
sqlserver.username=sa
sqlserver.password=Jdbc1234
## Oracle 
oracle.host=db.oracle
oracle.port=1521
oracle.username=jdbc
oracle.password=jdbc

/sharding-integration-test/sharding-jdbc-test/src/test/resources/integrate/env/SQL-TYPE/dataset.xml次に、dataset.xml ファイルにメタデータとテストデータを定義するようにファイルを修正します。例

<dataset>
 <metadata data-nodes="tbl.t_order_${0..9}">
 <column name="order_id" type="numeric" />
 <column name="user_id" type="numeric" />
 <column name="status" type="varchar" />
 </metadata>
 <row data-node="tbl.t_order_0" values="1000, 10, init" />
 <row data-node="tbl.t_order_1" values="1001, 10, init" />
 <row data-node="tbl.t_order_2" values="1002, 10, init" />
 <row data-node="tbl.t_order_3" values="1003, 10, init" />
 <row data-node="tbl.t_order_4" values="1004, 10, init" />
 <row data-node="tbl.t_order_5" values="1005, 10, init" />
 <row data-node="tbl.t_order_6" values="1006, 10, init" />
 <row data-node="tbl.t_order_7" values="1007, 10, init" />
 <row data-node="tbl.t_order_8" values="1008, 10, init" />
 <row data-node="tbl.t_order_9" values="1009, 10, init" />
</dataset>

開発者は、schema.xmlでライブラリとテーブルのビルド文をカスタマイズできます。

アサーションの設定

env.propertiesとdataset.xmlは、どの環境でどのSQLを実行するかを決定し、以下はデータをアサートするための構成です:

/sharding-integration-test/sharding-jdbc-test/src/test/resources/integrate/cases/SQL-TYPE/SQL-TYPE-integrate-test-cases.xmlアサーションの構成には 2 種類のファイルが必要で、最初のタイプのファイルは以下の場所にあります。 このファイルは、実行する SQL、パラメータ、および期待されるデータのファイルの場所を定義するインデックスに似ています。ここでのテスト・ケースは、sharding-sql-test の SQL に対応する sql-case-id を参照します:

<integrate-test-cases>
 <dml-test-case sql-case-id="insert_with_all_placeholders">
 <assertion parameters="1:int, 1:int, insert:String" expected-data-file="insert_for_order_1.xml" />
 <assertion parameters="2:int, 2:int, insert:String" expected-data-file="insert_for_order_2.xml" />
 </dml-test-case>
</integrate-test-cases>

/sharding-integration-test/sharding-jdbc-test/src/test/resources/integrate/cases/SQL-TYPE/dataset/SHARDING-TYPE/*.xmlこのファイルの内容は dataset.xml と非常によく似ていますが、expected-data-file はアサーション・データだけでなく、対応する SQL の実行後の返り値なども定義します。例えば

<dataset update-count="1">
 <metadata data-nodes="db_${0..9}.t_order">
 <column name="order_id" type="numeric" />
 <column name="user_id" type="numeric" />
 <column name="status" type="varchar" />
 </metadata>
 <row data-node="db_0.t_order" values="1000, 10, update" />
 <row data-node="db_0.t_order" values="1001, 10, init" />
 <row data-node="db_0.t_order" values="2000, 20, init" />
 <row data-node="db_0.t_order" values="2001, 20, init" />
</dataset>

設定する必要があるすべてのデータは、設定されている、対応する統合テストクラスを開始することができます、全体のプロセスは、Javaコードを変更する必要はありません、唯一のデータの初期化とxml内のアサーションを行う必要があり、大幅にShardingSphereのデータテストのしきい値と複雑さを軽減します。

注意事項

  1. Oracle をテストするには、pom.xml に Oracle ドライバの依存関係を追加します。
  2. テストデータの整合性を確保するため、統合テストでは、分割されたライブラリとテーブルを 10 個使用するため、テストケースの実行時間が長くなります。
Read next

JavaScript入門

1.機能優先の軽量なインタープリタ型またはジャストインタイム・コンパイル型の高水準プログラミング言語です。ウェブページを開発するためのスクリプト言語として知られていますが、ブラウザ以外の多くの環境、プロトタイプベースのプログラミング、マルチパラダイム動的スクリプト言語、...

Aug 14, 2020 · 1 min read

リボン

Aug 14, 2020 · 2 min read

オープンサイン

Aug 14, 2020 · 1 min read