FitNesse:如何正确配置 XmlHttpTest 以读取 Web 服务结果

FitNesse: How to correctly configure XmlHttpTest to read web service results

我一直在尝试在 FitNesse 中配置 XmlHttpTest 以创建基本的 SOAP Web 服务测试。

我似乎不太确定测试所需的 syntax/config。

我的测试页面是这样的:

!path fixtures
!path fixtures/*.jar

!define slim.port {0}
!define TEST_SYSTEM {slim}

!define URL {http://localhost:55088/GetEmployee.asmx}

!define POST_BODY_4 { {{{
<s11:Envelope xmlns:s11="http://schemas.xmlsoap.org/soap/envelope/">
  <s11:Body>
    <ns1:GetEmployees xmlns:ns1="http://someorg.co.uk/">
    </ns1:GetEmployees>
  </s11:Body>
</s11:Envelope>
}}} }

|Import|
|nl.hsac.fitnesse.fixture|
|nl.hsac.fitnesse.fixture.slim|

|script|xml http test|

|table template |send request                                  |
|post           |${POST_BODY_4} |to           |${URL}          |
|check          |response status|200                           |
|show           |response                                      |
|$Name=         |xPath          |//Employee[1]/FirstName/text()|

|send request|
|Name?       |
|Fred        |

web服务方法returns如下(可见于show response):

<?xml version="1.0" encoding="UTF-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <soap:Body>
        <GetEmployeesResponse xmlns="http://someorg.co.uk/">
            <GetEmployeesResult>
                <Employee>
                    <FirstName>Fred</FirstName>
                    <LastName>Bloggs</LastName>
                    <id>123</id>
                    <FacilityName>London</FacilityName>
                </Employee>
            </GetEmployeesResult>
        </GetEmployeesResponse>
    </soap:Body>
</soap:Envelope>

我的测试失败(null 是实际结果)。我想我弄错了 xPath 部分,但我不确定为什么。没有命名空间前缀所以我想我不需要使用 register prefix.

您确实需要为 http://someorg.co.uk/ 命名空间,事实上响应使用它作为下面所有元素的默认值 GetEmployeesResponse 并不会改变它存在的事实。

假设您为“http://someorg.co.uk/”注册了一个 'a' 命名空间,您的 xPath 变为://a:Employee[1]/a:FirstName/text()(并且由于只有一名员工,没有其他 children FirstName,你也可以写//a:Employee/a:FirstName