![a067f79833461f9c9e4cfe1cf5aa12c5.png](https://i-blog.csdnimg.cn/blog_migrate/792d12305ae9e1fb65aae8e25573be88.jpeg)
先回顾下前几篇soapui工具操作文章:
在soapui里面使用groovy脚本生成测试报告的方法
在soapui里面用groovy传递cookie身份信息的方法
soapui中进行接口响应数据的关联设置方法
如果想要批量运行测试所需的接口,那么在测试过程中,我们可能会因为提交的数据问题导致测试中断或者失败,那么如何灵活和动态的处理测试请求中的静态数据呢?这里就需要使用各种参数化的方法了。
参数化我分为两个大分类,一类是使用脚本来生成变动的数字、字符串、日期等值,另一类是直接从数据库中读取已有的内容。
第一类,随机数字、随机字符串、当前日期时间的生成。
1. 随机数字:
因为groovy是基于JVM的开发语言,所以可以在groovy脚本中借用java的方法,例如随机整数nextInt(),我们可以在需要参数化的数据位置,将数据替换成${=new Random().nextInt(1000)}来随机0-999的整数
![223f3f1222636429db020317d303c475.png](https://i-blog.csdnimg.cn/blog_migrate/0a9ba10214a70be854dc7c148f70140f.jpeg)
2. 随机字符串:
字符串因为不能直接生成,所以需要借助到groovy scripts脚本工具,
我们先在要测试的接口测试用例中,新建一个groovy scripts,然后给它重命名为randomStr
![d175e715d2cae45cf270a56a7439de92.png](https://i-blog.csdnimg.cn/blog_migrate/ac8bbeab2e14a80ed16bfc1eac678a9a.jpeg)
然后开始编辑groovy脚本:
先设置可能需要的大小写英文和数字,用字符串保存起来
String str="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
然后创建随机
Random random=new Random()
用StringBuffer类来定义可被修改字符串
StringBuffer sb=new StringBuffer()
随机10次,每次随机一个数字,然后用这个随机数字当做下标在字符串中取个字符出来,将取出来的这个单个字符添加到可修改字符串中
for(int i=0;i<=10;i++){
def num = random.nextInt(62)
sb.append(str.charAt(num))
}
最后将值返回出去
return sb.toString()
![214a1d28f1eba580590e9ac7083799c5.png](https://i-blog.csdnimg.cn/blog_migrate/66354e2aba15280dd9afdd7fc831fcc6.jpeg)
每次执行脚本之后,随机的字符串会被返回到这个脚本外的自定义属性中保存起来
![135416d99e603ce293b454e5307c46d2.png](https://i-blog.csdnimg.cn/blog_migrate/ca54331db4ebb0d437347cc6fd851805.jpeg)
最后在脚本中使用${脚本名#result}就可以调用这个返回出来的随机字符串了
![20720ceb745f06ad32939bead8fc0f35.png](https://i-blog.csdnimg.cn/blog_migrate/84be86c5158f1a55bf8db3ff1f5c1e6f.jpeg)
3. 当前时间
我们可以使用${=new Date().time.toString().substring(0,10)}来获取当前时间的毫秒数
![927e1d764750a31a356008546935d597.png](https://i-blog.csdnimg.cn/blog_migrate/37bdd3bb80e5dd4722a0988986b2ae6b.jpeg)
也可以通过${=Calendar.getInstance().get(Calendar.YEAR)+'-'+Calendar.getInstance().get(Calendar.MONTH)+'-'+Calendar.getInstance().get(Calendar.DATE)}来获取当前时间的年月日等信息值
![94ea5bc5a2dc96bfed6987319863e5c7.png](https://i-blog.csdnimg.cn/blog_migrate/4825befccffccb378133c42dee041143.jpeg)
上面三个是最常用的参数化方法,如果想要使用已有的数据来操作,就只能连接数据库了。
首先,我们需要一个连接数据库的jar包,我这里下载的是mysql-connector-java-5.1.48.jar的文件,将这个文件复制到soapui的lib文件夹下面
![e4d825d03e2362d8bbd41d402280f660.png](https://i-blog.csdnimg.cn/blog_migrate/20487946ca940c976046a1fcb46b151b.jpeg)
然后在要测试的接口上面,新增一个groovy脚本,我给它重命名为,connectMysql,编辑这个脚本,写入如下的内容:
![55b7759a6c1a74941308fe1da79b2da6.png](https://i-blog.csdnimg.cn/blog_migrate/b65bd1f8c4ae873ab60d70e677bdf204.jpeg)
用groovy来执行连接数据库和查询数据的操作
先导入数据库连接的模块
import java.sql.*
定义数据库的连接驱动名
def JDBC_DRIVER = "com.mysql.jdbc.Driver"
定义自己的数据库连接地址
def DB_URL = "jdbc:mysql://数据库地址:端口号/库名"
定义自己数据库的用户名和密码
def USER = "你的数据库用户名"
def PASS = "用户名对应的密码"
定义数据库的连接变量
Connection conn = null
定义操作sql语句的对象
Statement stmt = null
连接数据库
Class.forName(JDBC_DRIVER)
conn = DriverManager.getConnection(DB_URL,USER,PASS)
stmt = conn.createStatement()
定义你自己的sql语句
String sql = "select 列 from 表名"
获取查询的所有结果
ResultSet rs = stmt.executeQuery(sql)
查看数据库执行结果的第一行信息
rs.next()
根据查询的列名来获取数据
def id= rs.getString('列名')
最后按顺序关闭结果、查询、连接
rs.close()
stmt.close()
conn.close()
将获取到的值返回出去
return id
![10f11d8ea70562f2119af23a1e41f7b7.png](https://i-blog.csdnimg.cn/blog_migrate/ae80a92ea8d6b12406f12d59e83b618b.jpeg)
执行完这个脚本,你要查询的值会被写入到该脚本的Custom Properties中
![3de10321a70259e9f46eb9deb5613878.png](https://i-blog.csdnimg.cn/blog_migrate/e962891418acf5eb9f54c0870c64552c.jpeg)
最后,在你的接口请求参数位置,使用${脚本名#字段名}就可以引用它了,这样便能随时从数据库中取数据来操作了
![567f968fda75ab776fda75388d4aef31.png](https://i-blog.csdnimg.cn/blog_migrate/de795c2d0631e020c8811ad9e94bcf8a.jpeg)
感谢大家花时间耐心的看完这么长的文档,希望对你们有所帮助。
soapui中数字、字符串、日期时间、数据库连接参数化的设置方法mp.weixin.qq.com![4bd7ed529b7347344da34a08dbd39987.png](https://i-blog.csdnimg.cn/blog_migrate/b00d7bd81305182e6cec658387da58aa.jpeg)