zoukankan      html  css  js  c++  java
  • 基于Fitnesse的接口自动化测试-关键字设计-样例-mysql操作

    需求

     编写全流程接口测试用例时,有时候需要进行一些数据操作,用于校验系统落地数据的准确性。

    实现

    1.编写构造函数和成员变量

      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);
            }
        }
    

    2.上下文单例对象

    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;
        }
    }
    

    3.初始化 jdbcTemplate

    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;
        }
    }
    
    

    4.DB工具类

    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;
        }
    
    }
    
    

    5.实现方法(关键字)-以查询为例

     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;
        }
    

    使用

    1.引入类对应package

    |import        |
    |own.slim.db      |
    

    2.编写脚本

    |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'                               |
    

    3.测试

    mysql

    总结

     实际用例编写过程中,还会使用到新增、更新、删除等操作。通过循环查询目标数据的变化,还可以实现两个接口之间的等待方法。

  • 相关阅读:
    替代传统C/S和B/S技术的下一代客户/服务器编程技术
    理想的编程语言
    nginx进程模型
    Sybase 7.0 中文乱码问题
    netfilter 链接跟踪机制与NAT原理
    TraTraffic Server 进程模型
    nginx并发模型与traffic_server并发模型简单比较
    vs/nat原理分析
    ORACLE 查询表信息
    in 跟exists的区别
  • 原文地址:https://www.cnblogs.com/moonpool/p/13516071.html
Copyright © 2011-2022 走看看