包含保存在soapUI项目中的文件中的请求

时间:2014-11-05 22:08:49

标签: soapui test-suite

我有一个包含我的soap请求的目录,我想重用它们来构建测试套件。 我尝试使用ENTITY定义但无法使其正常工作,而使用xi:include作为我想要包含的代码片段似乎是soapUI无法识别它。

我的实际项目具有以下结构:

<con:soapui-project>

    <con:interface >
        <con:endpoints>
            <con:endpoint>http://localhost/GestionePreventiviRemoteImpl/GestionePreventiviService_v1</con:endpoint>
        </con:endpoints>

        <con:operation isOneWay="false" action="" name="aggiornaPreventivo" bindingOperationName="aggiornaPreventivo" >
            <con:settings/>
        </con:operation>

        <con:operation isOneWay="false" action="" name="creaPreventivo" bindingOperationName="creaPreventivo" >
            <con:settings/>
        </con:operation>

        <con:operation isOneWay="false" action="" name="recuperaPreventivo" bindingOperationName="recuperaPreventivo">
            <con:settings/>
        </con:operation>
    </con:interface>

    <con:testSuite name="GestioneServicePortBinding TestSuite">
        <con:testCase name="aggiornaPreventivo TestCase">
            <con:testStep name="aggiornaPreventivo">
                <con:config>
                    <con:interface>GestioneServicePortBinding</con:interface>
                    <con:operation>aggiornaPreventivo</con:operation>
                    <con:request name="aggiornaPreventivo">
                        <con:endpoint>http://localhost/GestionePreventiviRemoteImpl/GestionePreventiviService_v1</con:endpoint>

                        <con:request>
                            <![CDATA[
                            <?xml version="1.0" encoding="UTF-8"?>
                            <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v1="http://simulatore.Prodotto.be.service.bmed.it/v1">
                               <soapenv:Header/>
                               <soapenv:Body>
                                  <v1:aggiornaPreventivo>
                                     <input>
                                        <aggiornaPreventivoDTO>
                                           <codPrev>1001</codPrev>
                                           <codCliente>205</codCliente>
                                           .....
                                        </aggiornaPreventivoDTO>
                                     </input>
                                  </v1:aggiornaPreventivo>
                               </soapenv:Body>
                            </soapenv:Envelope>
                            ]]>
                        </con:request>
                    </con:request>
                </con:config>
            </con:testStep>
        </con:testCase>
    </con:testSuite>

</con:soapui-project>

我需要的是在测试用例中包含请求以处理testsuite之外的输入参数。如下所示:

<con:testStep name="aggiornaPreventivo">
    <con:config>
        <con:interface>GestioneServicePortBinding</con:interface>
        <con:operation>aggiornaPreventivo</con:operation>
        <con:request name="aggiornaPreventivo">
            <con:endpoint>http://localhost/GestionePreventiviRemoteImpl/GestionePreventiviService_v1</con:endpoint>
            <con:request>
                <xi:include href="aggiornaPreventivoRequest.xml" parse="xml" xpointer="title"/>
            </con:request>
        </con:request>
    </con:config>
</con:testStep>

其中aggiornaPreventivoRequest.xml的内容如下:

<v1:aggiornaPreventivo>
    <input>
        <aggiornaPreventivoDTO>
           <codPrev>1001</codPrev>
           <codCliente>205</codCliente>
           .....
        </aggiornaPreventivoDTO>
    </input>
</v1:aggiornaPreventivo>

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我不知道您是否可以在SOAPUI中使用<include>中的http://www.w3.org/2001/XInclude,但是如果您想在请求本身之外控制请求的节点值,则可以使用属性。

您可以在projecttestSuitetestCasetestStep等级上添加属性,以便在您的请求中直接使用它,您必须使用以下表示法取决于您定义属性的级别。来自SOAPUI documentation

  

${#Project#yourProperty} - 引用Project属性(跨特定SoapUI项目的引用属性)

     

${#TestSuite#yourProperty} - 引用包含TestSuite

中的TestSuite属性      

${#TestCase#yourProperty} - 引用包含TestCase

中的TestCase属性      

${TestStep name#yourProperty} - 引用TestStep属性

例如,如果在testSuite上添加属性:

<v1:aggiornaPreventivo>
    <input>
        <aggiornaPreventivoDTO>
           <codPrev>${#TestSuite#codPrevValue}</codPrev>
           <codCliente>${#TestSuite#codClienteValue}</codCliente>
           .....
        </aggiornaPreventivoDTO>
    </input>
</v1:aggiornaPreventivo>

如果您不知道如何为项目添加属性,请查看this

还有另一种可能性,如果您真的对从本地文件发送请求感兴趣,您还可以使用groovy testStep和以下代码从特定文件位置发送请求:

import java.io.IOException;
import java.io.FileInputStream;
import org.apache.http.entity.FileEntity
import org.apache.http.client.HttpClient;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.DefaultedHttpParams;
import org.apache.http.params.HttpParams;

def httpclient = new DefaultHttpClient();
// the directory with your xml requests
def directory = new File("/tmp/myRequests/")
// for each file in the directory
directory.eachFile{ file -> 
    // create the request
    HttpPost post = new HttpPost("http://your_endpoint")
    def reqEntity = new FileEntity(file,"application/xml");
     post.setEntity(reqEntity)
    // make the post and get the response
    def responseHandler = new BasicResponseHandler()
    def responseBody = httpclient.execute(post, responseHandler)
    log.info responseBody
};

希望这有帮助,