菜鸟记录之SoapUI,updating

SoapUI(仅个人学习)

转发博客:Groovy脚本汇总

1.批量发请求

第一种:创建teststep添加请求,点击testcase发送所有请求

第二种:使用groovy脚本发送部分请求

list01 = ["case1", "case2", "case3"];
list01.each{
    testRunner.runTestStepByName("$it");
}

2.模拟桩根据请求分发不同响应报文

Dispatch选择script,根据请求体含有指定内容分发不同的响应报文

def requestBody = mockRequest.getRequestContent()
log.info "Request body: " + requestBody

if( requestBody.contains('request1') )
{
    // return the name of the response you want to dispatch
    return "Response 2"
}
else 
{
    return "Response 1"
}

3.数据驱动

第一种:SoapUI Pro收费版有DataSource功能,可以轻松实现数据驱动功能

第二种:使用groovy脚本动态编辑请求报文

第三种:使用groovy脚本读取Excel文件动态编辑请求报文(较复杂,待研究)

第四种:使用groovy脚本动态设置props属性

使用groovy脚本动态编辑请求报文(1)

缺点: 1. 取值需要逐层点出来,操作较繁琐

    2. 修改后的请求报文值会独占一行,可能需要格式化xml才能发送请求

def request = testRunner.testCase.getTestStepByName( "TestStep名称" );
def property = request.getProperty( "request" );
log.info(property.value)
def reqParser = new groovy.util.XmlParser(false,false).parseText(property.value);
// 根据xml结构来逐层点出来,多个相同标签需要用数组下标来选中具体那个标签,最后一个要加[0]
def transactionid = reqParser."soapenv:Body"."uvs:balanceQuery".RequestMessage.MessageHeader.TransactionId[0];
// 读取标签内容
log.info(transactionid.text());
// 设置标签内容
transactionid.setValue = 1;

// 将编辑后的请求报文写入teststep
def writer = new java.io.StringWriter(); 
def printer = new groovy.util.XmlNodePrinter( new PrintWriter( writer ));
printer.print( reqParser );
property.setValue( writer.toString() );
log.info(property.value);
// 发送请求
testRunner.runTestStepByName("请求名");


// 读取标签数组的属性
//aa.each{
//    def attr = $it.attribute();
//}

使用groovy脚本动态编辑请求报文(2)

缺点:xpath取值时可能有点复杂,并且需要声明命名空间

// 获取上下文对象,转化成groovyUtils对象
def groovyUtils = new com.eviware.soapui.support.GroovyUtils( context );
// 将request转化成XmlHolder对象
def holder = groovyUtils.getXmlHolder( "请求名#Request");
// 设置命名空间
holder.namespaces["web"]="http://WebXml.com.cn/";
// 设置节点的值
holder.setNodeValue("//web:getRegionDataset[1]","123");
// 获取节点的值
holder.getNodeValue("//web:getRegionDataset[1]")
// 更新节点
holder.updateProperty();
// 发送请求
testRunner.runTestStepByName("请求名");

// 获取response(1)
def holder = groovyUtils.getXmlHolder( "请求名#Response");
// 获取response(2)
def resp = testRunner.testCase.testSteps["请求名"].getTestRequest().getResponseContentAsXml();
def holder = groovyUtils.getXmlHolder( resp );

使用groovy脚本动态设置props属性

缺点:暂无

// 将模板中的值参数化,从Properties中获取${props#name}
// 动态修改属性值以达到数据驱动的效果
def p = testRunner.testCase.getTestStepByName("props");
p.setPropertyValue("name", "tom");
// def name = p.getPropertyValue("name");
testRunner.runTestStepByName("login");

p.setPropertyValue("name", "jack");
testRunner.runTestStepByName("login");

4.统一参数和url

1.参数包括全局参数、项目参数、测试套件参数、properties

使用:请求报文中右击Get Data选择参数

2.URL可以添加Endpoints,在分配到请求报文中

posted on 2022-08-10 22:18  小尘花鸟  阅读(581)  评论(0)    收藏  举报

导航