soapui + groovy 接口自动化测试

1.操作excel的groovy脚本

package pub

import jxl.*
import jxl.write.Label
import jxl.write.WritableWorkbook

class ExcelOperation {
	
	def xlsFile
	def workbook
	def writableWorkbook
	
	def ExcelOperation(){}
	//设置xlsFile文件路径
	def ExcelOperation(xlsFile){
		this.xlsFile = xlsFile
	}
	//初始化workbook
	def init(){
		workbook = Workbook.getWorkbook(new File(xlsFile))
		writableWorkbook =  Workbook.createWorkbook(new File(xlsFile ), workbook)
	}
	//关闭workbook流
	def close(){
		writableWorkbook.write()
		writableWorkbook.close()
		workbook.close()
	}
	//获取list环境
	def envlistGet(sheetName, projectName) {
		def list = []
		init()
		list = envlist(workbook, sheetName, projectName)
		close()
		return list
	}
	//获取map环境
	def envmapGet(sheetName, projectName) {
		def map = [:]
		init()
		map = envmap(workbook, sheetName, projectName)
		close()
		return map
	}
	//写入文件
	def cellWriteSet(sheetName, rowName, columnName, content){
		init()
		cellWrite(writableWorkbook, sheetName, rowName, columnName, content)
		close()
	}

	//获取测试环境*
	def envlist(Workbook workbook, sheetName, projectName) {
		def list = []
		Sheet sheet = workbook.getSheet(sheetName)
		Cell[] c1 = sheet.getColumn(0)
		Cell[] c2 = sheet.getColumn(1)
		def end
		c1.each {it ->
			if(it.getContents().contains(projectName)) {
				end = it.row
			}
		}
		for(i in 0..5){
			list[i] = c2[end].getContents()
			end--
		}
		return list
	}
	//获取测试环境
	def envmap(Workbook workbook, sheetName, projectName) {
		def map = [:]
		Sheet sheet = workbook.getSheet(sheetName)
		Cell[] c1 = sheet.getColumn(0)
		Cell[] c2 = sheet.getColumn(1)
		def end
		c1.each {it ->
			if(it.getContents().contains(projectName)){
				end = it.row
			}
		}
		for(i in 0..5) {
			map.put(c1[end].getContents(), c2[end].getContents())
			end--
		}
		return map
	}

	//写入测试结果
	def cellWrite(WritableWorkbook writableWorkbook, sheetName, rowName, columnName, content){

		Sheet sheet = writableWorkbook.getSheet(sheetName)
		if(sheet == null){
			sheet = writableWorkbook.createSheet(sheetName,2)
		}
		Cell[] c1 = sheet.getColumn(0)
		Cell[] c2 = sheet.getRow(0)
		def row, col
		c1.each {it ->
			if(it.getContents().equals(rowName)){
				row = it.row
			}
		}
		c2.each {it ->
			if(it.getContents().equals(columnName)){
				col = it.column
			}
		}
		sheet.addCell(new Label(col, row, content))
	}

}

这是个封装好的调用excel的类,主要看怎么读写excel,其他方面根据个人需要来修改

2.生成MD5的groovy脚本

package pub

import java.security.MessageDigest

class MD5 {
	
def MD5
//空的构造方法
def MD5(){}
//构造方法实现构造返回MD5值	
def MD5(map, pwd) {
	String s = getMapString(map, pwd)
	String b = getMD5(s)
	MD5 = b.toLowerCase()
}
//将map按key排序,并取出value组成字符串
def getMapString(Map map, String pwd) {
	def tm = new TreeMap(map) //按mapkey排序
	StringBuffer sb = new StringBuffer()
	tm.each { key,value ->
		sb.append"$value"
	}
	sb.append(pwd)
	return sb.toString()
  }
//返回传入字符串的MD5值
def getMD5(String source) {
	MessageDigest md5 = MessageDigest.getInstance("MD5")
	md5.update(source.getBytes())  //将字节数组传递给md5
	byte[] digest = md5.digest()   //产生md5序列
	StringBuffer sb = new StringBuffer()
	digest.eachByte {
		sb.append(String.format("%02x", it & 0xff)) //将md5值转为16进制
	}
	return sb.toString()
  }
} 

传入Map和pwd,然后将map按key排序,把map的value连接起来生成md5值返回

3.操作txt文本

package pub

import java.io.File

class Text {
	def writeFile(fileName, context) {
		def file = new File(fileName)
		if(!file.exists()) {
			file.createNewFile()
		}
		file.append(new Date().format('yyyy-MM-dd HH-mm-ss'), 'UTF-8')
		file.append('\n')
		file.append(context, 'UTF-8')
		file.append('\n')
	}
}

4.调用第三方jar包

soapui可以调用第三方jar包/.class/.groovy文件;

打开soapui中lib目录(我的SoapUI-Pro-5.1.2.exe目录为C:\Program Files (x86)\SmartBear\SoapUI-Pro-5.1.2\lib),可以看到这里有很多jar文件。将第三方jar(java.jar/groovy.jar)包放进去,将以上三个脚本打成pub.jar放入,调用方法如下:

在testCase中新建一个Groovy Script,然后输入如下代码:

import pub.Text

def text = new Text()

text.writeFile(“D:\1.log”, “test”)

执行完成后可以看到在d盘下建立了一个1.log文件,并写入test;

