时间:2021-07-01 10:21:17 帮助过:18人阅读
?编写全流程接口测试用例时,有时候需要进行一些数据操作,用于校验系统落地数据的准确性。
private JdbcTemplate jdbcTemplate;
public DBFixture(String info,String account) {
logger.debug("db info: {}",info);
logger.debug("db account: {}",account);
DBInfo dbInfo=GsonUtil.parseJsonWithGson(info,DBInfo.class);
DBAccount dbAccount = GsonUtil.parseJsonWithGson(account,DBAccount.class);
String type=dbInfo.getType();
String hostName=dbInfo.getHostName();
String port=dbInfo.getPort();
String instance=dbInfo.getInstance();
String userName=dbAccount.getUserName();
String passWord=dbAccount.getPassWord();
logger.info("type: {} , hostName: {} , port: {} , instance: {} , userName: {} ,passWord: {}",
type, hostName, port, instance, userName, passWord);
initialDB(type, hostName, port, instance, userName, passWord);
}
private void initialDB(String type, String hostName, String port, String instance, String userName, String passWord) {
String key = type + hostName + port + instance + userName + passWord;
if (DBContext.getInstance().jdbcTemplateMap.containsKey(key)) {//判断jdbcTemplate在上下文中是否已经存在,如果存在就获取从上下文中获取,如果不存在就新建并保存到上下文中
logger.info("DB initial: {} exists in cache", key);
jdbcTemplate = DBContext.getInstance().jdbcTemplateMap.get(key);
} else {
logger.info("DB initial: type: {} , hostName: {} , port: {} , instance: {} , userName: {} ,passWord: {}",
type, hostName, port, instance, userName, passWord);
jdbcTemplate = new DBinit(type, hostName, port, instance, userName, passWord).getJdbcTemplate();
DBContext.getInstance().jdbcTemplateMap.put(key, jdbcTemplate);
logger.info("DB initial: put {} into cache", key);
}
}
public class DBContext {
public Map<String,JdbcTemplate> jdbcTemplateMap;
private DBContext() {
}
private static volatile DBContext dc = null;
public static DBContext getInstance() {
synchronized (DBContext.class) {
if (dc == null) {
dc = new DBContext();
dc.jdbcTemplateMap=new HashMap<String,JdbcTemplate>();
}
}
return dc;
}
}
package own.slim.db.initial;
import com.alibaba.druid.pool.DruidDataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.jdbc.core.JdbcTemplate;
public class DBinit {
private final static Logger logger = LoggerFactory.getLogger(DBinit.class);
private DruidDataSource druidDataSource;
private JdbcTemplate jdbcTemplate;
private String driverClassName = null;
private String hostName = null;
private String userName = null;
private String passWord = null;
private String url = null;
private String instance = null;
private String type = null;
private String port;
public DBinit(String type, String hostName, String port, String instance, String userName, String passWord) {
this.type = type;
this.hostName = hostName;
this.port = port;
this.instance = instance;
this.userName = userName;
this.passWord = passWord;
switch (this.type.trim().toLowerCase()) {
case "mysql":
this.driverClassName = Driver.MYSQL.getDriverClassName();
this.url = Driver.MYSQL.getUrlTemplate().replace(Driver.MYSQL.getReplaceContent(), this.hostName + ":" + this.port + "/" + this.instance);
break;
//"oracle":可以扩展oracle的分支
}
setJdbcTemplate();
}
private void setJdbcTemplate() {
this.druidDataSource = new DruidDataSource();
druidDataSource.setDriverClassName(this.driverClassName);
druidDataSource.setUrl(this.url);
druidDataSource.setUsername(this.userName);
druidDataSource.setPassword(this.passWord);
druidDataSource.setMaxActive(10);
druidDataSource.setInitialSize(3);
// 创建JDBC模板
this.jdbcTemplate = new JdbcTemplate();
jdbcTemplate.setDataSource(this.druidDataSource);
}
public JdbcTemplate getJdbcTemplate() {
return this.jdbcTemplate;
}
}
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import own.slim.db.DBFixture;
import java.util.List;
import java.util.Map;
public class DBUtil {
private final static Logger logger = LoggerFactory.getLogger(DBUtil.class);
private JdbcTemplate jdbcTemplate;
public DBUtil(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public String add(String sql) {
String result = null;
int i = 0;
if (sql.toLowerCase().contains("insert")) {
i = this.jdbcTemplate.update(sql);
if (i > 0) {
result = "Successfully";
} else {
result = "Failed";
}
} else {
result = "It should be an insert statement";
}
logger.info("statement: {} ,Affected rows: {} , result: {} ", sql, i, result);
return result;
}
public String update(String sql) {
String result = null;
int i = 0;
if (sql.toLowerCase().contains("update")) {
i = this.jdbcTemplate.update(sql);
if (i > 0) {
result = "Successfully";
} else {
result = "Failed";
}
} else {
result = "It should be an update statement";
}
logger.info("statement: {} ,Affected rows: {} , result: {} ", sql, i, result);
return result;
}
public String del(String sql) {
String result = null;
int i = 0;
if (sql.toLowerCase().contains("delete")) {
i = this.jdbcTemplate.update(sql);
if (i > 0) {
result = "Successfully";
} else {
result = "Failed";
}
} else {
result = "It should be an delete statement";
}
logger.info("statement: {} ,Affected rows: {} , result: {} ", sql, i, result);
return result;
}
public String queryCount(String sql) throws EmptyResultDataAccessException {
String result = null;
int i = 0;
if (sql.toLowerCase().contains("select") && sql.toLowerCase().contains("count")) {
i = this.jdbcTemplate.queryForObject(sql, Integer.class);
result = String.valueOf(i);
} else {
result = "It should be an select count statement";
}
logger.info("statement: {} , result: {} ", sql, result);
return result;
}
public String queryMapToString(String sql) throws EmptyResultDataAccessException {
String result = null;
Map<String, Object> map;
if (sql.toLowerCase().contains("select")) {
map = this.jdbcTemplate.queryForMap(sql);
if (null != map) {
result = GsonUtil.toJsonWithGson(map);
} else {
result = "the result is null";
}
} else {
result = "It should be an select statement";
}
logger.info("statement: {} , result: {} ", sql, result);
return result;
}
public Map<String, Object> queryMap(String sql) {
Map<String, Object> map = null;
if (sql.toLowerCase().contains("select")) {
map = this.jdbcTemplate.queryForMap(sql);
}
logger.info("statement: {} , result: {} ", sql, map.toString());
return map;
}
public String queryListToString(String sql) throws EmptyResultDataAccessException {
String result = null;
List<Map<String, Object>> list;
if (sql.toLowerCase().contains("select")) {
list = this.jdbcTemplate.queryForList(sql);
if (null != list) {
result = GsonUtil.toJsonWithGson(list);
} else {
result = "the result is null";
}
} else {
result = "It should be an select statement";
}
logger.info("statement: {} , result: {} ", sql, result);
return result;
}
public List<Map<String, Object>> queryList(String sql) throws EmptyResultDataAccessException {
List<Map<String, Object>> list = null;
if (sql.toLowerCase().contains("select")) {
list = this.jdbcTemplate.queryForList(sql);
}
logger.info("statement: {} , result: {} ", sql, list.toString());
return list;
}
}
public String queryOneRecordForJson(String sql) {
logger.debug("sql:{}", sql);
String result = null;
DBUtil dbUtil = new DBUtil(this.jdbcTemplate);
try{
result = dbUtil.queryMapToString(sql);
}catch (EmptyResultDataAccessException e) {
logger.debug("EmptyResultDataAccessException:{}", e);
result = "the result is null";
}
return result;
}
|import |
|own.slim.db |
|script|DBFixture |!-{"type": "mysql","hostName": "test-mysql-72.hbfintech.com","port": "3306","instance": "loan_test"}-!|!-{"userName": "loan_test","passWord": "loan_test123"}-!|
|$info=|queryOneRecordForJson;|SELECT credit_status,fk_credit_status,debit_credit_status,credit_no FROM `loan_credit_info` where usr_id_no=‘320412195012314651‘ |
?实际用例编写过程中,还会使用到新增、更新、删除等操作。通过循环查询目标数据的变化,还可以实现两个接口之间的等待方法。
基于Fitnesse的接口自动化测试-关键字设计-样例-mysql操作
标签:active == iba sele 需要 slf4j vol etl username