Как мы можем реализовать тест Cucumber для тестирования базы данных - PullRequest
0 голосов
/ 19 февраля 2019

Я пытаюсь настроить тест Cucumber для тестирования базы данных, поскольку в моем приложении есть некоторые службы отдыха, и мне нужно проверить базу данных, чтобы убедиться, что записи обновлены с правильным значением.

Я использую базу данных Postgres,У меня есть файл функций, перечисленный ниже:

Feature: API Test

Background: Given I am connected with the database

Scenario: I want to test the database connection        
When I run the select query         
Then I should see the result as "Pranjal"

Класс подключения к базе данных выглядит следующим образом:

открытый класс DatabaseConnection {

public DatabaseConnection createConnection() throws Exception {

    try {
        //Connection URL Syntax: "jdbc:postgresql://ipaddress:portnumber/db_name"       
        String dbUrl = "jdbc:postgresql://localhost:5432/test";                 

        //Database User name
        String username = "postgres";   

        //Database Password
        String password = "12345678";

        //Query to Execute      
        String query = "select * from test where no = 1;";

        //Load PostgreSQL JDBC driver       
        Class.forName("org.postgresql.Driver");         

        //Create Connection to DB       
        Connection con = DriverManager.getConnection(dbUrl,username,password);

        //Create Statement Object       
        Statement stmt = con.createStatement();                 

        // Execute the SQL Query. Store results in ResultSet        
        ResultSet rs = stmt.executeQuery(query);                            

        // While Loop to iterate through all data and print results     
        while (rs.next()){
            String myName = rs.getString(1);                                                                                           
            System.out.println(myName);     
        }       

        // closing DB Connection        
        con.close();
    } catch(SQLException e) {
      e.printStackTrace();
    }

    return new DatabaseConnection();            
}

}

У меня есть класс Runner, который будет выполнять мой файл объектов.

Я хочу, чтобы мои шаги выполняли запрос, и соединение с базой данных создается как фоновое условие.

Есть ли способчтобы достичь этого?

1 Ответ

0 голосов
/ 19 февраля 2019

Я могу сделать это путем внесения некоторых изменений в класс подключения к базе данных и использовать методы в моем файле возможностей для проверки подключения к базе данных.

package util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import org.junit.Assert;

public class DatabaseConnection extends DriverFactory {

    ReadConfigFile config = new ReadConfigFile();

    public static String dbUrl;                 
    public static String username;  
    public static String password;
    public static String database_driver;
    Connection con;
    Statement stmt;
    String query;
    ResultSet rs;

    public DatabaseConnection() {
        super();
    }

    public DatabaseConnection createConnection() throws SQLException, ClassNotFoundException {
        con = DriverManager.getConnection(config.getUrl(),config.getUsername(),config.getPassword());
        Class.forName(config.getDatabaseDriver());  
        return new DatabaseConnection();
    }

    public DatabaseConnection createQuery() throws SQLException {
        query = "select * from test where no = 1;";
        stmt = con.createStatement();   
        return new DatabaseConnection();
    }

    public DatabaseConnection executeQuery() throws SQLException {
        rs = stmt.executeQuery(query);
        return new DatabaseConnection();
    }

    public DatabaseConnection assertRecords(String name) throws SQLException {
        while (rs.next()){
            String myName = rs.getString(2);                                                                                           
            Assert.assertEquals(myName,name);
        }
        return new DatabaseConnection();
    }

    public DatabaseConnection closeConnection() throws SQLException {
        con.close();
        return new DatabaseConnection();
    }
}

, а затем использовать методы для реализациишагов.

package stepDefinitions;

import cucumber.api.java.en.Given;
import cucumber.api.java.en.Then;
import cucumber.api.java.en.When;
import util.DatabaseConnection;

public class TransactionGeneratorTest extends DatabaseConnection {

    @Given("^I am connected with the database$")
    public void i_am_connected_with_the_database() throws Throwable {
        createConnection();
    }

    @When("^I run the select query$")
    public void i_run_the_select_query() throws Throwable {
        createQuery();
        executeQuery();
    }   

    @Then("^I should see the result as \"([^\"]*)\"$")
    public void i_should_see_the_result_as(String name) throws Throwable {
        assertRecords(name);
    }
}
...