为什么想在接口自动化中做一个万能工具类?
所谓“万能”,我这里无非是将HTTP、MQ、RPC、DB相关的一些操作,做一个集中的分发。因为我想在TestCase中,直接装配进形参,可以在使用的时候,不需要进行重复的初始化。
解决什么问题?
- 类似的TestCase需要重复进行实例化,或从对象池中捞工具类对象
不需要关注是否需要工具类,只需要填写apiGan中的服务信息,可以自动根据服务名称从Apollo获取配置信息,并进行实例化,使用万能工具类中的方法可以找到需要使用的常用工具类。
- 相同的数据库工具类,却被重复实例化。用单例?
很自然想到第一种解决方案是单例,但接口自动化跟服务开发不一样,现在大部分都是分布式架构,某一个服务下最多会操作一个或两个数据库,接口自动化却要面对所有的服务,需要操作很多个不同的数据库。因此单例是行不通的。
- 不同case之间需要连接不同的mysql/Redis/mq/Http,不同case的使用的万能工具类时长是不确定的。
如果框架可以针对不同的服务自动帮我实例化所有的工具类,那就是极好的。
怎么做?
1、每一个TestCase都实例化一个万能工具类对象,每次case结束时进行=null,等待垃圾回收进行销毁
2、内部具体的某一个工具类,使用对象池进行管理。
package com.base.test.tng.tools;
import com.base.test.tng.framework.entity.ApiGan;
/**
* @Description: 万能的工具类,做各类型的分发,支持继承装配
* @Author: Joe Throne
* @CreatedTime: 2022-02-05 15:07
*/
public class OmnipotentTool {
private HttpCenterTool httpCenterTool = null;
private MQCenterTool mqCenterTool = null;
private RPCenterTool rpCenterTool = null;
private DbCenterTool dbCenterTool = null;
public OmnipotentTool(ApiGan apiGan) {
httpCenterTool = new HttpCenterTool(apiGan);
mqCenterTool = new MQCenterTool(apiGan);
rpCenterTool = new RPCenterTool(apiGan);
dbCenterTool = new DbCenterTool(apiGan);
}
public HttpCenterTool sendHTTP(){
return httpCenterTool;
}
public MQCenterTool sendMQ(){
return mqCenterTool;
}
public RPCenterTool sendRPC(){
return rpCenterTool;
}
public DbCenterTool operaDB(){
return dbCenterTool;
}
public void destory(){
httpCenterTool = null;
mqCenterTool = null;
rpCenterTool = null;
dbCenterTool = null;
}
}
如何用?
以下基于HuTool进行的工具类封装