API を利用したエンドポイント用データのシミュレート

API を使って、Web アプリケーションの選択したエンドポイントを経由して送信されるデータをシミュレートします。

エンドポイント経由で送信されるデータをシミュレートする前に、エンドポイント経由で送信されるデータを学習する必要があります。詳細については、「エンドポイント経由で送信されるデータの学習」を参照してください。

注: Silk4J では、同時に 3 つのエンドポイントまでシミュレートできます。さらに多くのエンドポイントをシミュレートする必要がある場合は、SV Lab ライセンスを購入する必要があります。SV Lab 用のライセンス サーバーは、SVLicenseServerUrl プロパティを svlab.properties ファイルで設定して指定します。このファイルは、Silk Test アプリケーション データ ディレクトリにあります(%APPDATA%/Silk/SilkTest/conf/)。

既存の Silk4J スクリプトにサービス仮想化機能を追加するには:

  1. SV Lab クライアント ライブラリSilk4J スクリプトを含むプロジェクトに追加します。
    1. パッケージ エクスプローラー で、プロジェクト ノードを右クリックします。
    2. Silk4J ツール > サービス仮想化機能の追加 を選択します。
  2. エンドポイントの JavaScript ファイルでエンドポイント用データを、シミュレートする新しいデータに変更します。 新しいシナリオは、Silk4J プロジェクトの Scenarios サブフォルダーに保存されます。 JavaScript ファイルは、シナリオトと同じ名前のシナリオのサブフォルダーにあり、名前の末尾に jsonModel が付いています。
  3. Silk4J スクリプトを開きます。
  4. desktop を static に変更します。
    private static Desktop desktop = new Desktop();
  5. SvClient メンバー変数を追加します。
    private static SvClient sv;
  6. SV Lab を開始してシミュレートしたデータを使用します。
    1. 次の import 文をスクリプトの最初に追加します。
      import org.junit.BeforeClass;
      import com.microfocus.silktest.jtf.sv.SvLabIntegration;
      import org.microfocus.sv.api.SvClient;
      import org.microfocus.sv.model.project.Module;
    2. エンドポイント データをシミュレートする次のコードをテストの前に追加します。
      @BeforeClass
      public static void startSVLabSimulation() {
        String scenarioName = "PopularProducts";
        SvLabIntegration svLabIntegration = desktop.getSvLabIntegration();
        String endpoint = svLabIntegration.getServerEndpoint();
        sv = SvClient.newInstance(endpoint);
        Module module = sv.compileModuleFromSources("classpath:/" + scenarioName + "/*");
        sv.loadActiveVirtualLab("classpath:/" + scenarioName + "/sv-lab.json", module, true);
        sv.startActiveVirtualLab();
        sv.runSimulation(scenarioName);
      }
      注: ここで、scenarioName は現在のプロジェクトのシナリオの名前です。
  7. プロキシが基本状態で指定されていることを確認します。
  8. ブラウザーが AUT のすべてのデータをキャッシュしていないことを確認してください。
  9. テスト スクリプトを実行します。
  10. SV Lab を停止します。
    1. 次の import 文をスクリプトの最初に追加します。
      import org.junit.AfterClass;
    2. 次のコードをテストの後に追加します。
      @AfterClass
      public static void stopSVLab() {
        if (sv != null) {
          sv.close();
        }
      }
  11. テストを再生します。 コマンド ラインからテストを再生する方法については、「コマンド ラインからのテストの再生」を参照してください。

例:シミュレートしたデータのテストでの利用

エンドポイント用データをシミュレートするスクリプトの全体は、次のようになります。
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.microfocus.sv.api.SvClient;
import org.microfocus.sv.model.project.Module;

import com.borland.silktest.jtf.BrowserBaseState;
import com.borland.silktest.jtf.Desktop;
import com.borland.silktest.jtf.xbrowser.DomElement;
import com.microfocus.silktest.jtf.sv.SvLabIntegration;

public class MyTest {

  private static Desktop desktop = new Desktop();
  private static SvClient sv;

  @BeforeClass
  public static void startSVLabSimulation() {
    String scenarioName = "PopularProducts";
    SvLabIntegration svLabIntegration = desktop.getSvLabIntegration();
    String endpoint = svLabIntegration.getServerEndpoint();
    sv = SvClient.newInstance(endpoint);
    Module module = sv.compileModuleFromSources("classpath:/" + scenarioName + "/*");
    sv.loadActiveVirtualLab("classpath:/" + scenarioName + "/sv-lab.json", module, true);
    sv.startActiveVirtualLab();
    sv.runSimulation(scenarioName);
  }

  @Before
  public void baseState() {
    // Go to web page 'http://advantageonlineshopping.com'
    BrowserBaseState baseState = new BrowserBaseState();
    baseState.execute(desktop);
  }

  @Test
  public void testSimulatedProduct() {
    DomElement firstPopularItem = desktop.<DomElement> find("//BrowserApplication//BrowserWindow//P[@name='popular_item_16_name']");
    Assert.assertEquals("SIMULATED: HP ELITEPAD 1000 G2 TABLET", firstPopularItem.getText());
  }

  @AfterClass
  public static void stopSVLab() {
    if (sv != null) {
      sv.close();
    }
  }

}