Procedure ottimali di sviluppo proxy
Proxy SDK di Rational Functional Tester  

Procedure ottimali di sviluppo proxy

Se ci si attiene alle procedure ottimali quando si sviluppano proxy può risultare utile nell'ottimizzare il proprio lavoro. Prendere in considerazione questi metodi per migliorare il lavoro di sviluppo.

Utilizzo della gerarchia appropriata per gli oggetti GUI

Gli oggetti GUI sono disposti in due gerarchie correlate: principale-secondaria e proprietario-proprietà. Un esempio di relazione principale-secondaria è una finestra di dialogo e un pulsante in essa contenuto. Un esempio di relazione proprietario-proprietà è una finestra di livello superiore e una finestra di dialogo. Utilizzare un dei tipi di gerarchia per un oggetto.

Nell'implementazione del proxy, è comune per il modello di oggetto sottostante (ad esempio, Java e HWND) confondere queste due relazioni e trattare la relazione proprietario-proprietà come una relazione principale-secondaria asimmetrica. In questo caso, il proxy deve negare di avare un elemento principale quando il modello di relazione preferibile è proprietario-proprietà. I metodi che è possibile utilizzare per passare attraverso la gerarchia sono getParent(), getChildren(), getOwner() e getOwned().

Evitare la restituzione di tipi diversi per la stessa proprietà

Le proprietà sono denominate valori. La proprietà stessa non ha un tipo; il valore ha un tipo. Evitare che i proxy restituiscano tipi diversi per la stessa proprietà. Talvolta un valore di proprietà può essere un riferimento ad un oggetto piuttosto che un valore. Se tale valore viene restituito ad uno script, viene restituito come TestObject. I metodi per accedere alle proprietà includono getProperty(), setProperty(), getProperties() e getNonValueProperties().

Utilizzo della libreria oggetti per assegnare pesi e proprietà di riconoscimento agli oggetti

Per impostazione predefinita, i nuovi oggetti proxy potrebbero non disporre dei pesi e delle proprietà di riconoscimento degli oggetti. Utilizzare la libreria oggetti per assegnare i pesi e le proprietà di riconoscimento. I metodi per l'accesso ai pesi e alle proprietà di riconoscimento dell'oggetto sono getRecognitionProperties() e getRecognitionPropertyWeight(). Se all'interno dell'oggetto principale esiste più di un oggetto della stessa classe, aggiungere la proprietà .classIndex (un valore numerico positivo che inizia con 0), come una proprietà di riconoscimento per l'oggetto secondario.

Gestione di gerarchie associabili

Generalmente, l'intera gerarchia degli oggetti risulta associata. Tuttavia, alcuni oggetti sono suscettibili di frequenti cambiamenti tra build dell'applicazione di test. Ad esempio, in Java, è comune aggiungere insieme pannelli a oggetti cluster. Con Functional Tester l'utente può specificare di non associare l'oggetto proxy. Anche se gli oggetti non associabili non sono nell'associazione oggetti di test, la gerarchia di oggetti ne effettua un elenco mentre si passa attraverso la gerarchia principale-secondaria. I metodi per la gestione della gerarchia associabile includono shouldBeMapped(), getMappableParent() e getMappableChildren().

Uso delle proprietà canoniche

In alcuni casi, il modello di oggetti sottostante supporta una nozione delle proprietà, ad esempio, Java, HTML e .NET. Functional Tester consente ai proxy di implementare ulteriori proprietà. Se un proxy implementa direttamente una proprietà, il nome della proprietà deve avere un diverso modello per evitare confusione con qualsiasi proprietà dell'oggetto. Iniziare il nome delle proprietà regolari che potrebbero essere utilizzate per il riconoscimento con un punto (.). Alcune proprietà di gestione vengono utilizzate dal framework e non possono essere utilizzate per il riconoscimento; tali nomi di proprietà iniziano con un simbolo di numero (#).

Richiamo di metodi di oggetti

In molti casi, l'oggetto sottostante dispone di metodi che possono essere rilevati e richiamati. Questi di solito vengono gestiti direttamente dall'implementazione di dominio e framework, ma getMethod() viene implementato comunemente su un proxy base in un dominio.

Uso di metodi guidati da script ben definiti

Quando possibile, eseguire la riproduzione di azioni del mouse dalla lente. Se un nome di metodo include "click" o "drag", far eseguire l'azione agli eventi mouse. Non utilizzare i nomi di metodo come "click" o "drag" se gli eventi mouse non vengono utilizzati per implementare l'azione. Non utilizzare i nomi di metodo che fanno riferimento a tasti o la tastiera se gli eventi tastiera non implementano l'azione. Fare in modo che i metodi riflettano l'azione che sta per essere eseguita e affidabile durante la riproduzione. Evitare euristiche.

Gestione di elementi secondari

Gli oggetti possono contenere altri oggetti e potrebbero avere una struttura interna non esposta come uno o più oggetti nidificati. Ad esempio, un elenco potrebbe contenere degli elementi, ma questi non sono esposti dall'oggetto della lista come oggetti stessi. Questo tipo di comportamento è comune negli oggetti basati su HWND. I metodi più comuni di gestione degli elementi secondari sono getSubitem() e i metodi di azione del mouse come click(), drag(), e doubleClick(). Il metodo getSubitem() restituisce un valore null o una stringa.

