操纵 Web Service 或 HTTP/SOAP/CoAP 请求步骤的输入/输出属性

相关项: API 测试

使用代码访问和设置 HTTP/SOAP/CoAP 请求或 Web Service 步骤的属性。

备注: 将事件处理程序代码用于 REST 服务和 WADL 步骤的方式与用于标准 API 测试活动的方式相同。

有关详细信息,请参阅访问和设置步骤输入、输出或检查点属性的值

访问和设置输入属性的属性值

  1. 在画布中,选择“Web Service”、“SOAP 请求”或“发送 CoAP 请求”步骤。

  2. 加载包含请求正文的 XML。

    在“属性”窗格中,打开“XML 正文”选项卡 (SOAP 请求) 或“CoAP”选项卡 (CoAP 请求)。

  3. 单击“加载 XML”按钮,然后导航到请求文件。

  4. 在“属性”窗格中,打开事件选项卡

  5. 在“事件”选项卡中,创建事件处理程序。

返回页首

添加检查点属性值

使用代码在 Web Service 或 SOAP 请求步骤中添加检查点值。动态创建检查点基于的响应时,此方法很有用。

备注: 无法更改在 Web Service 调用中设置的现有检查点的值。

  1. CodeCheckpointEvent 创建事件处理程序,如设置检查点的值中所述。

  2. 在包含启用检查点的代码的行 (args.Checkpoint.RunUICheckpoints = true) 之后,使用以下语法输入检查点值:

    args.Checkpoint.Assert.Equals(<实际值>,<预期值>);

    <实际值><期望值> 参数中,通过步骤的输出信封访问检查点属性。要访问输出参数,请使用如上访问和设置输入属性的属性值中所述的相同语法。但是,必须将 InputEnvelope 更改为 OutputEnvelope,以访问正确的属性。

返回页首

指定 SOAP 错误和 SOAP错误值

通过使用代码,设置 Web Service 调用或 SOAP 请求以预计 SOAP 错误,以及指定预期的错误属性。

  1. 在画布中,选择 Web Service 或 SOAP 请求步骤。

  2. 在“属性”窗格中,打开事件选项卡

  3. 在“事件”选项卡中,创建 AfterGenerateRequest 事件的事件处理程序。将打开 TestUserCode.cs 文件。

  4. TestUserCode.cs 文件的 TODO 部分,使用以下语法指定预期的错误:

    this.<活动>.FaultExpected = true;
  5. 在“事件”选项卡中,创建 CodeCheckpointEvent 事件的事件处理程序。

  6. CodeCheckpointEvent 部分的 TestUserCode.cs 文件的 TODO 部分,使用以下语法指定预期的错误信息:

    string xpath = "<错误属性的路径>"; 
    string actualValue = this.StServiceCallActivity<活动编号>.OutputEnvelope.SelectSingleNode(xpath).InnerText; 
    string expectedValue = "soap:Server"; 
    args.Checkpoint.Assert.Equals(actualValue,expectedValue);

    备注: 对于上面的语法中指定的字符串名称,您可以使用自己的名称。

返回页首

将特定的请求文件分配至测试步骤

  1. 在画布中,选择 Web Service 或 SOAP 请求步骤。

  2. 在“属性”窗格中,打开事件选项卡

  3. 在“事件”选项卡中,创建 AfterGenerateRequest 事件的事件处理程序。将打开 TestUserCode.cs 文件。

  4. TestUserCode.cs 文件的 TODO 部分,使用以下语法指定预期的错误:

    this.<活动>.InputEnvelope.LoadXml(@"<响应文件的路径>");

    备注: 还可以从上一步骤而不是文件中加载响应。在这种情况下,需要从上一步骤而不是 @"<响应文件的路径>"字符串访问 OutputEnvelope。有关从步骤访问输出属性的详细信息,请参见设置检查点的值

返回页首

将特定的请求文件分配至 OnSendRequest 事件中的 Web Service 步骤

  1. 在画布中,选择 Web Service 或 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);

返回页首

设置异步 Web Service 调用属性

  1. 在画布中,选择 Web Service 或 SOAP 请求步骤。

  2. 在“属性”窗格中,打开事件选项卡

  3. 在“事件”选项卡中,创建 AfterGenerateRequest 事件的事件处理程序。将打开 TestUserCode.cs 文件。

  4. TestUserCode.cs 文件的 TODO 部分,使用以下语法指定异步调用:

    <活动名称>.IsAsync = true;
  5. IsAsync 的代码下面,使用以下语法指定侦听 Web Service 或 SOAP 请求响应的端口:

    this.<活动>.ListenOnPort = <端口号>;

返回页首

将输入附件添加到 Web Service 调用

使用代码发送具有 Web Service 调用的附件。这在动态生成附件时非常有用,而测试设计期间无法使用 API 测试 界面添加此附件。

