Automatiza pruebas QA con Java | Parte 2: Archivos Properties

3 min read
21 de junio de 2023

Continuamos con nuestra serie sobre automatización QA con Java. En esta ocasión aprenderemos sobre el manejo de archivos properties. Si necesitas conocer más sobre el tema te invitamos a consultar la primera parte de este tutorial en la que hablamos sobre utilidades avanzadas.

El manejo de los archivos properties es de vital importancia para asegurar la calidad de nuestra automatización en términos de mantenibilidad, reutilización y código limpio en general. Por lo general en estos archivos establecemos datos de configuración y suelen ir localizados en una carpeta ‘resources’ como se observa en la imagen siguiente.


la imagen indica el botón de configuración de propiedades

Un ejemplo del contenido del mismo se muestra a continuación:


#Documentos de google
SPREADSHEET_ID = 1f-62mR39nFCIuzhstec0vlwtjZv301ioz0QI5rDQQRs
NAME_HOJA= Test
RANGE= A2:A10

#Conexion BD
MYSQL_URL = ${DEV_URL:jdbc:mysql://localhost:3306/arquetipo_serenity?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=America/Bogota}
MYSQL_USER = ${MYSQL_USER:root}
MYSQL_PASSWORD = ${MYSQL_PASSWORD:}


Para dar manejo a estos archivos se recomienda utilizar una clase Java de utilidad la cual llamaremos en este artículo ‘AppProperties’ y otra que llamaremos ‘ConfigFileReader’, con el fin de mantener los principios SOLID la primera se encarga de exponer métodos que dan acceso a los properties y la segunda se encarga de la lectura o escritura del archivo, las cuales se puede localizar en una carpeta ‘utils’. 

La clase ‘ConfigFileReader’ se establece a continuación:

package utils;

import java.io.*;
import java.util.Properties;

public class ConfigFileReader {

    private Properties properties;
    private final String propertyFilePath;

    public ConfigFileReader(String filePath){
        propertyFilePath = filePath;
        try (BufferedReader reader = new BufferedReader(new FileReader(propertyFilePath))) {
            properties = new Properties();
            properties.load(reader);
        } catch (IOException e) {
            throw new RuntimeException("Properties file not found at path : " + propertyFilePath);
        }
    }

    public Properties getProperties() {
        return properties;
    }

    public String getPropertyByKey(String key) {
        String p = properties.getProperty(key);
        if (p != null){
            if (p.contains("${")) {
                String envVarValueInProp= p.substring(p.indexOf("{")+1,p.indexOf(":"));
                String envVarValue = System.getenv(envVarValueInProp);
                if(envVarValue != null){
                    p=envVarValue;
                }else{
                    p= p.substring(p.indexOf(":")+1,p.indexOf("}"));
                }
            }
        return p;
        }else
            throw new RuntimeException("Property not specified in the " + propertyFilePath + " file for the Key: " + key);
    }

    public static void changeProperty(String filename, String key, String value) throws IOException {
        Properties prop =new Properties();
        prop.load(new FileInputStream(filename));
        prop.setProperty(key, value);
        prop.store(new FileOutputStream(filename),null);
    }

    public void setProperties(String filename,String key, String value) throws IOException {
        properties.setProperty(key, value);
        properties.store(new FileOutputStream(filename),null);
    }
}

 

y la clase ‘AppProperties’ se establece por ejemplo para las variables de configuración establecidas anteriormente de la siguiente manera:

package utils;

public class AppProperties {

    private AppProperties(){}

    static ConfigFileReader reader = new ConfigFileReader("src/main/resources/configs/config.properties");

    // Credenciales

    public static String getSpreadSheetId(){ return reader.getPropertyByKey("SPREADSHEET_ID"); }
    public static String getNameHoja(){ return reader.getPropertyByKey("NAME_HOJA"); }
    public static String getRange(){
        return reader.getPropertyByKey("RANGE");
    }

    // Conexión BD
    public static String getMySqlUrl(){
        return  reader.getPropertyByKey("MYSQL_URL");
    }
    public static String getMySqlUser(){ return  reader.getPropertyByKey("MYSQL_USER"); }
    public static String getMySqlPassword(){ return  reader.getPropertyByKey("MYSQL_PASSWORD"); }
   
}


Un ejemplo para el uso de esta utilidad se muestra a continuación con la asignación de constantes leídas de este archivo de configuración.

package utils;

public class UtilConstants {

//    Archivo google sheet
    public static final String SPREADSHEET_ID = AppProperties.getSpreadSheetId();
    public static final String NAME_HOJA = AppProperties.getNameHoja();
    public static final String RANGE = AppProperties.getRange();

//    Conexión BD
    public static final String MYSQL_URL = AppProperties.getMySqlUrl();
    public static final String MYSQL_USER = AppProperties.getMySqlUser();
    public static final String MYSQL_PASSWORD = AppProperties.getMySqlPassword();

}

 

Consulta ya la tercera parte de esta serie de artículos para aprender a integrar la API de Google Sheet en este tipo de pruebas QA. 

También te invitamos a consultar nuestro micrositio de carrera donde encontrarás información importante sobre nuestras vacantes de trabajo y la cultura empresarial que hace que trabajar en Pragma sea una experiencia única.

scrum_metodologia_agil_ebook

 

Suscríbete al
Blog Pragma

Recibirás cada mes nuestra selección de contenido en Transformación digital.

Imagen form