Utilizzare una delle seguenti strategie se non si desidera che gli oggetti negli elementi secondari siano esposti come oggetti completamente sviluppati:

  • Dichiarare l'elemento secondario come non associabile

    Dichiarare il proxy elemento secondario come non associabile. L'oggetto al punto comunica con il relativo elemento principale e il proxy elemento principale è responsabile delle azioni di registrazione sull'oggetto aggregato e del supporto alla riproduzione delle azioni GUI basate sull'elemento secondario.

  • Fare delegare all'elemento secondario la chiamata al relativo elemento principale

    Durante la registrazione il proxy elemento secondario passa le chiamate processMouseEvent() al relativo elemento principale. Il proxy elemento principale è responsabile delle azioni di registrazione sull'oggetto aggregato e del supporto alla riproduzione delle azioni GUI basate sull'elemento secondario.

  • Fare delegare all'elemento secondario le azioni di registrazione al relativo elemento principale

    Durante la registrazione il proxy elemento secondario elabora le chiamate processMouseEvent() e genera le chiamate di metodo sull'oggetto elemento principale. Il proxy elemento principale non è responsabile delle azioni di registrazione sull'oggetto aggregato ma è responsabile del supporto alla riproduzione delle azioni GUI basate sull'elemento secondario.

  • Utilizzare oggetti secondari degli elementi secondari

    Disporre di un nuovo tipo di riferimento di oggetto che contenga tag in modo che il riferimento non sia registrato dopo che viene usato come ancora. Ciò abilita l'ancoraggio di un oggetto utilizzando elementi secondari di un altro oggetto. È possibile associare l'oggetto nidificato come un elemento secondario dell'oggetto principale.

Eccezioni ed errori

Attenersi a queste regole quando si implementano eccezioni ed errori:

  • Utilizzare eccezioni documentate pubbliche

    Non generare eccezioni interne o private dai proxy. La documentazione API per i proxy in uso potrebbe non essere disponibile. Utilizzare le eccezioni standard, preferibilmente RationalTestException.

  • Riutilizzare le eccezioni

    Riutilizzare le eccezioni dal pacchetto com.rational.test.ft in Java o lo spazio nomi Rational.Test.Ft in .Net. Se un proxy java genera un'eccezione com.rational.test.ftMethodNotFoundException e lo script è scritto in VB, lo script VB acquisisce un'eccezione Rational.Test.Ft.MethodNotFoundException. Se viene generata un'eccezione che non ha un nome che inizia con com in com.rational.test.ft viene messa in ordine logico come eccezione WrappedException.

  • Utilizzare creatori

    Tutte le RationalTestException che possono essere messe in ordine logico devono supportare un creatore che assume un solo parametro stringa.

  • Eseguire implementazioni parallele delle eccezioni .Net e Java

    Se si aggiunge una nuova eccezione in un proxy implementato in Java che si prevede venga restituito al client, accertarsi di implementare la stessa eccezione in .Net.

  • Dichiarare eccezioni di runtime

    In Java, le eccezioni devono essere dichiarate, il che potrebbe non risultare utile per alcuni tester. Diverse eccezioni derivano da quasi ogni metodo GUI, utilizzare quindi le eccezioni di runtime anziché le eccezioni in Java. Evitare di utilizzare errori. Un errore causerebbe l'arresto dell'intera sessione del registratore o di riproduzione.

  • Includere eccezioni ObjectNotFound

    Se l'oggetto non viene rilevato, il framework genera un'eccezione ObjectNotFoundException. Se l'oggetto viene rilevato, e un elemento secondario è specificato ma non viene rilevato, il proxy deve generare un'eccezione SubItemNotFoundException. L'eccezione SubItemNotFoundException viene rilevata dal framework e viene riprovato automaticamente.

  • Gestire clic basati su coordinate

    Se le coordinate di input fanno clic su un oggetto o un elemento secondario che è oltre la regione, modificare le coordinate in modo da includere la regione nell'oggetto o nell'elemento secondario. Aggiungere un meccanismo per generare un'avvertenza nel registro quando si verifica ciò. Il proxy potrebbe dover utilizzare clic basati su coordinate in quanto la struttura della schermata dell'oggetto non può essere completamente descritta. Ad esempio, su un JTree, la geometria PLUS_MINUS non è nota, ma può essere trovata rispetto all'elemento secondario a cui si applica. È accettabile per il proxy espandere l'area dell'elemento secondario in modo da includere PLUS_MINUS. È possibile utilizzare coordinate negative per gli elementi secondari. Documentare tutte le violazioni rispetto al comportamento normale. Accertarsi che nessun elemento secondario con un clic di coordinate specificato faccia clic oltre l'oggetto.

  • Gestione di eccezioni quando si fa clic sugli oggetti errati

    Se si fa clic su un oggetto errato, viene generata un'eccezione com.rational.test.ft.CoordinateOnWrongObjectException. L'oggetto errato potrebbe sovrapporsi alla destinazione corretta. È possibile modificare le coordinate per evitare l'oggetto secondario all'interno di un contenitore. Ignorare il punto specificato e ricercare in un altro punto un oggetto appropriato su cui fare clic. Evitare di registrare le coordinate su oggetti che hanno elementi secondari associabili e non consentire clic sugli oggetti errati.

  • Gestione di eccezioni quando si fa clic sugli elementi secondari errati

    Se si fa clic su un elemento secondario errato, viene generata un'eccezione com.rational.test.ft.CoordinateOnWrongSubitemException. Questa eccezione non si applica ai click associati ad un oggetto in cui un elemento secondario non è specificato. Questo tipo di clic si applica solo quando si fa clic sull'oggetto e su eventuali elementi secondari in tale oggetto. In tale caso, l'elemento secondario errato si sovrappone alla destinazione corretta che è probabilmente un elemento secondario. Evitare di registrare le coordinate su elementi secondari che hanno elementi secondari nidificati in modo da non incorrere in questa eccezione. Ignorare il punto specificato e ricercare un altro punto in un elemento secondario appropriato su cui fare clic.

Argomento principale: Proxy SDK di Rational Functional Tester

Feedback