5.调用第三方.class文件

将得到的java.jar文件解压得到.class文件,将解压出来的文件夹及.class文件放到${soapui}/bin/scripts(我的SoapUI-Pro-5.1.2.exe目录为C:\Program Files (x86)\SmartBear\SoapUI-Pro-5.1.2\bin\scripts)目录下,调用方法和.groovy文件一致

6.调用第三方.groovy文件

将如上第三个.groovy脚本放在pub文件夹下,拷贝到${soapui}/bin/scripts(我的SoapUI-Pro-5.1.2.exe目录为C:\Program Files (x86)\SmartBear\SoapUI-Pro-5.1.2\bin\scripts)目录下,调用方法如下:

import pub.Text //如果这么写报错则改成import scripts.pub.Text

def text = new Text()

text.writeFile(“D:\1.log”, “test”)

执行完成后可以看到在d盘下建立了一个1.log文件,并写入test;

7.再谈调用第三方jar包!

打开${soapui}/bin/ext(我的SoapUI-Pro-5.1.2.exe目录为C:\Program Files (x86)\SmartBear\SoapUI-Pro-5.1.2\bin\ext)目录有个readme.txt写着一行鸟语,大致意思是这个文件夹是存放外部jar文件的位置;

建议所有的外部文件均放在这个文件夹底下,像.class/.groovy尽量打成jar包放在ext文件夹下;之所以如此建议,是基于如下原因:

1.有些安装的soapui bin目录下并没有scripts文件夹(linux下安装或免费版soapui),当然你要手动去创建的话和安装自动生成并无差别;

2.在Linux下运行外部文件存在于scripts文件夹下的脚本会报错;

3.官方对于ext文件夹的描述为,soapui启动时首先加载外部jar包的地方;

4.groovy脚本打包时要注意,使用eclipse打包时会让我们勾选生成.class文件,不要勾选此选项,就使用原版的.groovy文件(不然运行时会报错);简单来说这个打包就跟你用压缩工具压缩然后改后缀为.jar效果是一样的。

本章到此结束, 下章介绍使用soapui过程中遇到的问题。

最后:下方这份完整的软件测试视频学习教程已经整理上传完成,朋友们如果需要可以自行免费领取 【保证100%免费】

在这里插入图片描述


http://www.niftyadmin.cn/n/63309.html

相关文章

设计模式之工厂模式详解和应用

目录1 工厂模式的历史由来2.简单工厂模式2.1 简单工厂模式定义2.2 简单工厂模式案例2.3 简单工厂模式相关源码2.4 简单工厂模式优缺点3 工厂方法模式3.1 工厂方法模式定义3.2 工厂方法模式案例3.3 工厂方法模式源码3.4 工厂方法模式优缺点4 抽象工厂模式4.1 抽象工厂模式定义4.…

自学软件测试从哪里开始?给还在迷茫的人一条出路

这两天和朋友谈到软件测试的发展,其实软件测试已经在不知不觉中发生了非常大的改变,前几年的软件测试行业还是一个风口,随着不断地转行人员以及毕业的大学生疯狂地涌入软件测试行业,目前软件测试行业“缺口”已经基本饱和。当然&a…

手撸一个动态Feign,实现一个“万能”接口调用

Feign,在微服务框架中,是的服务直接的调用变得很简洁、简单,而不需要再编写Java Http调用其他微服务的接口。 动态feign 对于fegin调用,我们一般的用法:为每个微服务都创建对应的feignclient接口,然后为每…

人工智能为PMO提供支持的4种方式

许多企业已经认识到 PMO (项目管理办公室)和 PPM (项目组合管理)在推动增长、提高组织敏捷性和交付更好的业务成果方面的力量。今天的PMO被期望用更少的钱做更多的事,而且做得更快。 虽然PMO的工作很繁重,…

黑马】后台管理183-

一、添加时间线组件时间线组件在element2.6.0的版本中才可以找到项目中用到的插件早于时间线插件发布的,所以需要用到素材中的,timeline 和timeline-item复制到\code\shop-hou\src\plugins\1,在element.js中导入timeline等组件import Timeline from ./ti…

云计算|OpenStack|社区版OpenStack(实务操作---cloud-init的使用)

前言: 接上一篇文章:https://zskjohn.blog.csdn.net/article/details/128931042 我们可以从官方获取到现成的镜像,例如,从Ubuntu 18.04 LTS (Bionic Beaver) Daily Build [20230210]官方下载的bionic-server-cloudimg-amd64.img…

华为OD机试真题Python实现【最小传递延迟】真题+解题思路+代码(20222023)

🔥系列专栏 华为OD机试(Python)真题目录汇总华为OD机试(JAVA)真题目录汇总华为OD机试(C++)真题目录汇总华为OD机试(JavaScript)真题目录汇总文章目录 🔥系列专栏题目输入输出示例一输入输出说明解题思路核心知识点Python 代码实现代码运行结果

Solon2 开发之插件,三、插件体外扩展机制(E-Spi)

插件体外扩展机制,简称:E-Spi。用于解决 fatjar 模式部署时的扩展需求。比如: 把一些“业务模块”做成插件包放到体外把数据源配置文件放到体外,方便后续修改 其中, .properties 或 .yml 文件都会做为扩展配置加载&a…