how automate repetitive qa tasks using excel macros
Questa guida approfondita sulla mentalità macro del QA spiega come automatizzare le attività ripetitive del QA utilizzando macro di Excel con esempi e schermate di fogli Excel:
La necessità di automazione nel mondo di oggi è una delle richieste essenziali e in crescita. Oggi tutti cercano qualcosa che faciliti il proprio lavoro o le seccature legate al lavoro di routine.
Al giorno d'oggi nessuno vuole visitare un negozio di telefonia mobile, fare la fila per ricaricare il proprio telefono, conviene non recarsi fisicamente da nessuna parte ma ricaricare il telefono online in una frazione di secondo.
A partire dal pagamento delle bollette attraverso il net banking, la prenotazione e il monitoraggio del taxi online, l'acquisto di cose online su vari siti di e-commerce fino all'utilizzo di diversi elettrodomestici automatizzati come lavatrici, microonde, geyser e smartphone in continua evoluzione, ecc., Il mondo di oggi è davvero brama di prodotti intelligenti e automatizzati sotto forma di servizi o gadget.
In questo articolo, non discuteremo dell'utilizzo di strumenti di automazione o di qualsiasi cosa sull'intelligenza artificiale o sull'apprendimento automatico, ma l'attenzione sarà rivolta al mero utilizzo di Excel per automatizzare le attività di routine quotidiane di un QA.
Cosa imparerai:
Macro Mindset del QA
I tester manuali di solito hanno la convinzione che io, essendo un tester manuale, non abbia nulla a che fare con nulla di tecnico o in altre parole, 'il know-how di codifica non è la mia tazza di tè'. Questa è probabilmente la mentalità sbagliata che potrebbe fermare la nostra crescita come ingegneri.
Un QA manuale ha molte attività quotidiane che potrebbero essere ripetitive seguendo lo stesso flusso di lavoro. Un QA può identificare molto bene tali attività e automatizzarle utilizzando le macro di Excel e / o formule.
Questo potrebbe aiutare in due modi:
- Riduce il tempo impiegato negli sforzi manuali.
- Inoltre, ispira il QA ad apprendere e adattarsi al pensiero logico e al miglioramento delle competenze sul fronte tecnico.
Le cose possono essere automatizzate per tutte le fasi di test elencate di seguito:
- Pianificazione e stima dei test.
- Progettazione del test o preparazione del caso di test.
- Aggiornamento dello stato di esecuzione del test.
- Report di prova e creazione di metriche.
Impostazione rapida del contesto
# 1) Un excel salvato con. xlsxm è un Excel abilitato per le macro.
#Due) Per abilitare la macro su un Excel, selezionare File -> Opzioni -> Centro protezione -> Impostazioni Centro protezione -> Impostazioni macro -> Seleziona il pulsante di opzione 'Abilita tutte le macro' e seleziona la casella di controllo 'Considera attendibile l'accesso al modello a oggetti del progetto VBA'. Fare clic su OK.
# 3) Seleziona il menu Visualizza -> Macro -> Registra macro -> Esegui alcune attività e interrompi macro . È possibile modificare la macro e visualizzare il codice VBA registrato nel file Editor VBA finestra. Allo stesso modo, puoi aggiungere i tuoi codici esplicitamente per creare una macro.
# 4) Daremo un'occhiata ad alcuni esempi di tali attività ripetitive che potrebbero essere buoni candidati per l'automazione tramite macro / formule di Excel.
Esempio di utilizzo n. 1
Alla fine di ogni fase funzionale, devono essere identificati alcuni casi di test per la regressione dalla suite funzionale. Questo è un processo da seguire in ogni sprint o iterazione.
Soluzione
Per ridurre lo sforzo di identificare e creare manualmente una suite di regressione, è possibile implementare il processo innovativo di seguito.
- È possibile creare un foglio con casi di test funzionali con una colonna aggiuntiva per contrassegnare i casi / scenari di test come Sì / No per la regressione.
- Quindi crea una macro per lo stesso, in modo tale che quando la macro viene eseguita, tutti i casi / scenari di test con regressione contrassegnati come 'Sì' vengano copiati in un altro foglio.
- Pertanto, questo eviterà un esercizio aggiuntivo di passare attraverso tutti i casi di test funzionali alla fine dello sprint e quindi di impegnarsi ulteriormente per ottenere ogni caso di test estratto nella suite di regressione.
Demo
- Il primo foglio 'FunctionalTestScenarios' contiene tutti gli scenari di test funzionali / casi di test.
- C'è una colonna aggiuntiva 'Includere nella suite di regressione?' aggiunto alla fine delle colonne del test per contrassegnare 'Sì' o 'No', identificando se ciascuno degli scenari di test deve essere incluso nella suite di regressione.
- C'è un secondo foglio creato come 'RegressionSuite' e questo recupererà automaticamente tutti gli scenari di test di regressione tramite la macro.
- CTRL + MAIUSC + S è impostato come collegamento per l'esecuzione della macro.
FunctionalTestScenarios
RegressionSuite
Codice VBA (Macro)
Sub RegressionSuite() ' Keyboard Shortcut: Ctrl+Shift+S Sheets('FunctionalTestScenarios').Activate Rows('1:1').Select Selection.AutoFilter Sheet1.Range('$A:$D').AutoFilter Field:=4, Criteria1:='Yes' Lastrow=Sheets('FunctionalTestScenarios') .Cells(Sheets('FunctionalTestScenarios').Rows.Count, 'A').End(xlUp).Row Range('A2:C2' & Lastrow).Select Selection.Copy Sheets('RegressionSuite').Select Range('A2').Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _:=False, Transpose:=False End Sub
Spiegazione del codice
- Fogli ('FunctionalTestScenarios'). Attivare: Quando sono presenti più fogli in Excel, il metodo Activate attiva il primo foglio e quindi lo stato attivo viene impostato esplicitamente sul primo foglio.
- Righe ('1: 1'). Seleziona: Questa istruzione seleziona la prima riga per tutte le colonne del primo foglio.
- Selection.AutoFilter: Questa istruzione applica il filtro alla prima riga selezionata.
- Sheet1.Range ('$ A $ 1: $ D $ 38 ″). Campo filtro automatico: = 4, Criteria1: =' Sì ': Questa istruzione applica il filtro automatico alla colonna numero 4, ad es. 'Includere nella suite di regressione?' e filtra i record per il valore 'Sì'.
- Lastrow = Sheets ('FunctionalTestScenarios'). Celle (Sheets ('FunctionalTestScenarios') .Rows.Count, 'A'). End (xlUp) .Row: Questa istruzione ottiene il conteggio dell'ultima riga del primo foglio.
- Gamma ('A2: C2' e Lastrow). Seleziona: Questa istruzione seleziona tutte le righe e le colonne del primo foglio con Include in Regression suite? = Sì.
- Selezione Copia: Questa istruzione copia tutti i record selezionati.
- Fogli ('RegressionSuite'). Seleziona: Questa affermazione apre la 2ndfoglio.
- Intervallo ('A2'). Selezionare: Questa istruzione seleziona la cella A2 del 2ndfoglio.
- Selection.PasteSpecial Paste: = xlPasteValues, Operation: = xlNone, SkipBlanks _: = False, Transpose: = False: Questa istruzione copia il valore della cella selezionata di origine nel foglio di destinazione. L'intervallo di celle di destinazione contiene solo i valori calcolati utilizzando le formule. In alternativa, è possibile utilizzare anche Paste: = xlValues. Nessuno spazio vuoto viene ignorato. Le celle sorgente non vengono trasposte e non vengono eseguite operazioni matematiche.
Esempio di utilizzo n. 2
Ci sono momenti in cui è necessario creare casi di test per diciamo 100 stati o 1000 entità (come 1000 moduli assicurativi). I passaggi del test per questo enorme elenco di stati o entità potrebbero essere gli stessi e ripetitivi.
Nonostante ciò, la preparazione del test case potrebbe essere una delle attività più dispendiose in termini di tempo, che avere il documento del test case in atto è molto importante per acquisire le stime richieste dal cliente e chiedere al team di controllo qualità di testare ciascuno dei casi di test all'interno le tempistiche correttamente stimate.
Soluzione
In questi casi, le lunghe ore di lavoro di preparazione del test case possono essere ridotte a una frazione di secondi utilizzando la macro.
- È possibile creare un foglio in cui fornire solo l'input come ID caso di test e l'elenco univoco di entità.
- Crea una macro che, una volta eseguita, aggiunge righe ripetitive di passaggi di test per ciascuna di queste entità e il documento del caso di test è pronto in pochi secondi senza dover spendere la notevole quantità di sforzi manuali richiesti per preparare i casi di test.
Demo
- Il primo foglio 'GetTestcasesASAP' è l'unico foglio guidato da macro che inizialmente è vuoto.
- Un altro foglio 'Dati di input di esempio' non ha alcun ruolo nella macro. Contiene semplicemente i dati di input di esempio a scopo dimostrativo.
- Copia e incolla i dati dall'intervallo dati di input di esempio da A2 a B12 nel primo foglio.
- È possibile copiare e incollare i dati di input nel formato - Colonna A = ……. e colonna B =.
- Quando i dati di input sono pronti, premere CTRL + MAIUSC + T come tasti di scelta rapida per l'esecuzione della macro.
- I passaggi del test vengono aggiunti automaticamente per ogni ID caso di test e il documento del caso di test viene preparato in pochi secondi.
GetTestcasesASAP
Dati di input di esempio
I dati di input vengono incollati nel primo foglio.
Immagine durante l'esecuzione della macro premendo CTRL + MAIUSC + T.
Codice VBA (Macro)
Sub GetTestcasesQuick() ' GetTestcasesQuick Macro ' Keyboard Shortcut: Ctrl+Shift+T Sheets('GetTestcasesASAP').Activate lastrow =Sheets('GetTestcasesASAP').Cells(Sheets('GetTestcasesASAP').Rows.Count, 'A').End(xlUp).Row Dim AddRows As Integer AddRows = 5 Dim i As Integer i = lastrow Do While i <> 1 Rows(i & ':' & i + AddRows).Insert i = i - 1 Loop ScreenUpdating = True lastrow = Sheets('GetTestcasesASAP').Cells(Sheets('GetTestcasesASAP').Rows.Count, 'A').End(xlUp).Row i = 2 While i <= lastrow + 6 Sheets('GetTestcasesASAP').Cells(i, 3) = 'Validate rates-factor combinations' Sheets('GetTestcasesASAP').Cells(i + 1, 3) = 'Batch job schedules and runs. ' Sheets('GetTestcasesASAP').Cells(i + 2, 3) = 'Commissioning calculations settlements' Sheets('GetTestcasesASAP').Cells(i + 3, 3) = 'Quick and detailed quote' Sheets('GetTestcasesASAP').Cells(i + 4, 3) = 'Benefit illustration ' Sheets('GetTestcasesASAP').Cells(i + 5, 3) = 'Benefit summary validation' i = i + 7 Wend End Sub
Spiegazione del codice
(a) Fogli ('GetTestcasesASAP'). Attiva: Questa istruzione attiva il primo foglio.
qual è il miglior software di database
(b) lastrow = Sheets ('GetTestcasesASAP'). Cells (Sheets ('GetTestcasesASAP'). Rows.Count, 'A'). End (xlUp) .Row: Questa istruzione ottiene il conteggio dell'ultima riga. Questa volta otterrà il numero totale di conteggio delle righe per gli ID del test case iniziale appena aggiunti come parte dei dati di input prima dell'esecuzione della macro.
(c) Dim AddRows As Integer: Questa istruzione dichiara la variabile AddRows come un tipo di dati intero.
(d) AddRows = 5: Questa istruzione inizializza AddRows con 5. La variabile viene utilizzata per inserire alcune righe dopo ogni id caso di test in modo che possano essere aggiunti passaggi di test statici per ogni caso di test.
(e) Dim i As Integer: Questa istruzione dichiara la variabile i come numero intero.
(f) i = lastrow : Questa istruzione assegna il conteggio iniziale dell'ultima riga alla variabile i.
(g) Fai mentre i 1 : Questo fa mentre il ciclo inserisce 6 righe vuote dopo ogni id caso di test. Il ciclo inizia dall'ultimo ID del test case fino al primo ID del test case.
Righe (i & “:” e i + AddRows) .Insert
io = io - 1
Ciclo continuo
(h) ScreenUpdating = True : Questa istruzione rende visibile ogni aggiornamento dello schermo. Pertanto, le prestazioni della macro potrebbero essere leggermente lente. Per ottimizzare le prestazioni della macro, puoi anche impostare ScreenUpdating = False .
L'impostazione di ScreenUpdating su False migliora le prestazioni della macro e velocizza la sua esecuzione, tuttavia, non sarai in grado di vedere le modifiche intermittenti che si verificano durante l'esecuzione della macro. Invece le modifiche verranno visualizzate solo una volta completata l'esecuzione della macro.
(i) lastrow = Sheets ('GetTestcasesASAP'). Cells (Sheets ('GetTestcasesASAP'). Rows.Count, 'A'). End (xlUp) .Row : Questa istruzione calcola nuovamente il conteggio dell'ultima riga dopo l'aggiunta di nuove 6 righe per ogni caso di test.
(j) i = 2
(k) Mentre i<= lastrow + 6
Fogli ('GetTestcasesASAP'). Cells (i, 3) = 'Convalida combinazioni tassi-fattore'
Fogli ('GetTestcasesASAP'). Cells (i + 1, 3) = 'Pianifica ed esegue lavori batch. '
Sheets ('GetTestcasesASAP'). Cells (i + 2, 3) = 'Commissioning calculations settlement'
Fogli ('GetTestcasesASAP'). Cells (i + 3, 3) = 'Preventivo rapido e dettagliato'
Fogli ('GetTestcasesASAP'). Cells (i + 4, 3) = 'Illustrazione dei vantaggi'
Fogli ('GetTestcasesASAP'). Cells (i + 5, 3) = 'Convalida riepilogo vantaggi'
io = io + 7
Applicare
Questo frammento del ciclo while aggiunge 6 passaggi di passaggi di test statici per ogni caso di test impostando queste righe successivamente dopo ogni ID caso di prova.
I passaggi del test statico aggiunti per ogni caso di test sono i seguenti:
- Passo 1: Convalida le combinazioni tassi-fattore.
- Passo 2: Pianificazioni ed esecuzioni di lavori in batch.
- Passaggio 3: Messa in servizio calcoli liquidazioni.
- Passaggio 4: Preventivo rapido e dettagliato.
- Passaggio 5: Illustrazione di vantaggio.
- Passaggio 6: Convalida del riepilogo dei vantaggi.
Inoltre, spinge anche l'ID del test case successivo nella sequenza a 6 + 2, ovvero 8thriga.
Per esempio: Se TC1 si trova sulla prima riga, i passaggi vengono aggiunti dalla seconda alla settima riga e TC2 viene inserito nell'ottava riga. Un modo simile è seguito anche per il resto degli ID del test case.
Esempio di utilizzo n. 3
Ci sono casi in cui un enorme file di dati da qualche parte vicino a 1000 record o più viene fornito dal cliente e scrivere casi di test per questi record enormi e mappare ogni dato su ogni fase del test è un lavoro noioso. Macro può ridurre i giorni di lavoro a pochi minuti, risparmiando così il tempo di preparazione del caso di test.
Soluzione
Il file di dati fornito dal cliente può essere copiato nel foglio abilitato per la macro. Quando si esegue la macro, i casi di test vengono creati automaticamente nel secondo foglio mappando automaticamente i dati del test rispetto a ciascuna fase del test per ogni caso di test.
Demo
- Il primo foglio 'File di input' e il secondo foglio 'ReadyTestCases' sono i principali contributori della macro.
- Un altro foglio 'Sample -InputFile' non ha alcun ruolo nella macro. Contiene semplicemente il file di dati di input di esempio a scopo dimostrativo.
- Una volta che i dati da 'Sample-InputFile' oppure il file di dati fornito dal cliente viene copiato nel primo foglio, ad esempio 'InputFile',
- Esegui la macro e gli scenari di test vengono creati automaticamente per ogni scenario di test in cui gli ID dell'ordine sono impostati come ID dei casi di test ( Nota: Ricordarsi di inserire l'identificatore univoco posizionato come prima colonna in InputFile).
- A partire da ora, non abbiamo impostato alcun tasto di scelta rapida per l'esecuzione della macro, invece dobbiamo eseguirlo tramite l'opzione di esecuzione sul file Visualizza -> Macro -> Seleziona la macro -> Modifica -> Finestra VBA.
- Il codice della macro gestisce dinamicamente l'aggiunta dei passaggi del test. Esegue un controllo, alla fine, per vedere se uno qualsiasi del valore del campo è vuoto, in caso affermativo, elimina il passaggio di prova per lo stesso che il passaggio non sarebbe richiesto per un campo vuoto. Per esempio, se guardi il file di input qui sotto, il 2ndrecord non ha alcun valore per la data di spedizione e la terza riga non ha alcun valore per la regione. Quindi, dopo l'esecuzione della macro, i test case creati automaticamente non avranno passaggi di test corrispondenti a questi valori vuoti.
Sample- InputFile
InputFile: dopo aver eseguito la copia, incolla i dati dal file di input di esempio al file di input
Nota:
- Non incollare l'intestazione della colonna dal foglio 'Sample-InputFile'.
- I campi evidenziati in giallo sono vuoti, quindi i passaggi del test corrispondenti a questi valori vuoti non devono essere creati tramite la macro.
Immagine del foglio ReadyTestcases dopo l'esecuzione della macro.
Codice VBA (Macro)
Sub Macro1() ScreenUpdating = False '-------- Assign the first column value of Inputfile sheet to first column of ReadyTestCases sheet' This is the TC Id -- ThisWorkbook.Sheets('InputFile').Activate nrow = ThisWorkbook.Sheets('InputFile').Cells(Rows.Count, 1).End(xlUp).Row ncol = ThisWorkbook.Sheets('InputFile').Cells(1, Columns.Count).End(xlToLeft).Column i = 1 j = 1 For i = 1 To nrow ThisWorkbook.Sheets('ReadyTestCases').Cells(i, 1) = ThisWorkbook.Sheets('InputFile').Cells(i, 1) Next i ' ---------------------Inserting 20 buffer blank rows for each row in InputFile sheet--------- lastrow = Sheets('InputFile').Cells(Sheets('InputFile').Rows.Count, 'A').End(xlUp).Row ThisWorkbook.Sheets('InputFile').Activate AddRows = 21 i = lastrow Do While i <> 1 Rows(i &; ':' & i + AddRows - 1).Insert i = i - 1 Loop ' Inserting 21 buffer blank rows for each row in ReadyTestCases sheet----------- lastrow = Sheets('ReadyTestCases').Cells(Sheets('ReadyTestCases').Rows.Count, 'A').End(xlUp).Row ThisWorkbook.Sheets('ReadyTestCases').Activate AddRowsTC = 21 j = lastrow Do While j <> 1 ' 1 because we dont need extra blank lines after last row Rows(j & ':' & j + AddRowsTC - 1).Insert j = j - 1 Loop '------- Input values into ReadyTestCases sheet from each row of inputfile sheet lastrow = Sheets('ReadyTestCases').Cells(Sheets('ReadyTestCases').Rows.Count, 'A').End(xlUp).Row Dim a a = 1 ThisWorkbook.Sheets('ReadyTestCases').Activate For a = 1 To lastrow ThisWorkbook.Sheets('ReadyTestCases').Cells(a,3) = ThisWorkbook.Sheets('InputFile').Cells(a, 2) ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 1, 3) = ThisWorkbook.Sheets('InputFile').Cells(a, 3) ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 2, 3) = ThisWorkbook.Sheets('InputFile').Cells(a, 4) ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 3, 3) = ThisWorkbook.Sheets('InputFile').Cells(a, 5) ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 4, 3) = ThisWorkbook.Sheets('InputFile').Cells(a, 6) ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 5, 3) = ThisWorkbook.Sheets('InputFile').Cells(a, 7) ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 6, 3) = ThisWorkbook.Sheets('InputFile').Cells(a, 8) ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 7, 3) = ThisWorkbook.Sheets('InputFile').Cells(a, 9) ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 8, 3) = ThisWorkbook.Sheets('InputFile').Cells(a, 10) ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 9, 3) = ThisWorkbook.Sheets('InputFile').Cells(a, 11) ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 10, 3) = ThisWorkbook.Sheets('InputFile').Cells(a, 12) ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 11, 3) = ThisWorkbook.Sheets('InputFile').Cells(a, 13) ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 12, 3) = ThisWorkbook.Sheets('InputFile').Cells(a, 14) ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 13, 3) = ThisWorkbook.Sheets('InputFile').Cells(a, 15) ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 14, 3) = ThisWorkbook.Sheets('InputFile').Cells(a, 16) ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 15, 3) = ThisWorkbook.Sheets('InputFile').Cells(a, 17) ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 16, 3) = ThisWorkbook.Sheets('InputFile').Cells(a, 18) ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 17, 3) = ThisWorkbook.Sheets('InputFile').Cells(a, 19) a = a + 21 Next a '------- Add verbiages reserved for each row lastrow = Sheets('ReadyTestCases').Cells(Sheets('ReadyTestCases').Rows.Count, 'C').End(xlUp).Row a = 1 ThisWorkbook.Sheets('ReadyTestCases').Activate For a = 1 To lastrow ThisWorkbook.Sheets('ReadyTestCases').Cells(a, 2) = 'Verify Order Date' ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 1, 2) = 'Verify Ship Date' ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 2, 2) = 'Verify Ship Mode' ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 3, 2) = 'Verify Customer Id' ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 4, 2) = 'Verify Customer Name' ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 5, 2) = 'Verify Segment' ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 6, 2) = 'Verify City' ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 7, 2) = 'Verify State' ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 8, 2) = 'Verify Postal Code' ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 9, 2) = 'Verify Region' ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 10, 2) = 'Verify Product Id' ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 11, 2) = 'Verify Category' ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 12, 2) = 'Verify Sub-Category' ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 13, 2) = 'Verify Product Name' ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 14, 2) = 'Verify Sales' ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 15, 2) = 'Verify Quantity' ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 16, 2) = 'Verify Discount' ThisWorkbook.Sheets('ReadyTestCases').Cells(a + 17, 2) = 'Verify Profit' a = a + 21 Next a '------Second last step- remove blank rows from ReadyTestCases and InputFile----- Deleteblankrows ('ReadyTestCases') 'call Delete blank row function for TC sheet ScreenUpdating = True End Sub ‘-------------------------------------------------------------------------------- Sub Deleteblankrows(ByVal Sheet As String) Dim wks As Worksheet Set wks = ThisWorkbook.Worksheets(Sheet) Dim i As Long wks.Activate lastrow = wks.Cells(Sheets(Sheet).Rows.Count, 'C').End(xlUp).Row With ActiveSheet For i = 1 To lastrow 'check each row of column B , if any row is empty then countA=0, delete that entire row If WorksheetFunction.CountBlank(Range(Cells(i, 2), Cells(i, 3))) = 1 Then Selection.Rows(i).EntireRow.Delete End If Next i End With End Sub
Spiegazione del codice
# 1) ScreenUpdating = False: Gli aggiornamenti dello schermo non saranno visibili impostando ScreenUpdating su False.
# 2) ThisWorkbook.Sheets ('InputFile'). Attiva: Questa istruzione attiva il foglio 'InputFile'.
# 3) nrow = ThisWorkbook.Sheets ('InputFile'). Cells (Rows.Count, 1) .End (xlUp) .Row: Questa istruzione ottiene il conteggio delle righe totali.
# 4) ncol = ThisWorkbook.Sheets ('InputFile'). Cells (1, Columns.Count) .End (xlToLeft) .Column: Questa istruzione ottiene il conteggio delle colonne totali.
# 5) i = 1: Questa istruzione inizializza i con 1.
# 6) j = 1: Questa istruzione inizializza j con 1.
# 7) Per i = 1 To nrow
ThisWorkbook.Sheets ('ReadyTestCases'). Cells (i, 1) = ThisWorkbook.Sheets ('InputFile'). Cells (i, 1)
Avanti i: Questo frammento di copia del ciclo For incolla il valore della prima colonna (ID ordine in questo caso) del foglio 'InputFile' in ciascuna riga del foglio 'ReadyTestCases' come ID testcase.
# 8) lastrow = Sheets ('InputFile'). Celle (Sheets ('InputFile'). Rows.Count, 'A'). End (xlUp) .Row: Questa istruzione ricalcola il conteggio dell'ultima riga di InputFile.
# 9) AddRows = 21: Questa istruzione assegna 21 alla variabile AddRows. A questa variabile è stato assegnato 21 con l'intenzione di inserire 21 righe vuote aggiuntive per ogni caso di test per l'aggiunta di fasi di test.
# 10) i = lastrow: Questa istruzione assegna l'ultimo conteggio dell'ultima riga a i.
# 11) Fai mentre i 1
Righe (i & “:” e i + AddRows - 1) .Insert
io = io - 1
Ciclo continuo : Questa istruzione aggiunge 20 righe per ogni caso di test partendo dal basso verso l'alto.
# 12) lastrow = Fogli ('ReadyTestCases'). Celle (Sheets ('ReadyTestCases'). Rows.Count, 'A'). End (xlUp) .Row: Questa istruzione ricalcola l'ultimo conteggio totale delle righe.
# 13) ThisWorkbook.Sheets ('ReadyTestCases'). Attivare: Il secondo foglio si attiva tramite questa dichiarazione.
# 14) Diminuisci a: Questa istruzione dichiara la variabile a.
# 15) a = 1: Questa istruzione assegna 1 a a.
# 16) Per a = 1 Per ultima fila
ThisWorkbook.Sheets ('ReadyTestCases'). Cells (a, 3) = ThisWorkbook.Sheets ('InputFile'). Celle (a, 2)
ThisWorkbook.Sheets ('ReadyTestCases'). Cells (a + 1, 3) = ThisWorkbook.Sheets ('InputFile'). Celle (a, 3)
ThisWorkbook.Sheets ('ReadyTestCases'). Cells (a + 2, 3) = ThisWorkbook.Sheets ('InputFile'). Celle (a, 4)
ThisWorkbook.Sheets ('ReadyTestCases'). Cells (a + 3, 3) = ThisWorkbook.Sheets ('InputFile'). Celle (a, 5)
ThisWorkbook.Sheets ('ReadyTestCases'). Cells (a + 4, 3) = ThisWorkbook.Sheets ('InputFile'). Celle (a, 6)
ThisWorkbook.Sheets ('ReadyTestCases'). Cells (a + 5, 3) = ThisWorkbook.Sheets ('InputFile'). Celle (a, 7)
ThisWorkbook.Sheets ('ReadyTestCases'). Cells (a + 6, 3) = ThisWorkbook.Sheets ('InputFile'). Celle (a, 8)
ThisWorkbook.Sheets ('ReadyTestCases'). Cells (a + 7, 3) = ThisWorkbook.Sheets ('InputFile'). Celle (a, 9)
ThisWorkbook.Sheets ('ReadyTestCases'). Cells (a + 8, 3) = ThisWorkbook.Sheets ('InputFile'). Celle (a, 10)
ThisWorkbook.Sheets ('ReadyTestCases'). Cells (a + 9, 3) = ThisWorkbook.Sheets ('InputFile'). Celle (a, 11)
ThisWorkbook.Sheets ('ReadyTestCases'). Cells (a + 10, 3) = ThisWorkbook.Sheets ('InputFile'). Celle (a, 12)
ThisWorkbook.Sheets ('ReadyTestCases'). Cells (a + 11, 3) = ThisWorkbook.Sheets ('InputFile'). Celle (a, 13)
ThisWorkbook.Sheets ('ReadyTestCases'). Cells (a + 12, 3) = ThisWorkbook.Sheets ('InputFile'). Celle (a, 14)
ThisWorkbook.Sheets ('ReadyTestCases'). Cells (a + 13, 3) = ThisWorkbook.Sheets ('InputFile'). Celle (a, 15)
ThisWorkbook.Sheets ('ReadyTestCases'). Cells (a + 14, 3) = ThisWorkbook.Sheets ('InputFile'). Celle (a, 16)
ThisWorkbook.Sheets ('ReadyTestCases'). Cells (a + 15, 3) = ThisWorkbook.Sheets ('InputFile'). Celle (a, 17)
ThisWorkbook.Sheets ('ReadyTestCases'). Cells (a + 16, 3) = ThisWorkbook.Sheets ('InputFile'). Celle (a, 18)
ThisWorkbook.Sheets ('ReadyTestCases'). Cells (a + 17, 3) = ThisWorkbook.Sheets ('InputFile'). Celle (a, 19)
a = a + 21
Avanti a: Lo snippet del ciclo for mappa i valori di ogni colonna del foglio InputFile rispetto a ciascuna fase di test per ogni id caso di test.
# 17) lastrow = Fogli ('ReadyTestCases'). Celle (Sheets ('ReadyTestCases'). Rows.Count, 'C'). End (xlUp) .Row : Questa istruzione ricalcola il foglio ReadyTestCases del conteggio totale delle righe dopo l'aggiunta di 21 righe per ogni ID del test case.
# 18) a = 1: Questa istruzione assegna 1 alla variabile a.
# 19) ThisWorkbook.Sheets ('ReadyTestCases'). Attiva: Questa istruzione attiva il foglio ReadyTestCases.
# 20) Per a = 1 per ultimo
ThisWorkbook.Sheets ('ReadyTestCases'). Cells (a, 2) = 'Verifica data ordine'
ThisWorkbook.Sheets ('ReadyTestCases'). Cells (a + 1, 2) = 'Verifica data di spedizione'
ThisWorkbook.Sheets ('ReadyTestCases'). Cells (a + 2, 2) = 'Verifica modalità spedizione'
ThisWorkbook.Sheets ('ReadyTestCases'). Cells (a + 3, 2) = 'Verifica ID cliente'
ThisWorkbook.Sheets ('ReadyTestCases'). Cells (a + 4, 2) = 'Verifica nome cliente'
ThisWorkbook.Sheets ('ReadyTestCases'). Cells (a + 5, 2) = 'Verifica segmento'
ThisWorkbook.Sheets ('ReadyTestCases'). Cells (a + 6, 2) = 'Verifica città'
ThisWorkbook.Sheets ('ReadyTestCases'). Cells (a + 7, 2) = 'Verify State'
ThisWorkbook.Sheets ('ReadyTestCases'). Cells (a + 8, 2) = 'Verifica codice postale'
ThisWorkbook.Sheets ('ReadyTestCases'). Cells (a + 9, 2) = 'Verifica regione'
ThisWorkbook.Sheets ('ReadyTestCases'). Cells (a + 10, 2) = 'Verifica ID prodotto'
ThisWorkbook.Sheets ('ReadyTestCases'). Cells (a + 11, 2) = 'Verifica categoria'
ThisWorkbook.Sheets ('ReadyTestCases'). Cells (a + 12, 2) = 'Verifica sottocategoria'
ThisWorkbook.Sheets ('ReadyTestCases'). Cells (a + 13, 2) = 'Verifica nome prodotto'
ThisWorkbook.Sheets ('ReadyTestCases'). Cells (a + 14, 2) = 'Verifica vendite'
ThisWorkbook.Sheets ('ReadyTestCases'). Cells (a + 15, 2) = 'Verifica quantità'
ThisWorkbook.Sheets ('ReadyTestCases'). Cells (a + 16, 2) = 'Verifica sconto'
ThisWorkbook.Sheets ('ReadyTestCases'). Cells (a + 17, 2) = 'Verifica profitto'
a = a + 21
Avanti a: questo frammento di ciclo For aggiunge passaggi di test statici per ogni caso di test.
# 21) Deleteblankrows ('ReadyTestCases'): Chiama la funzione Deleteblankrow function per 'Ready TestCases’sheet'.
# 22) ScreenUpdating = True: Ciò consente di visualizzare gli aggiornamenti dello schermo che si verificano come parte dell'esecuzione della macro.
# 23) Sub Deleteblankrows (ByVal Sheet As String): Il codice seguente è per la funzione Deletblankrows che controllerà dinamicamente se ci sono valori vuoti nei campi dati. In caso affermativo, la fase di test creata per i dati vuoti verrà eliminata a sua volta eliminando tali righe.
# 24) Dim wks come foglio di lavoro: Questa istruzione dichiara la variabile wks come foglio di lavoro.
# 25) Imposta wks = ThisWorkbook.Worksheets (Sheet): Questa istruzione assegna il foglio wks fornito come parametro di input.
# 26) Dim i finché: Questa fodera dichiara che io lungo.
# 28) wks.Attiva: Questa istruzione attiva il foglio.
# 29) lastrow = wks.Cells (Sheets (Sheet) .Rows.Count, 'C'). End (xlUp) .Row: Questa istruzione ottiene il conteggio dell'ultima riga del foglio.
# 30) Per i = 1 Per ultima fila: Il ciclo For itera dalla prima riga all'ultima riga.
# 31) Se WorksheetFunction.CountBlank (Range (Cells (i, 2), Cells (i, 3))) = 1 Allora: Questa condizione controlla se per ogni riga, la seconda e la terza colonna contano per il valore vuoto come 1.
# 32) Selection.Rows (i) .EntireRow.Delete: Questa istruzione elimina la riga selezionata se la condizione è vera.
Esempio di utilizzo n. 4
Le formule di Excel nel modello Test stime possono essere eseguite anche utilizzando una macro. Viene creato anche un grafico utilizzando la macro.
Demo
- Viene mantenuto un foglio 'Stime' che consentirà agli utenti di aggiungere ore stimate per le fasi di test a partire dalla comprensione dei requisiti aziendali fino alla creazione, esecuzione e rielaborazione sull'aggiornamento degli script di test.
- Le celle evidenziate in verde sono abilitate per l'inserimento dell'utente. Questi sono i campi di input.
- Quelli evidenziati in blu sono auto derivati.
- Il secondo foglio include le metriche di rilavorazione e il terzo foglio include le metriche di complessità.
- L'utente inserisce la dimensione della complessità in termini di H, L e M nella colonna D e la colonna E recupera automaticamente il fattore di complessità utilizzando la vlookup dal 'Metriche di complessità' foglio.
- L'utente inserisce le dimensioni della rilavorazione in termini di H, L e M nella colonna F e la colonna G recupera automaticamente il fattore di complessità utilizzando la vlookup dal foglio 'Metriche di rilavorazione'.
- I fattori vengono quindi utilizzati nella colonna H per recuperare gli sforzi totali per la stima.
- Un'altra macro quando viene eseguita prepara il grafico e lo aggiunge al quarto foglio 'Grafico'.
- Le formule incluse sono guidate tramite la macro utilizzando il tasto di scelta rapida CTRL + MAIUSC + E.
Stime
Metriche di rielaborazione
Metriche di complessità
Grafico
Codice VBA (macro) per foglio preventivi
' Keyboard Shortcut: Ctrl+Shift+E ThisWorkbook.Sheets(1).Activate Sheets('Estimates').Cells(4, 8) = Sheets('Estimates').Cells(4, 2) * Sheets('Estimates').Cells(4, 3) * Sheets('Estimates').Cells(4, 5) * Sheets('Estimates').Cells(4, 7) Sheets('Estimates').Cells(5, 8) = Sheets('Estimates').Cells(5, 2) * Sheets('Estimates').Cells(5, 3) * Sheets('Estimates').Cells(5, 5) * Sheets('Estimates').Cells(5, 7) Sheets('Estimates').Cells(6, 8) = Sheets('Estimates').Cells(6, 2) * Sheets('Estimates').Cells(6, 3) * Sheets('Estimates').Cells(6, 5) * Sheets('Estimates').Cells(6, 7) Sheets('Estimates').Cells(7, 8) = Sheets('Estimates').Cells(7, 2) * Sheets('Estimates').Cells(7, 3) * Sheets('Estimates').Cells(7, 5) * Sheets('Estimates').Cells(7, 7) Sheets('Estimates').Cells(8, 8) = Sheets('Estimates').Cells(8, 2) * Sheets('Estimates').Cells(8, 3) * Sheets('Estimates').Cells(8, 5) * Sheets('Estimates').Cells(8, 7) Sheets('Estimates').Cells(9, 8) = Sheets('Estimates').Cells(9, 2) * Sheets('Estimates').Cells(9, 3) * Sheets('Estimates').Cells(9, 5) * Sheets('Estimates').Cells(9, 7) Sheets('Estimates').Cells(10, 8) = Sheets('Estimates').Cells(10, 2) * Sheets('Estimates').Cells(10, 3) * Sheets('Estimates').Cells(10, 5) * Sheets('Estimates').Cells(10, 7) Sheets('Estimates').Cells(11, 8) = Sheets('Estimates').Cells(4, 8) + Sheets('Estimates').Cells(5, 8) + Sheets('Estimates').Cells(6, 8) + Sheets('Estimates').Cells(7, 8) + Sheets('Estimates').Cells(8, 8) + Sheets('Estimates').Cells(9, 8) + Sheets('Estimates').Cells(10, 8) ‘--------------------------------------------------- For i = 3 To 10 Sheets('Chart').Cells(i - 2, 1) = Sheets('Estimates').Cells(i, 1) Sheets('Chart').Cells(i - 2, 2) = Sheets('Estimates').Cells(i, 8) Next i End Sub
Spiegazione del codice
(a) ThisWorkbook.Sheets (1) .Activat: Il primo foglio 'Stime' si attiva.
(b) Fogli ('Stime'). Celle (4, 8) = Fogli ('Stime'). Celle (4, 2) * Fogli ('Stime'). Celle (4, 3) * Fogli ('Stime' ) .Cell (4, 5) * Fogli ('Stime'). Celle (4, 7): Questa istruzione calcola la colonna B * colonna C * colonna E * colonna G e assegna alla colonna H per la riga 4.
(c) Fogli ('Stime'). Celle (5, 8) = Fogli ('Stime'). Celle (5, 2) * Fogli ('Stime'). Celle (5, 3) * Fogli ('Stime' ) .Cell (5, 5) * Fogli ('Stime'). Celle (5, 7): Questa istruzione calcola la colonna B * colonna C * colonna E * colonna G e assegna alla colonna H per la riga 5.
(d) Fogli ('Stime'). Celle (6, 8) = Fogli ('Stime'). Celle (6, 2) * Fogli ('Stime'). Celle (6, 3) * Fogli ('Stime' ) .Cell (6, 5) * Fogli ('Stime'). Celle (6, 7): Questa istruzione calcola la colonna B * colonna C * colonna E * colonna G e assegna alla colonna H per la riga 6.
(e) Fogli ('Stime'). Celle (7, 8) = Fogli ('Stime'). Celle (7, 2) * Fogli ('Stime'). Celle (7, 3) * Fogli ('Stime' ) .Cell (7, 5) * Fogli ('Stime'). Celle (7, 7): Questa istruzione calcola la colonna B * colonna C * colonna E * colonna G e assegna alla colonna H per la riga 7.
(f) Fogli ('Stime'). Celle (8, 8) = Fogli ('Stime'). Celle (8, 2) * Fogli ('Stime'). Celle (8, 3) * Fogli ('Stime' ) .Cell (8, 5) * Fogli ('Stime'). Celle (8, 7): Questa istruzione calcola la colonna B * colonna C * colonna E * colonna G e assegna alla colonna H per la riga 8.
(g) Fogli ('Stime'). Celle (9, 8) = Fogli ('Stime'). Celle (9, 2) * Fogli ('Stime'). Celle (9, 3) * Fogli ('Stime' ) .Cell (9, 5) * Fogli ('Stime'). Celle (9, 7): Questa istruzione calcola la colonna B * colonna C * colonna E * colonna G e assegna alla colonna H per la riga 9.
(h) Fogli ('Stime'). Celle (10, 8) = Fogli ('Stime'). Celle (10, 2) * Fogli ('Stime'). Celle (10, 3) * Fogli ('Stime' ) .Cell (10, 5) * Fogli ('Stime'). Celle (10, 7): Questa istruzione calcola la colonna B * colonna C * colonna E * colonna G e assegna alla colonna H per la riga 10.
(i) Fogli ('Stime'). Celle (11, 8) = Fogli ('Stime'). Celle (4, 8) + Fogli ('Stime'). Celle (5, 8) + Fogli ('Stime' ) .Cell (6, 8) + Fogli ('Stime'). Celle (7, 8) + Fogli ('Stime'). Celle (8, 8) + Fogli ('Stime'). Celle (9, 8) + Fogli ('Stime'). Celle (10, 8): Questa istruzione somma la cella H2 a H10 e assegna il valore finale a H11. Questo valore fornisce lo sforzo totale (in ore).
(j) Per i = da 3 a 10
Fogli ('Grafico'). Celle (i - 2, 1) = Fogli ('Stime'). Celle (i, 1)
Fogli ('Grafico'). Celle (i - 2, 2) = Fogli ('Stime'). Celle (i, 8)
Avanti io: Questa copia per ciclo incolla i dati dalla colonna 1 e dalla colonna 8 del foglio delle stime al foglio grafico. Questo viene fatto in modo che i dati del foglio grafico possano essere utilizzati per preparare un grafico a torta. C'è un'altra macro scritta per il foglio 'Grafico' che prepara un grafico per lo stesso.
Codice VBA (macro) per foglio di grafici
Sub CreateChart() Dim rng As Range Dim cht As Object ThisWorkbook.Sheets('Chart').Activate Set rng = ActiveSheet.Range('A2:B8') Set est = ThisWorkbook.Sheets('Chart').Shapes.AddChart2 est.Chart.SetSourceData Source:=rng est.Chart.ChartType = xl3DPieExploded est.Chart.HasTitle = True est.Chart.ChartTitle.Text = 'Test Estimates' est.Chart.SetElement (msoElementDataLabelCenter) est.Chart.SetElement (msoElementLegendBottom) End Sub
Spiegazione del codice
- Dim rng come intervallo: Questa istruzione dichiara rng come valore di intervallo.
- Dim è come oggetto: Questa istruzione dichiara est come valore dell'oggetto.
- Questa cartella di lavoro. Fogli ('Grafico'). Attiva: Questa istruzione attiva il foglio grafico.
- Imposta rng = ActiveSheet.Range ('A2: B8'): L'intervallo da A2 a B8 del foglio-grafico è impostato su rng.
- Imposta est = ThisWorkbook.Sheets ('Chart'). Shapes.AddChart2: Questa istruzione viene utilizzata per avviare la creazione di un nuovo grafico sul foglio grafico.
- est.Chart.SetSourceData Origine: = rng: Questa dichiarazione fornisce un intervallo di dati per la contemplazione nel diagramma.
- est.Chart.ChartType = xl3DPieExploded: Il tipo di grafico è impostato su Torta 3D di tipo Esploso. xl3DPieExploded aiuta a determinare questo tipo di grafico.
- est.Chart.HasTitle = True: Questa istruzione verifica se il grafico ha già un titolo.
- est.Chart.ChartTitle.Text = 'Test stime': Questa istruzione sostituisce il titolo del grafico in 'Test stime'.
- est.Chart.SetElement (msoElementDataLabelCenter): Questa istruzione imposta le etichette dei dati e le legende per il grafico.
- est.Chart.SetElement (msoElementLegendBottom): Questa istruzione imposta le etichette dei dati nella parte inferiore del grafico.
Modi per eseguire una macro
Una macro potrebbe essere eseguita utilizzando 4 modi:
- Utilizzando l'icona Esegui nella finestra dell'editor VBA.
- Nel file Excel selezionare l'opzione di menu Visualizza -> Macro -> Visualizza macro -> Seleziona il nome della macro e seleziona Esegui.
- Crea un collegamento durante la creazione della macro e premendo i tasti di scelta rapida si attiverà l'esecuzione della macro.
- Il modo più intuitivo è creare un pulsante di azione ( Per esempio. Pulsante di comando) a cui sarebbe assegnata una macro che, se cliccata, avrebbe attivato l'esecuzione della macro.
Vedremo come aggiungere un pulsante di comando e assegnare una macro al pulsante. Il pulsante quando viene cliccato eseguirà l'esecuzione della macro.
Aggiungi un pulsante di controllo moduli in Excel
- Selezionare Menu 'Sviluppatore' -> Inserisci -> Controlli modulo -> icona Seleziona pulsante e aggiungi il pulsante sul foglio Excel.
- Immettere il nome e il valore di testo per il pulsante. Il nome del pulsante viene utilizzato nella codifica VBA per riconoscere questo pulsante di comando mentre il testo è ciò che viene visualizzato sul pulsante.
- Ora fai clic con il pulsante destro del mouse sul pulsante di comando e seleziona l'opzione 'Assegna macro' , viene visualizzato l'elenco delle macro, selezionare il nome della macro che si desidera assegnare.
- Una volta assegnata la macro, cliccando sul pulsante si avvia l'esecuzione della macro assegnata.
- In questo esempio, il 'Ottieni stime dei test' pulsante è assegnato a 'Stime' macro.
- Allo stesso modo, aggiungeremo un pulsante di comando per il foglio Grafico e assegneremo la macro per Grafico per attivare la generazione del grafico.
- Facendo clic sul file 'Crea grafico' Il pulsante esegue la macro per il grafico. Ciò migliora l'usabilità della macro.
Conclusione
Questi erano pochi esempi in tempo reale che potrebbero essere una parte della routine quotidiana del tester al lavoro che potrebbero essere identificati in modo intelligente per la generazione di macro e potrebbero, quindi, risparmiare una notevole quantità di tempo su sforzi manuali irrilevanti e ripetitivi automatizzando l'attività.
Gli screenshot pertinenti, il codice VBA e la comprensione dettagliata di ogni riga di codice sono stati trattati in questo articolo. Spero che questo dia un buon vantaggio per i QA su come trasformare se stessi da una mentalità di test manuale a una mentalità macro.
Per le persone che credono che il lavoro dei tester manuali sia puramente un lavoro non tecnico, proviamo che si sbagliano attraverso l'applicazione richiesta delle conoscenze tecniche per migliorare la produttività.
Autore: Questo utile post approfondito è stato scritto da Shobha D. Lavora come Project Lead e ha più di 9 anni di esperienza in Manual, Automation (IBM RFT e Selenium using Java) e API testing.
Lettura consigliata
- Lavorare con oggetti VBScript Excel
- Creazione di Selenium Framework e accesso ai dati di test da Excel - Selenium Tutorial # 21
- 5 attività di test più comuni I tester dimenticano di testare (e come evitarlo)
- Le 5 principali cose che un tester deve avere per Excel (e le prospettive mutevoli del tester del software)
- Attività secondaria JIRA con esempio (Attività secondaria Crea JIRA)