我有一个包含我的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>
感谢您的帮助!
答案 0 :(得分:0)
我不知道您是否可以在SOAPUI中使用<include>
中的http://www.w3.org/2001/XInclude
,但是如果您想在请求本身之外控制请求的节点值,则可以使用属性。
您可以在project
,testSuite
,testCase
,testStep
等级上添加属性,以便在您的请求中直接使用它,您必须使用以下表示法取决于您定义属性的级别。来自SOAPUI documentation:
${#Project#yourProperty}
- 引用Project属性(跨特定SoapUI项目的引用属性)中的TestSuite属性
${#TestSuite#yourProperty}
- 引用包含TestSuite中的TestCase属性
${#TestCase#yourProperty}
- 引用包含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
};
希望这有帮助,