可以使用空手道使用数据表进行数据库驱动测试吗?



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

类似这样的东西:

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

这将在指定的表中执行插入操作。

有可能用空手道做这样的事情吗?

谢谢。

是的,在DBUTIL文件中需要一个insertRows方法,我从@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.inserrows(插入到sales.motions(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});
}
}

最新更新