【问题标题】:It´s possible to do Database driven tests using data tables using Karate? [duplicate]可以使用空手道使用数据表进行数据库驱动测试吗? [复制]
【发布时间】:2020-02-19 20:00:52
【问题描述】:

在使用 Cucumber 编写 API 测试时,我实现了一些步骤定义,允许为每个场景指定数据库中需要存在的数据。

类似这样的:

Given I have database table "users" with data:
 | id | name   |
 | 1  | User 1 |

这将在指定的表中进行插入。

空手道可以做这样的事情吗?

谢谢。

【问题讨论】:

    标签: karate


    【解决方案1】:

    是的,我从@peter 借来的 DBUTIL 文件中需要一个 insertRows 方法

    然后您可以调用方法并从表中传递变量

    Background: 
    * def config = {username: 'XXXX', password: 'XXXXX', url: 'jdbc:oracle:thin:@XXXXX.net:6236/XXXX_XXXXX', driverClassName: 'oracle.jdbc.driver.OracleDriver'}
    * def DbUtil = Java.type('util.DbUtils')
    * def db = new DbUtil(config)
    

    def Value = db.insertrows(INSERT INTO sales.promotions (promotion_name,discount, start_date,expired_date)VALUES(<name>);)*

    下面是DB文件的例子,你需要用maven或者gradle添加依赖

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>5.1.9.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.6</version>
    </dependency>
    <dependency>
        <groupId>com.oracle.jdbc</groupId>
        <artifactId>ojdbc6_g</artifactId>
        <version>12.1.0.2</version>
    </dependency>
    
    
    package util;
    
    import java.util.List;
    import java.util.Map;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.jdbc.core.JdbcTemplate;
    import org.springframework.jdbc.datasource.DriverManagerDataSource;
    
    
    public class DbUtils {
    
        private static final Logger logger = LoggerFactory.getLogger(DbUtils.class); 
    
        private final JdbcTemplate jdbc;
    
        public DbUtils(Map<String, Object> config) {
            String url = (String) config.get("url");
            String username = (String) config.get("username");
            String password = (String) config.get("password");
            String driver = (String) config.get("driverClassName");
            DriverManagerDataSource dataSource = new DriverManagerDataSource();
            dataSource.setDriverClassName(driver);
            dataSource.setUrl(url);
            dataSource.setUsername(username);
            dataSource.setPassword(password);
            jdbc = new JdbcTemplate(dataSource);
            logger.info("init jdbc template: {}", url);
        }
    
        public Object readValue(String query) {
            return jdbc.queryForObject(query, Object.class);
        }    
    
        public Map<String, Object> readRow(String query) {
            return jdbc.queryForMap(query);
        }
    
        public List<Map<String, Object>> readRows(String query) {
            return jdbc.queryForList(query);
        }  
    
        public void insertRows(final String sql){
            jdbc.batchUpdate(new String[]{sql});
            }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2020-10-08
      • 2014-10-20
      • 2012-05-18
      • 1970-01-01
      • 1970-01-01
      • 2010-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多