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<String> ColumnName){
		HashMap Result=new HashMap()
		def Info=Conn.firstRow(Sql)
		Result=getListDateFromGroovyRowResult(ColumnName,Info)
		return Result
	}
	
		
	//查询到多条数据库记录,选择其中部分字段
	public List<HashMap> getRecordsList(Sql Conn,String Sql,List<String> ColumnName){
		List<HashMap> 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<String> 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<String> ColumnName)和getRecordsList(Sql Conn,String Sql,List<String> ColumnName) 分别为获取单条数据和获取多条数据的方法.入参说明:Conn为数据库连接,Sql为执行的数据库语句,ColumnName为需要抽取的数据字段的名称.若获取的数据为单条数据,则返回的格式为HashMap;若获取的数据为多条数据,则返回的格式为List<HashMap>;其中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<String> 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<String> List=new ArrayList()
List.add("ProductCode")
List.add("ProductName")
//多条记录用到的List
List<String> 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<HashMap> 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<RecordsList.size();i++)
{
	log.info RecordsList[i]
}

//关闭数据库连接
Conn.close()

  

posted on 2012-09-18 23:52  Kiddo_马  阅读(1967)  评论(0编辑  收藏  举报

导航