Ottenere il codice di stato di una pagina web con Spring Boot 2.5.1

di il
4 risposte

Ottenere il codice di stato di una pagina web con Spring Boot 2.5.1

Per essere certo che l’interfaccia grafica funzioni bene per tutte le tipologie di utente (amministratore, nuovo iscritto, ecc…) uso una pagina html statica di questo tipo:
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/extras/spring-security" th:lang="it">
<head th:replace="_layout :: head_tag"></head>
<body>
<div th:replace="_layout :: menu"></div>
<h2>Tutte le pagine dell'applicazione</h2>
<p><a th:href="@{/}" target="_blank">/</a></p>
<p><a th:href="@{/login}" target="_blank">/login</a></p>
<p><a th:href="@{/logout-eseguito}" target="_blank">/logout-eseguito</a></p>
<p><a th:href="@{/benvenuto}" target="_blank">/benvenuto</a></p>
<p><a th:href="@{/registrazione}" target="_blank">/registrazione</a></p>
<p><a th:href="@{/registrazione-eseguita}" target="_blank">/registrazione-eseguita</a></p>
...
<p>Logout:</p>
<p><a th:href="@{/pagina-logout}" target="_blank">/pagina-logout</a></p>
</body>
</html>
e poi con il mouse clicco su ogni link e verifico se quello che accade è ciò che mi aspetto.
Posso creare una classe di test che faccia questo al posto mio?
Come potrei procedere?
È giusto lanciare le URL e verificare se il codice di stato che ottengo è quello che mi aspetto?
Ho scritto questo test:
	// Questo test ottiene e convalida il codice di stato della risposta HTTP.
	@Test
	public void verificaPagineApplicazione() {
		String url = "http://localhost:8080/gestioneutenti/tfy";
		RestTemplate restTemplate = new RestTemplate();
		ResponseEntity<String> risposta = restTemplate.getForEntity(url, String.class);
		//System.out.println(risposta.getStatusCode().value());
		assertEquals(risposta.getStatusCode().value(),404);
	}
ma funziona solo quando il codice di stato è 200.
org.springframework.web.client.HttpClientErrorException$NotFound: 404 : [{"timestamp":"2021-06-17T21:54:33.507+00:00","status":404,"error":"Not Found","message":"No message available","path":"/gestioneutenti/tfy"}]
In rete ci cono degli esempi ma riguardano solo applicazioni di tipo REST ovvero applicazioni dove ciò che accade deriva da ciò che è presente nella URL. Nel mio caso non è così.
Consigli?

4 Risposte

  • Re: Ottenere il codice di stato di una pagina web con Spring Boot 2.5.1

    iBaffiPro ha scritto:


    
    	@Test
    	public void verificaPagineApplicazione() {
    		String url = "http://localhost:8080/gestioneutenti/tfy";
    		RestTemplate restTemplate = new RestTemplate();
    		ResponseEntity<String> risposta = restTemplate.getForEntity(url, String.class);
    		//System.out.println(risposta.getStatusCode().value());
    		assertEquals(risposta.getStatusCode().value(),404);
    	}
    ma funziona solo quando il codice di stato è 200.
    org.springframework.web.client.HttpClientErrorException$NotFound: 404 : [{"timestamp":"2021-06-17T21:54:33.507+00:00","status":404,"error":"Not Found","message":"No message available","path":"/gestioneutenti/tfy"}]
    
    A parte il fatto che questo non è uno "unit test" ... è più un "integration test" perché stai facendo una chiamata reale al server!! E non è una buona cosa. Spring ha già tutta la infrastruttura di test per poter testare lo strato MVC senza dover usare RestTemplate e senza fare chiamate "reali".

    Comunque se ti aspetti che la pagina NON ci sia perché l'url sotto test è (volutamente) errato, allora ti aspetti che ci sia una eccezione. Quindi devi testare di ricevere quella eccezione. Con JUnit 5 si fa con il assertThrows di Assertions.


    P.S. scusa la domanda ma è giusto per mia curiosità dato l'alto numero di domande che poni sul forum: quanti libri finora hai letto su Spring Framework/Boot/Security?
  • Re: Ottenere il codice di stato di una pagina web con Spring Boot 2.5.1

    Ne ho letti alcuni di libri ma non ne ho concluso neppure uno perché sono un mare di immondizia. Non ci sono libri che spiegano come creare una webapp da zero in Spring Boot. Tutti questi libri sono mini esercitazioni completamente slegate tra di loro. Sarei interessato a leggere un libro solo se trattasse un solo progetto dalla A alla Z. Inoltre, sono un appassionato, non programmo per mestiere, non ho una preparazione universitaria alle spalle, non ho certificazioni come vedo nella tua firma e quindi è tutto molto più complesso per me. A breve compro un hosting e pubblico il mio lavoro ed in fondo ci sarà un ringraziamento a te Andrea per tutta l'assistenza/pazienza che mi hai dato, aspetto solo di avere qualcosa di presentabile.
    Per tornare al problema mi servirebbe una guida che mi spieghi come testare la mia applicazione. Su internet ce ne sono molte, ho anche provato a leggerle ma mi sono fermato subito perché sono tutte quante valide per applicazioni REST. In alternativa una classe scritta da te in passato e che posso adattare al mio progetto che parte tutto da qui:
    https://o7planning.org/11543/create-a-login-application-with-spring-boot-spring-security-spring-jdbc
  • Re: Ottenere il codice di stato di una pagina web con Spring Boot 2.5.1

    iBaffiPro ha scritto:


    Ne ho letti alcuni di libri ma non ne ho concluso neppure uno perché sono un mare di immondizia.
    Dipende ...

    iBaffiPro ha scritto:


    Non ci sono libri che spiegano come creare una webapp da zero in Spring Boot.
    Non è vero.

    iBaffiPro ha scritto:


    Tutti questi libri sono mini esercitazioni completamente slegate tra di loro.
    Sì, alcuni libri sono così. Altri invece descrivono un singolo progetto e lo sviluppano man mano che si prosegue nei vari capitoli.

    iBaffiPro ha scritto:


    Per tornare al problema mi servirebbe una guida che mi spieghi come testare la mia applicazione.
    La questione è che il testing non è facile. E implica la conoscenza di vari framework e librerie di testing: JUnit 4/5, Mockito, AssertJ, REST-assured (specifico in ambito REST), tanto per dirne alcune. Nonché l'infrastruttura di testing in Spring Boot, ecc...
    E purtroppo non c'è un libro che copre "tutto" questo e basta.
  • Re: Ottenere il codice di stato di una pagina web con Spring Boot 2.5.1

    andbin ha scritto:


    Sì, alcuni libri sono così. Altri invece descrivono un singolo progetto e lo sviluppano man mano che si prosegue nei vari capitoli.
    Ne conosci uno su Spring Boot?
Devi accedere o registrarti per scrivere nel forum
4 risposte