Web サービスまたは HTTP/SOAP/CoAP 要求のステップのプロパティ

関連:API テストのみ

コードを使用して,HTTP/SOAP/CoAP 要求や Web サービスのステップの入力および出力プロパティにアクセスし,プロパティを設定します。

注: REST サービスと WADL ステップでは,標準的な API テスト・アクティビティと同じ方法でイベント・ハンドラ・コードを使用します。

詳細については,ステップの入力,出力,チェックポイントの各プロパティを参照してください。

入力プロパティのプロパティ値へのアクセスと設定

  1. キャンバスで,Web サービス,SOAP 要求,または CoAP 要求の送信ステップを選択します。

  2. 要求の本文が含まれている XML をロードします。

    [プロパティ]表示枠で,[XML 本文]タブ(SOAP 要求)または[CoAP]タブ(CoAP 要求)を開きます。

  3. XML のロード]ボタンをクリックし,要求ファイルを指定します。

  4. [プロパティ]表示枠で,[イベント]タブを開きます。

  5. [イベント]タブで,イベント・ハンドラを作成します。

    Web サービスまたは SOAP 要求のステップの場合

    1. AfterGenerateRequest イベントのイベント・ハンドラを作成します。[TestUserCode.cs]ファイルが開きます。

    2. TestUserCode.cs ファイルの TODO セクションにプロパティ値を追加します。使用する構文は,次のとおりです。

      this.StServiceCallActivity<アクティビティ #>.InputEnvelope.SelectSingleNode(XPath to property).InnerText = "<値>";

      入力エンベロープ・オブジェクトの詳細については,InputEnvelope オブジェクトを参照してください。SelectSingleNode メソッドの詳細については,SelectSingleNode メソッドを参照してください。

      Example: フライト予約 Web サービスの DepartureCity 入力プロパティの値を Excel データ・ソースから割り当てます。

      string newDepatureCityValue = GetDataSource("SampleAppData!Input").GetValue(this.Loop2.CurrentIterationNumber-1, "DepartureCity").ToString(); 
      string departureCityXpath = "/*[local-name(.)='Envelope'][1]/*[local-name(.)='Body'][1]/*[local-name(.)='GetFlights'][1]/*[local-name(.)='DepartureCity'][1]"; 
      this.StServiceCallActivity4.InputEnvelope.SelectSingleNode(departureCityXpath).InnerText = newDepatureCityValue;
      

    CoAP 要求の送信ステップの場合

    1. BeforeExecuteStepRequest のイベント・ハンドラを作成します。[TestUserCode.cs]ファイルが開きます。

    2. TestUserCode.cs ファイルの TODO セクションにプロパティ値を追加します。使用する構文は,次のとおりです。

      this.CoAPRequest<activity#>.RequestBodyType = "<value>";
      this.CoAPRequest<activity#>.XMLBody.LoadXml("<string>");
    3. AfterGenerateRequest イベントのイベント・ハンドラを作成します。[TestUserCode.cs]ファイルが開きます。

    4. TestUserCode.cs ファイルの TODO セクションにプロパティ値を追加します。使用する構文は,次のとおりです。

      System.Windows.Forms.MessageBox.Show( this.CoAPRequest<activity#>.XMLBody.InnerXml);

先頭に戻る

チェックポイントのプロパティ値を追加します。

Web サービスまたは SOAP 要求のステップ内のチェックポイントについて,コードを使用してその値を追加できます。これは,チェックポイントが,動的に作成される応答に基づく場合に非常に役立ちます。

注: Web サービス呼び出し内に設定されている既存のチェックポイントは,値を変更できません。

  1. CodeCheckpointEvent のイベント・ハンドラを作成します(チェックポイントの値の設定を参照)。

  2. チェックポイントを有効にするコード(args.Checkpoint.RunUICheckpoints = true)を含む行の後に,チェックポイントの値を入力します。使用する構文は次のとおりです。

    args.Checkpoint.Assert.Equals(<実際の値>,<期待値>);

    <実際の値> および <期待値> パラメータで,ステップの出力エンベロープを通じてチェックポイントのプロパティにアクセスします。出力パラメータにアクセスするには,入力プロパティのプロパティ値へのアクセスと設定上記で説明したのと同じ構文を使用します。ただし,InputEnvelopeOutputEnvelope に変更して,正しいプロパティにアクセスする必要があります。

例:

フライト予約 Web サービスの DepartureCity 値のチェックポイント値を設定します。

string departureCityActualValueXpath = "/*[local-name(.)='Envelope'][1]/*[local-name(.)='Body'][1]/*[local-name(.)='GetFlightsResponse'][1]/*[local-name(.)='GetFlightsResult'][1]/*[local-name(.)='Flight'][1]/*[local-name(.)='DepartureCity'][1]"; 
string ActualValue = this.StServiceCallActivity4.OutputEnvelope.SelectSingleNode(departureCityActualValueXpath).InnerText; 

string departureCityExpectedValueXpath = "/*[local-name(.)='Envelope'][1]/*[local-name(.)='Body'][1]/*[local-name(.)='GetFlights'][1]/*[local-name(.)='DepartureCity'][1]"; 
string ExpectedValue = this.StServiceCallActivity4.InputEnvelope.SelectSingleNode(departureCityExpectedValueXpath).InnerText; 

args.Checkpoint.Assert.Equals(ActualValue, ExpectedValue);

先頭に戻る

SOAP フォールトと SOAP フォールトの値の指定

コードを使用して,SOAP フォールトを予期するように Web サービス呼び出しまたは SOAP 要求を設定できます(予期されるフォールト・プロパティも指定できます)。

  1. キャンバスで Web サービスまたは SOAP 要求のステップを選択します。

  2. [プロパティ]表示枠で,[イベント]タブを開きます。

  3. [イベント]タブで,AfterGenerateRequest イベントのイベント・ハンドラを作成します。[TestUserCode.cs]ファイルが開きます。

  4. TestUserCode.cs ファイルの TODO セクションで,予期されるフォールトを指定します。使用する構文は,次のとおりです。

    this.<アクティビティ>.FaultExpected = true;
  5. [イベント]タブで,CodeCheckpointEvent イベントのイベント・ハンドラを作成します。

  6. TestUserCode.cs ファイルの TODO セクションで,CodeCheckpointEvent セクションに,予期されるフォールトを指定します。使用する構文は,次のとおりです。

    string xpath = "<フォールト・プロパティのパス>"; 
    string actualValue = this.StServiceCallActivity<アクティビティ #>.OutputEnvelope.SelectSingleNode(xpath).InnerText; 
    string expectedValue = "soap:Server"; 
    args.Checkpoint.Assert.Equals(actualValue,expectedValue);

    注: 上記構文中で指定する文字列名は,独自の名前を指定できます。

例:

string xpath = "/*[local-name(.)='Envelope'][1]/*[local-name(.)='Body'][1]/*[local-name(.)='Fault'][1]/*[local-name(.)='faultcode'][1]"; 
string actualValue = this.StServiceCallActivity4.OutputEnvelope.SelectSingleNode(xpath).InnerText; 
string expectedValue = "soap:Server"; 
args.Checkpoint.Assert.Equals(actualValue,expectedValue);

先頭に戻る

テスト・ステップへの特定の要求ファイルの割り当て

  1. キャンバスで Web サービスまたは SOAP 要求のステップを選択します。

  2. [プロパティ]表示枠で,[イベント]タブを開きます。

  3. [イベント]タブで,AfterGenerateRequest イベントのイベント・ハンドラを作成します。[TestUserCode.cs]ファイルが開きます。

  4. TestUserCode.cs ファイルの TODO セクションで,予期されるフォールトを指定します。使用する構文は,次のとおりです。

    this.<activity>.InputEnvelope.LoadXml(@"<応答ファイルのパス>");

    注: 応答は,ファイルからではなく,前のステップからロードすることもできます。その場合は,@"<応答ファイルのパス>" 文字列の代わりに,前のステップの OutputEnvelope にアクセスする必要があります。ステップの出力プロパティにアクセスする処理の詳細については,チェックポイントの値の設定を参照してください。

先頭に戻る

OnSendRequest イベントで Web サービス・ステップに特定の要求ファイルを割り当て

  1. キャンバスで Web サービスまたは SOAP 要求のステップを選択します。

  2. [プロパティ]表示枠で,[イベント]タブを開きます。

  3. [イベント]タブで,OnSendRequest イベントのイベント・ハンドラを作成します。[TestUserCode.cs]ファイルが開きます。

  4. TestUserCode.cs ファイルの TODO セクションで,予期されるフォールトを指定します。使用する構文は,次のとおりです。

    System.Xml.XmlDocument envelope = new XmlDocument(); 
    envelope.LoadXml(System.Text.Encoding.UTF8.GetString(args.Message)); 
    
    string xpath = "<プロパティの完全修飾 XPath>"; 
    envelope.SelectSingleNode(xpath).InnerText = "<入力する値>"; 
    	
    args.Message = System.Text.Encoding.UTF8.GetBytes(envelope.OuterXml);

例:

// 要求エンベロープを XML ドキュメントにロード
System.Xml.XmlDocument envelope = new XmlDocument(); 
envelope.LoadXml(System.Text.Encoding.UTF8.GetString(args.Message)); 
	
// 必要なノードの検索と変更
string xpath = "/*[local-name(.)='Envelope'][1]/*[local-name(.)='Body'][1]/*[local-name(.)='EchoArr'][1]/*[local-name(.)='arr'][1]/*[local-name(.)='int'][1]"; 
envelope.SelectSingleNode(xpath).InnerText = "10"; 
	
// 変更したエンベロープを上書き
args.Message = System.Text.Encoding.UTF8.GetBytes(envelope.OuterXml);

先頭に戻る

非同期 Web サービス呼び出しのプロパティの設定

  1. キャンバスで Web サービスまたは SOAP 要求のステップを選択します。

  2. [プロパティ]表示枠で,[イベント]タブを開きます。

  3. [イベント]タブで,AfterGenerateRequest イベントのイベント・ハンドラを作成します。[TestUserCode.cs]ファイルが開きます。

  4. TestUserCode.cs ファイルの TODO セクションで,非同期呼び出しを指定します。使用する構文は,次のとおりです。

    <アクティビティ名>.IsAsync = true;
  5. IsAsync のコードの下で,Web サービスまたは SOAP 要求の応答をリッスンするポートを指定します。使用する構文は次のとおりです。

    this.<アクティビティ>.ListenOnPort = <ポート番号>;

例:

StServiceCallActivity8.IsAsync = true;
this.StServiceCallActivity8.ListenOnPort = 8822;

先頭に戻る

Web サービス呼び出しへの入力添付ファイルの追加

コードを使用して,添付ファイルを Web サービス呼び出しとともに送信します。これは,動的に添付ファイルを作成するため,テストの設計中に API テスト・インタフェースで添付ファイルを追加できないときに非常に便利です。

注: 添付ファイルをテスト外からロードする場合は,スキップして手順 5 に進みます。

  1. キャンバスにカスタム・コード・ステップを追加します。

  2. [プロパティ]表示枠で,[入出力プロパティ]タブを開きます。

  3. [入出力プロパティ]で[追加]をクリックし,[入力パラメータの追加]を選択します。[入力パラメータの追加]ダイアログ・ボックスで,パラメータにわかりやすい名前を付けます。

  4. パラメータを目的の添付ファイルにリンクします。詳細については,API テスト/コンポーネント・ステップへのデータの割り当てを参照してください。

  5. キャンバスで Web サービスまたは SOAP 要求のステップを選択します。

  6. [プロパティ]表示枠で,[イベント]タブを開きます。

  7. [イベント]タブで,AfterGenerateRequest イベントを作成します。[TestUserCode.cs]ファイルが開きます。

  8. TestUserCode.cs ファイルの TODO セクションで,追加する添付ファイルを指定します。使用する構文は,次のとおりです。

    string attachmentsInfo =
    	@"<InputAttachments>
    		<Type> <添付ファイルのタイプ> </Type>
    		<Attachments>
    			<Origin> <ファイルのパス> </Origin>
    			<OriginType> File </OriginType>
    			<ContentType> <コンテンツのタイプ> </ContentType>
    			<ContentID>Auto</ContentID>
    		</Attachments>
    	</InputAttachments>"; 
    
    this.StServiceCallActivity<アクティビティ #>.InputAttachments = new XmlDocument(); 
    this.StServiceCallActivity<アクティビティ #>.InputAttachments.LoadXml(attachmentsInfo);

    添付ファイルを追加するコードの前に,@<InputAttachments> のコードで示すように,添付ファイルのプロパティを定義する必要があります。定義したプロパティは,[プロパティ]表示枠の[添付ファイル]タブに,テスト・ステップに対して表示されます。添付ファイルに必要なプロパティ値の詳細については,[添付ファイル]タブ([プロパティ]表示枠 - API テスト)を参照してください。

    注: <InputAttachments> 開始タグと </InputAttachments> 終了タグの間に,複数の添付ファイルを定義できます。これは,上記に示す構文(<Attachments> タグと </Attachments> タグの間)を使用して定義します。

  9. 任意 - [プロパティ]表示枠の[添付ファイル]タブで定義済みの添付ファイルをオーバーライドするには,次の構文を使用します。

    string <文字列名> = "<[添付ファイル]タブで定義された添付ファイルの完全修飾 XPath>";
    this.StServiceCallActivity<アクティビティ #>.InputAttachments.SelectSingleNode(<文字列名>).InnerText = @"<ファイルのパス>";
    

    注: これは,添付ファイルを上書きするだけであり,添付ファイルのプロパティは更新されません。

例:

2 つのテキスト添付ファイルをテストに追加する。

string attachmentsInfo =
	@"<InputAttachments>
		<Type>DIME</Type>
		<Attachments>
			<Origin>C:\somefile1.txt</Origin>
			<OriginType>File</OriginType>
			<ContentType>text/plain</ContentType>
			<ContentID>Auto</ContentID>
		</Attachments>
		<Attachments>
			<Origin>C:\somefile2.txt</Origin>
			<OriginType>File</OriginType>
			<ContentType>text/plain</ContentType>
			<ContentID>Auto</ContentID>
		</Attachments>
	</InputAttachments>"; 
	
this.StServiceCallActivity5.InputAttachments = new XmlDocument(); 
this.StServiceCallActivity5.InputAttachments.LoadXml(attachmentsInfo);

例:

既存の添付ファイルをテキスト・ファイルで置き換える。

string firstAttachmentOriginXpath = "/*[local-name(.)='InputAttachments'][1]/*[local-name(.)='Attachments'][1]/*[local-name(.)='Origin'][1]";
this.StServiceCallActivity5.InputAttachments.SelectSingleNode(firstAttachmentOriginXpath).InnerText = @"c:\somefile.txt";

先頭に戻る

Web サービス呼び出しの応答の添付ファイルへのアクセス

Web サーバの応答の添付ファイルは,OpenText Functional Testing の標準設定ではテストのフォルダ内の実行結果フォルダに保存されます。ただし,これらの添付ファイルは,イベント・ハンドラを使用してアクセスすることもできます。

  1. キャンバスで,Web サービス呼び出しを保存する,Web サービスまたは SOAP 要求のステップを選択します。

  2. [プロパティ]表示枠で,[イベント]タブを開きます。

  3. [イベント]タブで,AfterExecuteStepEvent イベントのイベント・ハンドラを作成します。[TestUserCode.cs]ファイルが開きます。

  4. TestUserCode.cs ファイルの TODO セクションで,添付ファイルの情報にアクセスします。使用する構文は,次のとおりです。

    string <文字列名> = System.IO.Path.Combine(this.StServiceCallActivity<アクティビティ #>.Context.ReportDirectory,"Attachments");
    string[] <名前> = System.IO.Directory.GetFiles(<文字列名>);

    このイベント・ハンドラは,Web サービスの応答で返された添付ファイルの完全パスを含む配列を返します。

例:

string responseAttachmentsFolder = System.IO.Path.Combine(this.StServiceCallActivity4.Context.ReportDirectory,"Attachments");
string[] responseAttachments = System.IO.Directory.GetFiles(responseAttachmentsFolder);

先頭に戻る

Web サービス呼び出しの HTTP ヘッダの追加

Web サービス呼び出しまたは SOAP 要求のステップを編集しているときに,イベントを使用して HTTP ヘッダを追加できます。これは,その情報のソースがテスト実行中に動的に作成される場合に便利です。

  1. キャンバスで Web サービスまたは SOAP 要求のステップを選択します。

  2. [プロパティ]表示枠で,[イベント]タブを開きます。

  3. [イベント]タブで,BeforeApplyProtocolSettings イベントのイベント・ハンドラを作成します。[TestUserCode.cs]ファイルが開きます。

  4. TestUserCode.cs ファイルの TODO セクションにヘッダ要素を追加します。使用する構文は,次のとおりです。

    this.StServiceCallActivity4.HttpRequestHeaders.Add("<header key>", "< key value>");
    

注: HTTP ヘッダの値は別の方法でも設定できます。[プロパティ]表示枠の[入力/チェックポイント]タブで RequestHeader ノードを展開し,[名前]行と[]行からデータ・ソースにリンクします。詳細については,[リンク元の選択]ダイアログ・ボックス(API テスト)を参照してください。

イベント・ハンドラでコードを使用するヘッダを変更すると,テスト実行中に[プロパティ]表示枠の値より優先されます。

先頭に戻る

実行時における SOAP 要求のセキュリティ・ヘッダの変更

  1. キャンバスで,SOAP 要求ステップ(SOAP を使用した Web サービスの呼び出しステップ)を選択します。

  2. [プロパティ]表示枠で,[イベント]タブを開きます。

  3. [イベント]タブで,AfterProcessRequestSecurity イベントのイベント・ハンドラを作成します。[TestUserCode.cs]ファイルが開きます。

  4. TestUserCode.cs ファイルの TODO セクションで,文字列の置換を実行して,新しいユーザ名資格情報を追加します。
    string s = args.Message.InnerXml.Replace("<wsse:Username>User</wsse:Username>","<wsse:Username>New User</wsse:UserName>");
    args.Message.InnerXml = s;
  5. 文字列置換コードの下にある,ヘッダ XML を変更します。

    XmlDocument xmlDocument = args.Message; 
        XmlNamespaceManager xmlnsManager = new XmlNamespaceManager(xmlDocument.NameTable); 
        xmlnsManager.AddNamespace("wsse", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"); 
        xmlnsManager.AddNamespace("wsu", http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"); 
        xmlDocument.SelectSingleNode("//wsse:Username",xmlnsManager).InnerText = "New Name"; 
        args.Message = xmlDocument;

例:

string s = args.Message.InnerXml.Replace("<wsse:Username>Alex</wsse:Username>","<wsse:Username>John Alex</wsse:UserName>"); 
    		args.Message.InnerXml = s; 
    		
    		XmlDocument xmlDocument = args.Message; 
    		XmlNamespaceManager xmlnsManager = new XmlNamespaceManager(xmlDocument.NameTable); 
    		xmlnsManager.AddNamespace("wsse", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"); 
    		xmlnsManager.AddNamespace("wsu", http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"); 
    		xmlDocument.SelectSingleNode("//wsse:Username",xmlnsManager).InnerText = "New Name"; 
    		args.Message = xmlDocument;
    		                          

先頭に戻る

未加工の SOAP 要求へのアクセスと変更(送信する前)

  1. キャンバスで Web サービスまたは SOAP 要求のステップを選択します。

  2. [プロパティ]表示枠で,[イベント]タブをクリックします。OnConstructRawRequest のイベント・ハンドラを作成します。

  3. TestUserCode.cs ファイルを開いて,TODO セクションでプロパティ値を変更します。

    次の構文を使用します。

    This.StServiceCallActivity<activity #>.RawRequest = @"<期待する要求値>";

先頭に戻る

その他の参照項目: