Allo scopo di assicurare un’attività continua di verifica il sistema fa uso di CircleCI: un sistema di build automatizzato ed integrazione continua che consente l’esecuzione di test ad ogni push sul repository del progetto.
Qui di seguito sono riportate le specifiche dei test automatici implementati da me, contrassegnati con un codice univoco.
Tabella 10: Specifica dei test automatici implementati Codice Descrizione
T001 Data una pagina HTML in input, AddressScraper deve rilevare correttamente gli indirizzi geografici riportati.
T002 Nel caso non fosse presente alcuna pagina su cui effettuare lo scraping nell’input, AddressScraper non deve tentare l’estrazione di alcun indirizzo
T003 Nel caso sia presente una chiave atta a contenere i percorsi a file temporanei nell’input, BypasserToLogoStageAdapter deve chiamare lo stadio successivo con i parametri corretti T004 Nel caso non sia presente una chiave atta a contenere i percorsi a file temporanei nell’input,
BypasserToLogoStageAdapter deve chiamare lo stadio successivo con i parametri corretti T005 Data un foglio di stile, CSSLogoScraper deve estrarre il logo inserito come
background-image al suo interno
Codice Descrizione
T006 Dato un foglio stile privo di loghi, CSSLogoScraper non deve trovare alcun logo
T007 CSSLogoScraper deve correttamente chiamare lo stadio successivo nel caso il download del logo fallisca
T008 CSSLogoScraper deve essere in grado di trovare fogli CSS all’interno di documenti HTML e scaricare il logo all’interno di tale CSS
T009 DBSaveStage deve salvare correttamente i dati all’interno del database
T010 EmailScraper deve rilevare solo gli indirizzi email validi all’interno di una pagina HTML contenente indirizzi validi e non
T011 EmailScraper non deve effettuare alcuno scraping nel caso non sia presente alcuna pagina da analizzare
T012 Data una pagina con un Frame HTML, FrameBypasser deve rilevare correttamente l’URL all’interno del frame
T013 Data una pagina priva di Frame HTML, FrameBypasser non deve modificare l’URL dato in input
T014 Nel caso si verifichi un errore di connessione, FrameBypasser non deve richiamare il prossimo stadio della pipeline
T015 Nel caso Google API ritorni un unico risultato, FuzzyGoogleAPIStage deve passare tale risultato al prossimo stadio della pipeline
T016 Nel caso Google API ritorni molteplici risultati, FuzzyGoogleAPIStage deve passare al prossimo stadio quello con ragione sociale più simile a quella passata in input
T017 La funzione get_most_similar_items deve tornare l’oggetto con ragione sociale più simile a quella ricevuta in input
T018 Nel caso vi siano più oggetti con lo stesso grado di similitudine corrispondente al grado di similitudine massimo, la funzione get_most_similar_items deve tornare una lista con tali oggetti
T019 Nel caso FuzzyGoogleAPIStage fosse usato senza essere preceduto da GoogleAPIStage, questo deve comportarsi correttamente e non sollevare alcuna eccezione
T020 Nel caso FuzzyGoogleAPIStage sia preceduto da GoogleAPIStage ed abbia ricevuto un risultato da quest’ultimo, FuzzyGoogleAPIStage non deve intervenire e semplicemente passare il risultato allo stadio successivo
T021 GoogleAPIDetailsStage deve estrarre correttamente i dati dalle risposte di Google Places T022 GoogleAPIStage non deve modificare alcun dato ricevuto in input nel caso Google Places
non ritorni alcun risultato per la ricerca
Codice Descrizione
T023 Nel caso Google Places ritorni un risultato, i dati ricevuti devono essere correttamente ristrutturati per poter essere passati al prossimo stadio
T024 L’interfaccia fluida di GoogleAPIStage deve funzionare correttamente, settando un unico successore
T025 L’interfaccia fluida di GoogleAPIStage deve funzionare correttamente, settando correttamente più nodi successori
T026 ImageSaver deve correttamente salvare un’immagine nel caso questa sia disponibile e ritornare percorso ed estensione del file salvato
T027 ImageSaver deve ritornare None nel caso si verifichi un errore 404 durante lo scaricamento di un’immagine.
T028 ImgAltCompanyNameLogoScraper deve identificare correttamente un’immagine con URL assoluto e campo alt contenente la ragione sociale dell’azienda
T029 ImgAltCompanyNameLogoScraper deve identificare correttamente un’immagine con URL relativo e campo alt contenente la ragione sociale dell’azienda
T030 ImgAltCompanyNameLogoScraper non deve intervenire nel caso non vi siano loghi nella pagina
T031 GetFuzzRatio deve sollevare un’eccezione nel caso uno dei campi da confrontare non sia inizializzato
T032 ImgAltLogoScraper deve rilevare un logo con URL assoluto e campo alt contenente la parola “logo”
T033 ImgAltLogoScraper deve rilevare un logo con URL relativo e campo alt contenente la parola “logo”
T034 ImgAltLogoScraper non deve intervenire nel caso non vi siano loghi nella pagina
T035 ImgClassLogoScraper deve rilevare un logo con URL assoluto e campo class contenente la parola “logo”
T036 ImgClassLogoScraper deve rilevare un logo con URL relativo e campo class contenente la parola “logo”
T037 ImgClassLogoScraper non deve intervenire nel caso non vi siano loghi nella pagina
T038 ImgIdLogoScraper deve rilevare un logo con URL assoluto e campo id contenente la parola
“logo”
T039 ImgIdLogoScraper deve rilevare un logo con URL relativo e campo id contenente la parola
“logo”
Codice Descrizione
T040 ImgIdLogoScraper non deve intervenire nel caso non vi siano loghi nella pagina T041 ImgSrcLogoScraper deve rilevare un logo con URL assoluto e campo src contenente la
parola “logo”
T042 ImgSrcLogoScraper deve rilevare un logo con URL relativo e campo src contenente la parola “logo”
T043 ImgSrcLogoScraper non deve intervenire nel caso non vi siano loghi nella pagina
T044 L’interfaccia fluida di ImgSrcLogoScraper deve funzionare correttamente, settando un unico successore
T045 L’interfaccia fluida di ImgSrcLogoScraper deve funzionare correttamente, settando correttamente più nodi successori
T046 LdJsonLogoScraper deve rilevare un logo con URL assoluto T047 LdJsonLogoScraper deve rilevare un logo con URL relativo
T048 LdJsonLogoScraper non deve intervenire nel caso non vi siano loghi nella pagina T049 LinkIconLogoScraper deve rilevare un logo con URL assoluto all’interno di tag <link
rel='icon' ...>
T050 LinkIconLogoScraper deve rilevare un logo con URL relativo all’interno di tag <link rel='icon' ...>
T051 LinkIconLogoScraper non deve intervenire nel caso non vi siano loghi nella pagina
T052 Il modello di database LandRegisterCache deve registrare correttamente i dati in un’istanza T053 Il modello di database Scrapeddata deve calcolare correttamente il percorso dove salvare gli
screenshot dei siti web
T054 Il modello di database Scrapeddata deve calcolare correttamente il percorso dove salvare le immagini di StreetView
T055 Il modello di database Scrapeddata deve calcolare correttamente il percorso dove salvare i loghi
T056 Il modello di database Scrapeddata deve avere una rappresentazione corretta in forma di stringa
T057 OpenGraphLogoScraper deve rilevare un logo con URL assoluto T058 OpenGraphLogoScraper deve rilevare un logo con URL relativo
T059 OpenGraphLogoScraper non deve intervenire nel caso non vi siano loghi nella pagina
Codice Descrizione
T060 PhoneScraper deve rilevare correttamente dei numeri di telefono all’interno di una pagina web
T061 PhoneScraper deve ritornare una lista vuota nel caso non sia disponibile una pagina web su cui lavorare
T062 PhoneScraper deve ritornare una lista vuota nel caso non vi siano numeri telefonici all’interno della pagina elaborata
T063 RedirectionBypasser deve rilevare correttamente un redirect creato con uno script JavaScript T064 RedirectionBypasser non deve modificare alcun dato nel caso non esista alcun redirect
JavaScript nella pagina
T065 RedirectionBypasser non deve richiamare il prossimo elemento della catena nel caso si verifichi un errore di connessione
T066 RequestBuilder deve sollevare un’eccezione nel caso sia richiesto un formato di risposta non valido
T067 RequestProcessor deve sollevare un’eccezione OverQueryLimit nel caso Google risponda con uno stato “OVER_QUERY_LIMIT”
T068 RequestProcessor deve sollevare un’eccezione RequestDenied nel caso Google risponda con uno stato “REQUEST_DENIED”
T069 RequestProcessor deve sollevare un’eccezione InvalidRequest nel caso Google risponda con uno stato “INVALID_REQUEST”
T070 RequestProcessor deve sollevare un’eccezione ServerError nel caso Google risponda con uno stato “UNKNOWN_ERROR”
T071 RequestProcessor deve risollevare un’eccezione ConnectionError in caso di errore di connessione
T072 RequestProcessor deve risollevare un’eccezione TimeoutError in caso di timeout del server T073 SitemapCrawlerStage deve rilevare una pagina di contatti all’interno di una sitemap unica T074 SitemapCrawlerStage deve rilevare una pagina di contatti all’interno di un albero di sitemap T075 SitemapCrawlerStage non deve tornare alcun indirizzo se non è rilevata alcuna pagina di
contatti
T076 SitemapCrawlerStage non deve tornare alcun indirizzo in caso di errore di connessione T077 SitemapDetectorStage deve rilevare correttamente una sitemap all’interno del file
robots.txt
T078 SitemapDetectorStage deve richiamare correttamente il prossimo stadio nel caso non sia specificata alcuna sitemap in robots.txt
Codice Descrizione
T079 SitemapDetectorStage deve richiamare correttamente il prossimo stadio nel caso non sia presente alcun file robots.txt
T080 SocialScraper deve rilevare correttamente i link ai social media all’interno di una data pagina web
T081 SocialScraper deve ritornare una lista vuota nel caso non vi siano link a social media presenti in una data pagina web
T082 SocialScraper deve ritornare una lista vuota nel caso non vi sia una pagina web definita nell’input
T083 Il Task Django di costruzione della pipeline deve costruire correttamente la pipeline T084 TwitterTagLogoScraper deve rilevare un logo con URL assoluto
T085 TwitterTagLogoScraper deve rilevare un logo con URL relativo
T086 TwitterTagLogoScraper non deve intervenire nel caso non vi siano loghi nella pagina T087 VATScraper deve rilevare i numeri di partita IVA inseriti all’interno di una data pagina T088 WebCrawler: La funzione di rilevamento di una pagina contatti deve rilevare correttamente
gli URL dati
T089 WebCrawler: La funzione di rilevamento di una pagina contatti deve escludere correttamente gli URL dati
T090 WebCrawler: La funzione has_same_domain deve rilevare correttamente se due indirizzi hanno lo stesso dominio
T091 WebCrawler: La funzione has_same_domain deve rilevare correttamente se due indirizzi non hanno lo stesso dominio
T091 WebCrawler: La funzione di scaricamento di una pagina web deve ritornare None nel caso si verifichi un errore di connessione
T092 WebCrawler: La funzione di scaricamento di una pagina web deve ritornare None nel caso si tenti di scaricare un file non testuale
T093 WebCrawler: La funzione di crawling deve rilevare correttamente i link da seguire, definiti all’interno di una data pagina.
A questi si vanno ad aggiungere altri test automatici implementati dal mio collega, per un totale di 125 nuovi test a copertura dell’architettura, con una code coverage del 77%.