备注: 如果加载的是测试以外的附件,请跳过步骤 5。

  1. 将自定义代码步骤添加到画布。

  2. 在“属性”窗格中,打开输入/输出属性选项卡

  3. 在“输入/输出属性”选项卡中,单击添加,然后选择添加输入参数。在“添加输入参数”对话框中,为该参数指定一个有意义的名称。

  4. 将该参数链接到所需的附件。有关详细信息,请参阅将数据分配给 API 测试/组件步骤

  5. 在画布中,选择 Web Service 或 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<activity #>.InputAttachments = new XmlDocument(); 
    this.StServiceCallActivity<activity #>.InputAttachments.LoadXml(attachmentsInfo);

    必须在代码添加附件之前定义附件属性,如代码的 @<InputAttachments 中所示。然后,这些属性将针对“属性”窗格的“附件”选项卡中的测试步骤显示。有关附件所需的属性值的详细信息,请参见附件选项卡(属性窗格 —— API 测试)

    备注: 可以使用如上所示的语法 (介于 <Attachments></Attachments> 标记之间) 在 <InputAttachments> 开始标记和闭 </InputAttachments> 结束标记之间定义多个附件。

  9. 可选 —— 可以使用以下语法替代已在“属性”窗格的“附件”选项卡中定义的附件:

    string <字符串名称> = "<附件选项卡中所定义附件的完全限定的 XPath>"; 
    this.StServiceCallActivity<活动编号>.InputAttachments.SelectSingleNode(<字符串名称>).InnerText = @"<文件的路径>";
    

    备注: 此操作不会更新附件的属性,只会覆盖附件文件。

返回页首

从 Web Service 调用响应访问附件

默认情况下,UFT One 将 Web 服务器响应中的附件保存到测试文件夹内包含的运行结果文件夹中。但是,也可以使用事件处理程序访问这些附件:

  1. 在画布中,选择要为其保存 Web Service 调用的 Web Service 或 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 Service 响应返回)完整路径的数组。

返回页首

为 Web Service 调用添加 HTTP 标头

编辑 Web Service 调用或 SOAP 请求步骤时,可以使用事件添加 HTTP 标头。测试运行期间动态创建此信息的源时,这将很有用。

  1. 在画布中,选择 Web Service 或 SOAP 请求步骤。

  2. 在“属性”窗格中,打开事件选项卡

  3. 在“事件”选项卡中,创建 BeforeApplyProtocolSettings 事件的事件处理程序。将打开 TestUserCode.cs 文件。

  4. TestUserCode.cs 文件的 TODO 部分,使用以下语法添加标头元素:

    this.StServiceCallActivity4.HttpRequestHeaders.Add("<标头键>", "<键值>");
    

备注: 也可以通过在“属性”窗格的“输入/检查点”选项卡中展开 RequestHeader 节点来设置 HTTP 标头值。然后,从名称行链接至数据源。有关详细信息,请参阅选择链接源对话框 (API 测试)

如果使用事件处理程序中的代码来修改标头,它将在测试运行期间替代“属性”窗格中的值。

返回页首

REST 服务调用的 HTTP 标头

要将 HTTP 标头动态添加到 REST 服务或 REST 服务的内部 HTTP 请求步骤(当使用在 UFT One 11.51 或较早版本或者 Service Test 11.51 或较早版本中创建的 API 测试时):

  1. 在画布中,选择 REST 方法步骤。

  2. 在“属性”窗格中,打开事件选项卡

  3. 在“事件”选项卡中,创建 BeforeExecuteStepEvent 事件的事件处理程序。将打开 TestUserCode.cs 文件。

  4. TestUserCode.cs 文件的 TODO 部分,为数组分配必需的长度:

    (args.Activity as HTTPActivity).RequestHeaders = 

    new HP.ST.Shared.Utilities.Pair<string, string>[<标题编号>];
    (args.Activity as HTTPActivity).RequestHeaders = new HP.ST.Shared.Utilities.Pair<string, string>[2];
  5. 在分配代码下,为每个数组元素提供 <标题名称> 和 <标题值>:

     (args.Activity as HTTPActivity).RequestHeaders[0] = new HP.ST.Shared.Utilities.Pair<string, string>("<标题名称>", "<标题值>")
    

    备注: 将需要为每个标头提供分配语句中指定的单独行。

返回页首

修改运行时中的 SOAP请求安全标头

  1. 在画布中选择 SOAP 请求步骤(或使用 SOAP 的 Web Service 调用步骤)。

  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;

返回页首

发送之前访问并修改 SOAP 原始请求

  1. 在画布中,选择“Web Service”或“SOAP 请求”步骤。

  2. 在“属性”窗格中,选择“事件”选项卡。为 OnConstructRawRequest 事件创建事件处理程序。

  3. TestUserCode.cs 文件打开时,修改 TODO 部分中的属性值。

    使用以下语法:

    This.StServiceCallActivity<活动编号>.RawRequest = @"<预期请求值>";

返回页首

另请参见: