Skip to content

Commit

Permalink
Refactor selenium url configuration
Browse files Browse the repository at this point in the history
  • Loading branch information
javiertuya committed Sep 29, 2024
1 parent 38d117b commit 5feabb9
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 19 deletions.
19 changes: 11 additions & 8 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,12 @@ jobs:
#Para usar vnc hay que especificar una version, p.e. selenoid/vnc:chrome_95.0
- name: Selenoid configuration
run: |
echo "remote.web.driver.url=http://127.0.0.1:4444/wd/hub" > samples-test-spring.properties
echo "application.url=http://`(hostname -i)`" >> samples-test-spring.properties
echo "remote.web.driver.url=http://127.0.0.1:4444/wd/hub" > src/test/resources/selenium.properties
echo "application.url=http://`(hostname -i)`" >> src/test/resources/selenium.properties
echo "application.port=" >> src/test/resources/selenium.properties
mkdir -p target/browsers
echo '{"chrome": {"default": "latest", "versions": {"latest": {"image":"selenoid/chrome:latest","port":"4444","tmpfs": {"/tmp":"size=512m"} } } } }' > target/browsers/browsers.json
echo "*** Selenium properties:" && cat src/test/resources/selenium.properties
- name: Selenoid startup
run: |
mkdir -p target/site/video
Expand Down Expand Up @@ -226,9 +228,10 @@ jobs:
#La configuracion para este test se hace con chrome headless contra la aplicacion desplegada
- name: Test configuration
run: |
echo "remote.web.driver.url=headless" > samples-test-spring.properties
echo "application.url=https://${{ env.APP_NAME }}.azurewebsites.net" >> samples-test-spring.properties
cat samples-test-spring.properties
echo "remote.web.driver.url=headless" > src/test/resources/selenium.properties
echo "application.url=https://${{ env.APP_NAME }}.azurewebsites.net" >> src/test/resources/selenium.properties
echo "application.port=" >> src/test/resources/selenium.properties
echo "*** Selenium properties:" && cat src/test/resources/selenium.properties
#Ejecuta maven para los test test de sistema
- name: Build and test
run: mvn test -Dtest=**/st/** -Dmaven.test.failure.ignore=false -U --no-transfer-progress
Expand Down Expand Up @@ -301,9 +304,9 @@ jobs:
#La configuracion para este test se hace con chrome headless contra la aplicacion desplegada
- name: Test configuration
run: |
echo "remote.web.driver.url=headless" > samples-test-spring.properties
echo "application.url=https://${{ env.APP_NAME }}.herokuapp.com" >> samples-test-spring.properties
cat samples-test-spring.properties
echo "remote.web.driver.url=headless" > src/test/resources/selenium.properties
echo "application.url=https://${{ env.APP_NAME }}.herokuapp.com" >> src/test/resources/selenium.properties
echo "*** Selenium properties:" && cat src/test/resources/selenium.properties
#Ejecuta maven solo para este test, controlando los fallos
#ojo, al especificar un unico test, maven lo ejecuta en la fase test aunque este en it!!!
- name: Build and test
Expand Down
10 changes: 7 additions & 3 deletions src/test/java/giis/demo/descuento/it/SeleniumUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ public class SeleniumUtil {
private static final Logger log = LoggerFactory.getLogger("giis.demo.descuento.it.SeleniumUtil");
//Archivo de configuracion para las pruebas web, si no existe, las propiedades tomaran valores por defecto
//(driver chrome local y aplicacion en localhost, el puerto lo establece spring)
private static final String SELENIUM_PROPERTIES = "samples-test-spring.properties";
private static final String SELENIUM_PROPERTIES = "src/test/resources/selenium.properties";
/**
* Instancia un WebDriver para el navegador usado en estos tests (Chrome).
* WebDriver es un interface que debe instanciarse con el driver correspondiente al navegador a utilizar,
Expand Down Expand Up @@ -97,10 +97,14 @@ public static String getRemoteWebDriverProperty() {
/**
* Obtiene la url a probar a partir de la especificada en la configuracion y el puerto indicado como parametro,
* si no existe el fichero de propiedades, utiliza localhost como valor por defecto
* Anyade el valor del puerto si este es mayor que cero
* Si el valor del puerto indicado en el parametro mayor que cero, usa este valor independientemente del
* que se haya configurado en el fichero de propiedades
*/
public static String getApplicationUrl(int port) {
String url=getProperty(SELENIUM_PROPERTIES, "application.url", "http://localhost") + (port>0 ? ":" + port : "");
String host = getProperty(SELENIUM_PROPERTIES, "application.url", "http://localhost");
String portstr = getProperty(SELENIUM_PROPERTIES, "application.port", "");
portstr = port>0 ? String.valueOf(port) : portstr; // override env specified set by parameter
String url = host + ("".equals(portstr) ? "" : ":" + portstr);
log.info("Application url: " + url);
return url;
}
Expand Down
15 changes: 7 additions & 8 deletions src/test/java/giis/demo/descuento/st/TestPostDeploySelenium.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,20 +10,19 @@
import giis.demo.descuento.it.SeleniumUtil;

/**
* Solamente comprueba el acceso a los elementos basicos de la aplicacion
* (fuera del entorno de Spring Boot).
* Solo se ejecutara tras el despliegue de la aplicacion y en el entorno CI (GitHub Actions).
* Prueba web de Selenium fuera del entorno de Spring Boot.
*
* Solamente comprueba el acceso a los elementos basicos de la aplicacion,
* ya que esta pensado para ejecutarse
* sobre la aplicacion desplegada en Azure desde el entorno CI (GitHub Actions).
* Para probar en local, lanzar el servidor desde src/main/java
*/
public class TestPostDeploySelenium {
private WebDriver driver;

@Test
public void testPostDeploySmoke() {
//Si la url (configurada en el .properties si existe) es de una aplicacion desplegada en Heroku o Azure
//se trata del test post deploy, si no, salta este test
String url=SeleniumUtil.getApplicationUrl(0);
if (!url.contains("herokuapp.com") && !url.contains("azurewebsites.net"))
return;
String url=SeleniumUtil.getApplicationUrl(0); // usa el puerto especificado en selenium.properties
driver=SeleniumUtil.getNewDriver();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(15));

Expand Down
5 changes: 5 additions & 0 deletions src/test/resources/selenium.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Configuracion para ejecutar en local los tests web con Selenium
# En CI estas propiedades se remplazaran por las de la aplicacion desplegada
application.url=http://localhost
application.port=8080
remote.web.driver.url=

0 comments on commit 5feabb9

Please sign in to comment.