soapui mysql组件_SoapUI抽取数据库数据

经过前段时间调用第三方Jar,Groovy文件的实践,突然觉得SoapUI的使用范围扩大了很多.因为很多的TestStep,SoapUI本身软件做不了的话,可以交给第三方文件来完成,这样,SoapUI中的脚本只是调用方,从架构上和易用性上会好看很多,同时也方便测试人员对自己脚本的管理和控制.好了,废话不多说,上这次的主题.

在测试WebService的过程中,测试的标准就是预期值(expectedData)和实际值(actualData)进行的对比.预期值可以根据SaopRequest中得到,实际值大多数都是落地到数据库,需要我们从数据库中把需要对比的数据抽取出来,保存为一定的格式,来进行比较.抽取数据库数据的类源代码如下:

package com.shengpay.qa.db;

import java.util.ArrayList;

import java.util.List;

import groovy.sql.GroovyRowResult

import groovy.sql.Sql;

class CollectActualDateFromDB

{

//查询到一条数据库记录,选择其中部分的字段

//其实这个函数可以不用,只是为了简单提取单条数据库记录

public HashMap getRecordHashMap(Sql Conn,String Sql,List ColumnName){

HashMap Result=new HashMap()

def Info=Conn.firstRow(Sql)

Result=getListDateFromGroovyRowResult(ColumnName,Info)

return Result

}

//查询到多条数据库记录,选择其中部分字段

public List getRecordsList(Sql Conn,String Sql,List ColumnName){

List Result=new ArrayList()

def Info=Conn.rows(Sql)

Iterator it=Info.iterator()

while(it.hasNext())

{

Result.add(getListDateFromGroovyRowResult(ColumnName,it.next()))

}

return Result

}

//输入List和GroovyRowResult,返回Entry.map中K在List中的KV映射形成的新HashMap

private HashMap getListDateFromGroovyRowResult(List List,GroovyRowResult GroovyRowResult){

HashMap Result=new HashMap()

Iterator it=GroovyRowResult.keySet().iterator()

while(it.hasNext()){

def TempKey=it.next()

if(List.contains(TempKey))

{

Result.put(TempKey,GroovyRowResult.get(TempKey))

}

}

return Result

}

public static Sql getDBConnnection(String DBSort,String Ip,String Port,String DatabaseName,String Sid,String User,String Password){

def sort=DBSort.toUpperCase()

switch (sort) {

case "SQLSERVER":

return Sql.newInstance(url:"jdbc:sqlserver://"+Ip+":"+Port+";databaseName="+DatabaseName,user:User,password:Password,driverClassName:"com.microsoft.sqlserver.jdbc.SQLServerDriver")

case "ORACLE":

return Sql.newInstance("jdbc:inetpool:inetora:"+Ip+"?database="+DatabaseName+"&sid="+Sid,User,Password,"com.inet.pool.PoolDriver")

case "MYSQL":

return Sql.newInstance("jdbc:mysql://"+Ip+":"+Port+"/"+DatabaseName,User,Password,"com.mysql.jdbc.Driver")

default:

return null

}

}

}

方法说明:

getRecordHashMap(Sql Conn,String Sql,List ColumnName)和getRecordsList(Sql Conn,String Sql,List ColumnName) 分别为获取单条数据和获取多条数据的方法.入参说明:Conn为数据库连接,Sql为执行的数据库语句,ColumnName为需要抽取的数据字段的名称.若获取的数据为单条数据,则返回的格式为HashMap;若获取的数据为多条数据,则返回的格式为List;其中K为数据库表字段名,V为该字段的值.

getDBConnnection(String DBSort,String Ip,String Port,String DatabaseName,String Sid,String User,String Password) 为静态函数,为获取数据库连接的方法.入参说明:DBSort为数据库类型,Ip为数据库的IP地址,Port为端口号,DatabaseName为库名或者Schema名,Sid为Oracle的Sid(如果不为Oracel,则填写Null),User为用户名,Password为密码.返回的类型为Groovy.sql.Sql

调用方法:

1.抽取数据(Oracle).调用文件代码如下:

import groovy.sql.Sql

import com.shengpay.qa.db.CollectActualDateFromDB

CollectActualDateFromDB cd=new CollectActualDateFromDB()

List Lists=new ArrayList()

Lists.add("MEMBER_ID")

Lists.add("LOGIN_NAME")

def Conn=CollectActualDateFromDB.getDBConnnection("oracle","127.0.0.1",null,"databaseName","SID","test","password")

def SqlStatement="SELECT * FROM memberuser.tr_login_name WHERE login_name='loginName'"

HashMap Record=new HashMap()

Record=cd.getRecordHashMap(Conn,SqlStatement,Lists)

log.info Record

Conn.close()

2.抽取数据(Sqlserver).调用代码如下:

import groovy.sql.Sql

import com.shengpay.qa.db.CollectActualDateFromDB

//定义获取数据库的实例

CollectActualDateFromDB cd=new CollectActualDateFromDB()

//定义一个List,List里面包含需要的数据库字段

//单条记录用到的List

List List=new ArrayList()

List.add("ProductCode")

List.add("ProductName")

//多条记录用到的List

List Lists=new ArrayList()

Lists.add("MerchantID")

Lists.add("MerchantName")

//定义数据库连接串.

def Conn=CollectActualDateFromDB.getDBConnnection("sqlserver","127.0.0.1","14433","MERCHANTS",null,"test","password")

//定义需要查询的SQL语句

def SqlStatement="select * from ProductCode where productCode='10000003'"//产生一条记录

def SqlStatements="select * from merchants where MerchantName='商户名字'"//产生多条记录

//定义返回结果的变量,单个就是HashMap,多个就是List

HashMap Record=new HashMap()

List RecordsList=new ArrayList()

//开始执行取值操作

Record=cd.getRecordHashMap(Conn,SqlStatement,List)

RecordsList=cd.getRecordsList(Conn,SqlStatements,Lists)

//显示结果

log.info Record

log.info "=============================================================================="

for(int i=0;i

{

log.info RecordsList[i]

}

//关闭数据库连接

Conn.close()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值