接口测试-soapui-根据excle数据自动生成xml请求
2019-07-20 本文已影响0人
freedom_smile
背景:
测试一个通道所有的支付方式,一个支付方式一个接口
要求:
- 测试一个通道所有的支付方式
- 每个支付方式的部分参数一样,部分参数不一样
- 接口请求的格式为xml请求
- 每个接口请求有些参数要求全局唯一
分析如下:
- 用 excle准备好所有支付方式请求参数的字段集及参数值
- 用Soapui的DataSource获取所有excle里面的参数值
- 用 Groovy Script创建处理数据生成支付接口请求信息的脚本,将生成的请求信息存在testCase的某个属性中
- 用 http请求创建接口请求,请求内容为testCase的某个属性的值
- 用 DataSink保存需要的一些信息
- 用 DataSource Loop创建循环
本次重点是以上3、4点:
- 每个支付接口的请求信息是不一样的,excle里面包含所有接口需要的字段值,根据excle的字段是否有值,去生成只有字段有值的参数形成xml请求
groovy脚本如下
// 准备请求参数样例
def zf_head = [
'merchant_no':'C',
'version': '1.0',
'pay': 'p',
'out_no':'o'
]
def body =[
'mId':"",
'pId':"p"
]
//调用生成xml的方法
def reqXml = CreateRequest.createXmlReq(zf_head,body)
//打印输出
log.info(reqXml)
//将创建的信息存在testCase的reqXml属性中 供后续使用
testRunner.testCase.setPropertyValue("reqXml",reqXml)
//创建xml请求
static def createXmlReq(def head,def body) {
//过滤body里面的空值项
def bodyFilter = filteMap(body)
def reqXml = new StringWriter()
def xml = new MarkupBuilder(reqXml)
xml.mkp.xmlDeclaration(version:"1.0",encoding:"utf-8")
xml.p_request(){
xml.zf_head(){
head.each{ k,v ->
"${k}"("${v}")
}
}
bodyFilter.each{ k,v ->
"${k}"("${v}")
}
}
return reqXml.toString()
}
//过滤map里面值为空的值
static filteMap(args) {
def filter_map = [:]
args.each{ it ->
if(it.value != ""){
filter_map.put(it.key,it.value)
}
}
return filter_map
}
成功生成xml信息:
<?xml version='1.0' encoding='utf-8'?>
<p_request>
<zf_head>
<merchant_no>C</merchant_no>
<version>1.0</version>
<pay>p</pay>
<out_no>o</out_no>
</zf_head>
<pId>p</pId>
<p_request>
达到目的,其他功能在其他文章中体现