Можно ли проводить тесты на основе базы данных, используя таблицы данных с использованием каратэ? - PullRequest
3 голосов
/ 19 февраля 2020

При написании моих тестов API с помощью Cucumber я реализовал несколько определений шагов, которые позволяют указывать данные, которые должны существовать в базе данных для каждого сценария.

Примерно так:

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

Это сделает вставку в указанную таблицу.

Можно ли сделать что-то подобное с каратэ?

Спасибо.

1 Ответ

1 голос
/ 19 февраля 2020

Да, вам нужен метод insertRows в вашем файле DBUTIL, который я позаимствовал у @ peter

, затем вы можете вызвать методы и передать переменную из таблицы

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 (имя_пакета, скидка, дата_передачи, дата истечения срока действия)) VALUES (<name>);) *

ниже приведен пример файла БД , вам нужно будет добавить зависимости с 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});
        }

}
...