Sto scrivendo script di test automatici con Selenium Webdriver (Python) e cerco di seguire le corrette pratiche di programmazione, in particolare le metodologie Object Oriented, ove possibile.
Al momento, rappresento ogni scenario di test come una singola classe. Questa classe ha fondamentalmente la seguente struttura:
- Importazioni (moduli Selenium e materiale Python)
- Configurazione della registrazione
- Definizione della classe che include quanto segue:
- Inizializzazione istanza driver
- Variabili dello scenario di test specifico
- Metodi generici (alcuni wrapper creati che vengono utilizzati in più scenari di test)
- Metodi specifici dell'applicazione
Quindi è qualcosa del genere:
imports
logging
class AppName(object):
def __init__(self):
self.driver = webdriver.Chrome()
self.localAppVar = "..."
...
def genericFunction(self):
#This is a generic function that is going to be used in many other test scenarios as well as in this one
def specificAppFunction(self):
#This is a specific application function. This function is only relevant withing this test. This function will use "genericFunction" internally.
app = AppName() #Initialize an AppName object
app.specificAppFunction()
...
Quello che vorrei fare è separare la classe di cui sopra in 2 nuove classi e un file di avvio:
-
Classi di funzioni generiche. Questo definirà l'oggetto
driver
e tutte le funzioni generiche che verranno utilizzate da più test. -
Funzioni specifiche Classe. Questo conterrà la funzione specifica dell'applicazione che è irrilevante per altre applicazioni.
-
Il file di avvio che inizializzerà \ istanzia le classi sopra menzionate e controllerà lo scenario a un livello superiore. (tipo
main
inC
se preferisci).
L'idea di cui sopra ha senso per me, ma sono un po 'confuso riguardo all'approccio pratico. Come dovrebbe essere implementato correttamente?
Stavo pensando alle seguenti opzioni:
- Creazione di un'istanza di classe generica con una specifica classe di applicazione.
- Rendi la classe generica una classe base e poi ereditala in base a una specifica classe di applicazione.
Non sono sicuro dei pro e dei contro di entrambi gli approcci e attualmente sono un po 'bloccato con l'implementazione. Sarebbe bello se qualcuno potesse darmi qualche idea su come tale attività dovrebbe essere implementata.
Spero che la mia domanda sia abbastanza chiara. Se non lo è, si prega di commentare e io elaborerò o / e modificherò.