CherryPy - Test

Il test è un processo durante il quale l'applicazione viene condotta da diverse prospettive al fine di:

  • Trova l'elenco dei problemi
  • Trova le differenze tra il risultato atteso e quello effettivo, l'output, gli stati, ecc.
  • Comprendere la fase di implementazione.
  • Trova l'applicazione utile per scopi realistici.

L'obiettivo del test non è quello di mettere in colpa lo sviluppatore, ma di fornire strumenti e migliorare la qualità per stimare lo stato di salute dell'applicazione in un dato momento.

I test devono essere pianificati in anticipo. Ciò richiede la definizione dello scopo del test, la comprensione della portata dei casi di test, la compilazione dell'elenco dei requisiti aziendali e la consapevolezza dei rischi coinvolti nelle diverse fasi del progetto.

Il test è definito come una serie di aspetti da convalidare su un sistema o un'applicazione. Di seguito è riportato un elenco dei filecommon test approaches -

  • Unit testing- Questo di solito viene eseguito dagli stessi sviluppatori. Questo ha lo scopo di verificare se un'unità di codice funziona come previsto o meno.

  • Usability testing- Gli sviluppatori di solito possono dimenticare che stanno scrivendo un'applicazione per gli utenti finali che non hanno conoscenza del sistema. I test di usabilità verificano i pro ei contro del prodotto.

  • Functional/Acceptance testing - Mentre il test di usabilità verifica se un'applicazione o un sistema è utilizzabile, il test funzionale garantisce che ogni funzionalità specificata sia implementata.

  • Load and performance testing- Viene effettuato per capire se il sistema può adattarsi ai test di carico e di prestazione da condurre. Questo può portare a cambiamenti nell'hardware, ottimizzazione delle query SQL, ecc.

  • Regression testing - Verifica che le versioni successive di un prodotto non interrompano nessuna delle funzionalità precedenti.

  • Reliability and resilience testing - I test di affidabilità aiutano a convalidare l'applicazione di sistema con la rottura di uno o più componenti.

Test unitario

Le applicazioni Photoblog utilizzano costantemente unit test per verificare quanto segue:

  • Le nuove funzionalità funzionano correttamente e come previsto.
  • Le funzionalità esistenti non vengono interrotte dal nuovo rilascio di codice.
  • I difetti vengono risolti e rimangono fissi.

Python viene fornito con un modulo unittest standard che offre un approccio diverso allo unit test.

Unittest

unittest è radicato in JUnit, un pacchetto di unit test Java sviluppato da Kent Beck e Erich Gamma. Gli unit test restituiscono semplicemente dati definiti. È possibile definire oggetti fittizi. Questi oggetti consentono il test su un'interfaccia del nostro progetto senza dover fare affidamento sull'applicazione complessiva. Forniscono inoltre un modo per eseguire test in modalità isolamento con altri test inclusi.

Definiamo una classe fittizia nel modo seguente:

import unittest

class DummyTest(unittest.TestCase):
def test_01_forward(self):
dummy = Dummy(right_boundary=3)
   self.assertEqual(dummy.forward(), 1)
   self.assertEqual(dummy.forward(), 2)
   self.assertEqual(dummy.forward(), 3)
   self.assertRaises(ValueError, dummy.forward)

def test_02_backward(self):
dummy = Dummy(left_boundary=-3, allow_negative=True)
   self.assertEqual(dummy.backward(), -1)
   self.assertEqual(dummy.backward(), -2)
   self.assertEqual(dummy.backward(), -3)
   self.assertRaises(ValueError, dummy.backward)

def test_03_boundaries(self):
dummy = Dummy(right_boundary=3, left_boundary=-3,allow_negative=True)
   self.assertEqual(dummy.backward(), -1)
   self.assertEqual(dummy.backward(), -2)
   self.assertEqual(dummy.forward(), -1)
   self.assertEqual(dummy.backward(), -2)
   self.assertEqual(dummy.backward(), -3)

La spiegazione del codice è la seguente:

  • Il modulo unittest dovrebbe essere importato per fornire funzionalità di unit test per la classe data.

  • Una classe dovrebbe essere creata sottoclasse unittest.

  • Ogni metodo nel codice precedente inizia con un test di parole. Tutti questi metodi vengono chiamati dal gestore unittest.

  • I metodi assert / fail vengono chiamati dal test case per gestire le eccezioni.

Considera questo come un esempio per eseguire un test case:

if __name__ == '__main__':
unittest.main()

Il risultato (output) per l'esecuzione del test case sarà il seguente:

----------------------------------------------------------------------
Ran 3 tests in 0.000s
OK

Test funzionali

Una volta che le funzionalità dell'applicazione iniziano a prendere forma secondo i requisiti, una serie di test funzionali può convalidare la correttezza dell'applicazione rispetto alle specifiche. Tuttavia, il test dovrebbe essere automatizzato per ottenere prestazioni migliori che richiederebbero l'uso di prodotti di terze parti come Selenium.

CherryPy fornisce classi di supporto come funzioni integrate per facilitare la scrittura di test funzionali.

Test di carico

A seconda dell'applicazione che si sta scrivendo e delle proprie aspettative in termini di volume, potrebbe essere necessario eseguire test di carico e prestazioni per rilevare potenziali colli di bottiglia nell'applicazione che le impediscono di raggiungere un determinato livello di prestazioni.

Questa sezione non spiegherà in dettaglio come condurre un test delle prestazioni o del carico poiché non è incluso nel pacchetto FunkLoad.

L'esempio di base di FunkLoad è il seguente:

from funkload.FunkLoadTestCase 
import FunkLoadTestCase

class LoadHomePage(FunkLoadTestCase):
def test_homepage(self):

server_url = self.conf_get('main', 'url')
nb_time = self.conf_getInt('test_homepage', 'nb_time')
home_page = "%s/" % server_url

for i in range(nb_time):
self.logd('Try %i' % i)
self.get(home_page, description='Get gome page')
if __name__ in ('main', '__main__'):

import unittest

unittest.main()

Ecco una spiegazione dettagliata del codice sopra -

  • Il test case deve ereditare dalla classe FunkLoadTestCase in modo che FunkLoad possa svolgere il suo compito interno di tenere traccia di ciò che accade durante il test.

  • Il nome della classe è importante poiché FunkLoad cercherà un file in base al nome della classe.

  • I casi di test progettati hanno accesso diretto ai file di configurazione. I metodi Get () e post () vengono semplicemente chiamati sul server per ottenere la risposta.