how automate repetitive qa tasks using excel macros
Aquesta guia detallada sobre la mentalitat macro de QA explica com automatitzar tasques de control de qualitat repetitives mitjançant macros d'Excel amb exemples i captures de pantalla de fulls d'Excel:
La necessitat d’automatització al món actual és una de les demandes essencials i creixents. Avui en dia tothom busca alguna cosa que faciliti el seu treball o les molèsties que implica la feina de rutina.
Avui en dia, ningú no vol visitar una botiga de telefonia mòbil, mantenir-se en cua per recarregar el telèfon, és convenient no visitar-lo físicament enlloc, sinó recarregar-lo en línia en una fracció de segon.
Començant des del pagament de les vostres factures de serveis públics mitjançant la banca per Internet, la reserva i el seguiment del vostre taxi en línia, la compra de coses en línia a diversos llocs de comerç electrònic fins a l’ús de diferents electrodomèstics com rentadores, microones, guèisers i telèfons intel·ligents en constant evolució, el món actual és realment desitjos de productes intel·ligents i automatitzats en forma de serveis o aparells.
En aquest article, no parlarem sobre l’ús de cap eina d’automatització ni res sobre intel·ligència artificial o aprenentatge automàtic, però el focus se centrarà en el simple ús d’Excel per automatitzar les tasques diàries de la QA.
Què aprendreu:
Macro Mindset de QA
Els provadors manuals solen tenir la mentalitat que jo, que sóc un provador manual, no tinc res a veure amb res tècnic o, dit d’una altra manera, ‘el coneixement de codificació no és la meva tassa de te’. Probablement, aquesta sigui la mentalitat equivocada que podria aturar el nostre creixement com a enginyers.
Un control de qualitat manual té moltes tasques diàries que poden ser repetitives després del mateix flux de treball. Un control de qualitat pot identificar molt bé aquestes tasques i automatitzar-les mitjançant macros Excel i / o fórmules.
Això pot ajudar de dues maneres:
- Redueix el temps consumit en esforços manuals.
- A més, inspira el control de qualitat per aprendre i adaptar-se al pensament lògic i a la millora de la capacitat tècnica.
Es poden automatitzar les coses per a totes les fases de proves que es detallen a continuació:
- Planificació i estimació de proves.
- Disseny de proves o preparació de casos.
- Actualització de l'estat d'execució de la prova.
- Informe de prova i creació de mètriques.
Configuració ràpida del context
# 1) Un excel guardat amb. L'extensió xlsxm és un Excel habilitat per a macros.
# 2) Per activar la macro en un Excel, seleccioneu Fitxer -> Opcions -> Centre de confiança -> Configuració del centre de confiança -> Configuració de macro -> Seleccioneu el botó d'opció 'Habilita totes les macros' i marqueu la casella de selecció 'Confieu en l'accés al model d'objectes del projecte VBA'. Feu clic a D'acord.
# 3) Seleccioneu el menú Visualitza -> Macros -> Grava macros -> Realitza alguna activitat i Atura les macros . Podeu editar la macro i veure el codi VBA registrat al fitxer Editor VBA finestra. De la mateixa manera, podeu afegir explícitament els codis per crear una macro.
# 4) Veurem alguns exemples d’aquestes tasques repetitives que podrien ser bons candidats a l’automatització mitjançant macros / fórmules Excel.
Exemple d'ús núm. 1
Al final de cada fase funcional, cal que hi hagi alguns casos de prova identificats per a la regressió des de la suite funcional. Aquest és un procés que cal seguir en tots els esprint o iteracions.
Solució
Per reduir l'esforç d'identificar i crear manualment una suite de regressió, es pot implementar el següent procés innovador.
- Podeu crear un full amb casos de proves funcionals amb una columna addicional per marcar els casos / escenaris de prova com a Sí / No per a la regressió.
- A continuació, creeu una macro per a la mateixa, de manera que quan s’executi la macro, es copiaran tots els casos / escenaris de prova amb regressió marcada com a 'Sí' a un altre full.
- Per tant, això evitarà un exercici addicional de revisió de tots els casos de prova funcionals al final del sprint i, després, esforços addicionals per aconseguir que cada cas de prova s’extreu a la suite de regressió.
Demostració
- El primer full 'FunctionalTestScenarios' conté tots els escenaris de prova funcionals / casos de prova.
- Hi ha una columna addicional 'Voleu incloure'l a la suite de regressió?' afegit al final de les columnes de prova per marcar 'Sí' o 'No' identificant si cadascun dels escenaris de prova s'ha d'incloure a la suite de regressió.
- Hi ha un segon full creat com a 'RegressionSuite' i això recuperarà automàticament tots els escenaris de proves de regressió a través de la macro.
- CTRL + MAJÚS + S s'estableix com la drecera per executar la macro.
FunctionalTestScenarios
RegressionSuite
Codi 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
Explicació del codi
- Fulls de càlcul ('FunctionalTestScenarios'). Activa: Quan hi ha diversos fulls a Excel, el mètode Activa activa el primer full i, per tant, el focus es defineix explícitament al primer full.
- Files ('1: 1'). Seleccioneu: Aquesta sentència selecciona la primera fila per a totes les columnes del primer full.
- Selecció.Filtre automàtic: Aquesta afirmació aplica el filtre a la primera fila seleccionada.
- Full 1.Rang ('$ A $ 1: $ D $ 38'). Camp del filtre automàtic: = 4, criteri1: = 'Sí': Aquesta afirmació aplica el filtre automàtic a la columna número 4, és a dir, 'Voleu incloure'l a la suite de regressió?' i filtra els registres pel valor 'Sí'.
- Lastrow = Fulls ('FunctionalTestScenarios'). Cel·les (Fulls ('FunctionalTestScenarios'). Files.Count, 'A'). End (xlUp). Fila: Aquesta sentència obté l'últim recompte de files del primer full.
- Rang ('A2: C2' i Lastrow). Seleccioneu: Aquesta sentència selecciona totes les files i columnes del primer full amb Inclou al conjunt de regressió? = Sí.
- Selecció.Còpia: Aquesta declaració copia tots els registres seleccionats.
- Fulls de càlcul ('RegressionSuite'). Seleccioneu: Aquesta afirmació obre el 2ndfull.
- Rang ('A2'). Seleccioneu: Aquesta afirmació selecciona la cel·la A2 de la 2ndfull.
- Selection.PasteSpecial Paste: = xlPasteValues, Operation: = xlNone, SkipBlanks _: = False, Transpose: = False: Aquesta declaració copia el valor de la cel·la d'origen seleccionada al full de destinació. L'interval de cel·les de destinació només conté els valors calculats mitjançant les fórmules. Com a alternativa, també es pot utilitzar Enganxar: = xlValues. No s’omet cap espai en blanc. Les cèl·lules font no es transposen i no es fan operacions matemàtiques.
Exemple d'ús núm. 2
Hi ha vegades que cal crear casos de prova per a 100 estats o 1000 entitats (com ara 1000 formularis d'assegurança). Els passos de prova d’aquesta enorme llista d’estats o entitats poden ser els mateixos i repetitius.
Tot i això, la preparació dels casos de prova podria ser una de les activitats que requereix més temps, ja que tenir molt present el document del cas de prova és molt important per incorporar les estimacions requerides del client i fer que l'equip de control de qualitat provi cadascun dels casos de prova els terminis correctament estimats.
Solució
En aquests casos, les llargues hores de preparació de casos de prova es poden reduir a una fracció de segons mitjançant la macro.
- Podeu crear un full en què només proporcioneu l'entrada com a identificador de cas de prova i la llista única d'entitats.
- Creeu una macro que, quan s'executa, afegeix línies repetitives de passos de prova per a cadascuna d'aquestes entitats i el document del cas de prova estigui llest en pocs segons sense haver de gastar la quantitat substancial d'esforços manuals necessaris per preparar els casos de prova.
Demostració
- El primer full 'GetTestcasesASAP' és l'únic full basat en macro que es troba en blanc inicialment.
- Un altre full 'Dades d'entrada de mostra' no té cap paper a la macro. Simplement conté les dades d'entrada de mostra amb finalitats de demostració.
- Copieu i enganxeu dades del rang de dades d’entrada de mostra A2 a B12 al primer full.
- Podeu copiar-enganxar les dades d'entrada en el format - Columna A = ……. i la columna B =.
- Un cop preparades les dades d'entrada, premeu CTRL + MAJÚS + T com a tecles de drecera per executar la macro.
- Els passos de prova s’afegeixen automàticament per a cada identificador de cas de prova i el document del cas de prova es prepara en pocs segons.
GetTestcasesASAP
Dades d’entrada de mostra
Les dades d’entrada s’enganxen al primer full.
Imatge mentre s’executa la macro prement CTRL + MAJÚS + T.
Codi 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
Explicació del codi
(a) Fulls de càlcul ('GetTestcasesASAP'). Activeu: Aquesta afirmació activa el primer full.
preguntes i respostes d’entrevistes de control de qualitat pdf
(b) lastrow = Fulls de càlcul ('GetTestcasesASAP'). Cel·les (Fulls de càlcul ('GetTestcasesASAP'). Files.Compte, 'A'). Final (xlUp). Fila: Aquesta sentència obté l'últim recompte de files. Aquesta vegada obtindrà el nombre total de recompte de files per als identificadors inicials de casos de prova acabats d'afegir com a part de les dades d'entrada abans de l'execució de la macro.
(c) Atenueu AddRows com a enter: Aquesta sentència declara la variable AddRows com un tipus de dades enter.
(d) AddRows = 5: Aquesta sentència inicialitza AddRows amb 5. La variable s'utilitza per inserir unes línies després de cada identificador de cas de prova, de manera que es poden afegir passos de prova estàtics per a cada cas de prova.
(e) Dim i Integer: Aquesta sentència declara la variable i com a enter.
(f) i = lastrow : Aquesta sentència assigna el recompte inicial de la darrera fila a la variable i.
(g) Feu-ho mentre i 1 : Això fa que el bucle insereix 6 files en blanc després de cada identificador de cas de prova. El bucle comença des de l'últim identificador de cas de prova fins al primer identificador de cas de prova.
Files (i & “:” & i + AddRows). Insereix
i = i - 1
Bucle
(h) ScreenUpdating = True : Aquesta afirmació fa visible totes les actualitzacions de pantalla. Per tant, el rendiment de la macro pot ser lleugerament lent. Per tal d’optimitzar el rendiment de la macro, també podeu configurar-la ScreenUpdating = Fals .
Si configureu ScreenUpdating a False, es millora el rendiment de la macro i se n’accelera l'execució, però no podreu veure els canvis intermitents que es produeixen durant l'execució de la macro. En canvi, els canvis apareixeran només un cop finalitzada l'execució de la macro.
(i) lastrow = Fulls de càlcul ('GetTestcasesASAP'). Cel·les (Fulls de càlcul ('GetTestcasesASAP'). Files.Compte, 'A'). Final (xlUp) .Fila : Aquesta sentència torna a calcular el darrer recompte de files després d'afegir 6 files noves per a cada caixa de proves.
(j) i = 2
(k) Mentre jo<= lastrow + 6
Fulls de càlcul ('GetTestcasesASAP'). Cel·les (i, 3) = 'Validar les combinacions de factors de taxa'
Fulls ('GetTestcasesASAP'). Cel·les (i + 1, 3) = 'Programacions i execucions de treballs per lots. '
Fulls ('GetTestcasesASAP'). Cel·les (i + 2, 3) = 'Comissió de càlculs de liquidacions'
Fulls de càlcul ('GetTestcasesASAP'). Cel·les (i + 3, 3) = 'Pressupost ràpid i detallat'
Fulls ('GetTestcasesASAP'). Cel·les (i + 4, 3) = 'Il·lustració de beneficis'
Fulls de càlcul ('GetTestcasesASAP'). Cel·les (i + 5, 3) = 'Validació resum dels beneficis'
i = i + 7
Aplicar
Aquest fragment del bucle while afegeix 6 passos de proves estàtiques de prova per a cada cas de prova establint aquestes línies posteriorment després de cada identificador de cas de prova.
Els passos de prova estàtics afegits per a cada cas de prova són els següents:
- Pas 1: Valideu les combinacions de factors-taxes.
- Pas 2: Programacions i tirades per lots.
- Pas 3: Comissió de liquidacions de càlculs.
- Pas 4: Pressupost ràpid i detallat.
- Pas 5: Il·lustració de beneficis.
- Pas 6: Validació resum de beneficis.
A més, també empeny el següent Id de cas de prova de la seqüència a 6 + 2, és a dir, a 8thfila.
Per exemple: Si TC1 es troba a la primera fila, els passos s’afegeixen de la segona a la setena fila i TC2 s’empeny a la vuitena fila. També es fa una manera similar per a la resta d’identificadors de casos de prova.
Exemple d'ús núm. 3
Hi ha casos en què el client proporciona un enorme fitxer de dades a prop de 1.000 registres o més i escriure casos de prova per a aquests enormes registres i assignar les dades a cada pas de prova és una tasca tediosa. La macro pot reduir els dies d’esforç fins a uns quants minuts, estalviant així el temps de preparació del cas de prova.
Solució
El fitxer de dades proporcionat pel client es pot copiar al full habilitat per a macros. Quan s’executa la macro, els casos de prova es creen automàticament al segon full mapejant automàticament les dades de prova amb cada pas de prova per a cada cas de prova.
Demostració
- El primer full 'InputFile' i el segon full 'ReadyTestCases' són els principals col·laboradors de la macro.
- Un altre full 'Sample -InputFile' no té cap paper a la macro. Només conté el fitxer de dades d'entrada de mostra amb finalitats de demostració.
- Un cop fetes les dades de 'Sample-InputFile' o el fitxer de dades proporcionat pel client es copia al primer full, és a dir, 'InputFile',
- Executeu la macro i els casos de prova es creen automàticament per a cada cas de prova en què els identificadors de comanda es defineixen com a identificadors de casos de prova ( Nota: Recordeu col·locar l’identificador únic col·locat com a primera columna a InputFile).
- A hores d'ara, no tenim cap tecla de drecera establerta per a l'execució de macro, sinó que l'hem d'executar mitjançant l'opció d'execució de Visualitza -> Macros -> Seleccioneu la macro -> Edita -> Finestra VBA.
- El codi macro gestiona els passos de la prova de manera dinàmica. Al final, fa una comprovació per veure si algun dels valors del camp està en blanc; en cas afirmatiu, elimina el pas de prova del mateix que no seria necessari el pas per a un camp en blanc. Per exemple, si mireu el fitxer d’entrada següent, el 2ndel registre no té cap valor per a la data d’enviament i la tercera fila no té valor per a la regió. Per tant, després de l'execució de la macro, els casos de prova que es creen automàticament no tindran passos de prova corresponents a aquests valors en blanc.
Mostra-fitxer d’entrada
InputFile: després d’efectuar la còpia d’enganxar les dades del fitxer d’entrada de mostra al fitxer d’entrada
Nota:
- No enganxeu la capçalera de la columna del full 'Sample-InputFile'.
- Els camps ressaltats grocs estan en blanc, per tant, els passos de prova corresponents a aquests valors en blanc no s'han de crear mitjançant la macro.
Imatge del full ReadyTestcases després de l'execució de macros.
Codi 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
Explicació del codi
# 1) ScreenUpdating = Fals: Les actualitzacions de pantalla no seran visibles si es defineix ScreenUpdating a False.
# 2) ThisWorkbook.Sheets ('InputFile'). Activeu: Aquesta declaració activa el full 'InputFile'.
# 3) nrow = ThisWorkbook.Sheets ('InputFile'). Cel·les (Rows.Count, 1). End (xlUp). Fila: Aquesta sentència obté el recompte de les files totals.
# 4) ncol = ThisWorkbook.Sheets ('InputFile'). Cel·les (1, Columns.Count). Final (xlToLeft). Columna: Aquesta sentència obté el recompte del total de columnes.
# 5) i = 1: Aquesta afirmació inicialitza i amb 1.
# 6) j = 1: Aquesta afirmació inicialitza j amb 1.
# 7) For i = 1 To nrow
ThisWorkbook.Sheets ('ReadyTestCases'). Cells (i, 1) = ThisWorkbook.Sheets ('InputFile'). Cells (i, 1)
Següent i: Aquest fragment de còpia de bucle For enganxa el valor de la primera columna (identificador de comanda en aquest cas) del full 'InputFile' a cada fila del full 'ReadyTestCases' com a identificador de la prova.
# 8) lastrow = Fulls de càlcul ('InputFile'). Cel·les (Fulls de càlcul ('InputFile'). Files.Compte, 'A'). Final (xlUp). Fila: Aquesta sentència recalcula l'últim recompte de files de l'InputFile.
# 9) AddRows = 21: Aquesta sentència assigna 21 a la variable AddRows. A aquesta variable se li han assignat 21 amb la intenció d'inserir 21 files en blanc addicionals per a cada cas de prova per afegir passos de prova.
# 10) i = lastrow: Aquesta sentència assigna el darrer recompte de files a i.
# 11) Feu mentre jo 1
Files (i & “:” & i + AddRows - 1). Inseriu
i = i - 1
Bucle: Aquesta afirmació afegeix 20 files per a cada caixa de proves, començant de baix a dalt.
# 12) lastrow = Fulls de càlcul ('ReadyTestCases'). Cel·les (fulls de càlcul ('ReadyTestCases'). Files. Recompte, 'A'). Final (xlUp). Fila: Aquesta sentència recalcula l'últim recompte total de files.
# 13) ThisWorkbook.Sheets ('ReadyTestCases'). Activa: El segon full s’activa a través d’aquesta afirmació.
# 14) Dim a: Aquesta sentència declara la variable a.
# 15) a = 1: Aquesta sentència assigna 1 a a.
# 16) Per a = 1 Per deixar enrere
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
Següent a: El fragment de bucle for assigna els valors de cada columna del full InputFile a cada pas de prova per a cada identificador de cas de prova.
# 17) lastrow = Fulls de càlcul ('ReadyTestCases'). Cèl·lules (Fulls de càlcul ('ReadyTestCases'). Files.Count, 'C'). End (xlUp) .Row : Aquesta declaració recalcula el full de recompte de files Total ReadyTestCases després d'afegir 21 files per a cada identificador de cas de prova.
# 18) a = 1: Aquesta sentència assigna 1 a la variable a.
# 19) ThisWorkbook.Sheets ('ReadyTestCases'). Activeu: Aquesta declaració activa el full ReadyTestCases.
# 20) Per a un = 1 per deixar el fil
ThisWorkbook.Sheets ('ReadyTestCases'). Cel·les (a, 2) = 'Verificar la data de la comanda'
ThisWorkbook.Sheets ('ReadyTestCases'). Cel·les (a + 1, 2) = 'Verificar data d'enviament'
ThisWorkbook.Sheets ('ReadyTestCases'). Cel·les (a + 2, 2) = 'Verificar el mode d'enviament'
ThisWorkbook.Sheets ('ReadyTestCases'). Cel·les (a + 3, 2) = 'Verificar identificador de client'
ThisWorkbook.Sheets ('ReadyTestCases'). Cel·les (a + 4, 2) = 'Verificar el nom del client'
ThisWorkbook.Sheets ('ReadyTestCases'). Cel·les (a + 5, 2) = 'Verifica el segment'
ThisWorkbook.Sheets ('ReadyTestCases'). Cel·les (a + 6, 2) = 'Verificar ciutat'
ThisWorkbook.Sheets ('ReadyTestCases'). Cel·les (a + 7, 2) = 'Verifica l'estat'
ThisWorkbook.Sheets ('ReadyTestCases'). Cel·les (a + 8, 2) = 'Verificar el codi postal'
ThisWorkbook.Sheets ('ReadyTestCases'). Cel·les (a + 9, 2) = 'Verificar regió'
ThisWorkbook.Sheets ('ReadyTestCases'). Cel·les (a + 10, 2) = 'Verifica l'identificador del producte'
ThisWorkbook.Sheets ('ReadyTestCases'). Cel·les (a + 11, 2) = 'Verifica categoria'
ThisWorkbook.Sheets ('ReadyTestCases'). Cel·les (a + 12, 2) = 'Verifica la subcategoria'
ThisWorkbook.Sheets ('ReadyTestCases'). Cel·les (a + 13, 2) = 'Verifica el nom del producte'
ThisWorkbook.Sheets ('ReadyTestCases'). Cel·les (a + 14, 2) = 'Verificar vendes'
ThisWorkbook.Sheets ('ReadyTestCases'). Cel·les (a + 15, 2) = 'Verifica la quantitat'
ThisWorkbook.Sheets ('ReadyTestCases'). Cel·les (a + 16, 2) = 'Verificar descompte'
ThisWorkbook.Sheets ('ReadyTestCases'). Cel·les (a + 17, 2) = 'Verificar beneficis'
a = a + 21
A continuació: aquest fragment de bucle For afegeix passos de prova estàtics per a cada cas de prova.
# 21) Deleteblankrows ('ReadyTestCases'): Truqueu a la funció Deleteblankrow per al full 'Ready TestCases'.
# 22) ScreenUpdating = True: Això us permet visualitzar les actualitzacions de pantalla que passen com a part de l'execució de macros.
# 23) Sub Deleteblankrows (full ByVal com a cadena): El codi següent és per a la funció Deletblankrows que comprovarà dinàmicament si hi ha valors en blanc als camps de dades. Si és així, el pas de prova creat per a les dades en blanc se suprimirà al seu torn suprimint aquestes files.
# 24) Dim wks com a full de treball: Aquesta sentència declara la variable wks com a full de treball.
# 25) Set wks = ThisWorkbook.Worksheets (Sheet): Aquesta sentència assigna el full wks proporcionat com a paràmetre d'entrada.
# 26) Dim i As Long: Aquest forro declara I com a llarg.
# 28) wks. Activeu: Aquesta afirmació activa el full.
# 29) lastrow = wks.Cells (Sheets (Sheet) .Rows.Count, 'C'). End (xlUp). Fila: Aquesta sentència obté el recompte de l'última fila del full.
# 30) Per a i = 1 per deixar enrere: El bucle For itera des de la primera fila fins a l'última fila.
# 31) Si WorksheetFunction.CountBlank (Range (Cells (i, 2), Cells (i, 3))) = 1 Llavors: Aquesta condició comprova si per a cada fila, la segona i la tercera columna compten fins al valor en blanc com a 1.
# 32) Selection.Rows (i) .EntireRow.Delete: Aquesta sentència suprimeix la fila seleccionada si la condició és certa.
Exemple d'ús núm. 4
Les fórmules d'Excel de la plantilla Estimacions de prova també es poden executar mitjançant una macro. També es crea un gràfic mitjançant la macro.
Demostració
- Es manté un full 'Estimacions' que permetrà als usuaris afegir hores estimades per a les fases de proves, des de la comprensió dels requisits empresarials fins a la creació, l'execució i la reelaboració de l'actualització dels scripts de prova.
- Les cel·les ressaltades de color verd estan habilitades per a l'entrada de l'usuari. Aquests són els camps d’entrada.
- Els de color blau ressaltats són derivats automàticament.
- El segon full inclou mètriques de Reelaboració i el tercer full inclou mètriques de complexitat.
- L'usuari introdueix la mida de la complexitat en termes de H, L i M a la columna D, i la columna E obté automàticament el factor de complexitat mitjançant la visualització des de la 'Mètriques de complexitat' full.
- L’usuari introdueix la mida de la reelaboració en termes d’H, L i M a la columna F, i la columna G recupera automàticament el factor de complexitat mitjançant la visualització del full de mètriques de treball.
- Els factors s'utilitzen a la columna H per obtenir l'esforç total d'estimació.
- Una altra macro quan s’executa prepara el gràfic i l’afegeix al quart full ‘Gràfic’.
- Les fórmules incloses s’utilitzen mitjançant la macro mitjançant la tecla de drecera CTRL + MAJÚS + E.
Estimacions
Mètriques de reelaboració
Mètriques de complexitat
Gràfic
Full VBA (Macro) per al full d'estimacions
' 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
Explicació del codi
(a) ThisWorkbook.Sheets (1). Activa: S'activa el primer full 'Estimacions'.
(b) Fulls ('Estimacions'). Cel·les (4, 8) = Fulls ('Estimacions'). Cel·les (4, 2) * Fulls ('Estimacions'). Cel·les (4, 3) * Fulls ('Estimacions') ). Cel·les (4, 5) * Fulls ('Estimacions'). Cel·les (4, 7): Aquesta afirmació calcula la columna B * columna C * columna E * columna G i s’assigna a la columna H de la fila 4.
(c) Fulls ('Estimacions'). Cel·les (5, 8) = Fulls ('Estimacions'). Cel·les (5, 2) * Fulls ('Estimacions'). Cel·les (5, 3) * Fulls ('Estimacions') ). Cel·les (5, 5) * Fulls ('Estimacions'). Cel·les (5, 7): Aquesta afirmació calcula la columna B * columna C * columna E * columna G i s’assigna a la columna H de la fila 5.
(d) Fulls ('Estimacions'). Cel·les (6, 8) = Fulls ('Estimacions'). Cel·les (6, 2) * Fulls ('Estimacions'). Cel·les (6, 3) * Fulls ('Estimacions') ). Cel·les (6, 5) * Fulls ('Estimacions'). Cel·les (6, 7): Aquesta afirmació calcula la columna B * columna C * columna E * columna G i s’assigna a la columna H de la fila 6.
(e) Fulls ('Estimacions'). Cel·les (7, 8) = Fulls ('Estimacions'). Cel·les (7, 2) * Fulls ('Estimacions'). Cel·les (7, 3) * Fulls ('Estimacions') ). Cel·les (7, 5) * Fulls ('Estimacions'). Cel·les (7, 7): Aquesta afirmació calcula la columna B * columna C * columna E * columna G i s’assigna a la columna H de la fila 7.
(f) Fulls ('Estimacions'). Cel·les (8, 8) = Fulls ('Estimacions'). Cel·les (8, 2) * Fulls ('Estimacions'). Cel·les (8, 3) * Fulls ('Estimacions') ). Cel·les (8, 5) * Fulls ('Estimacions'). Cel·les (8, 7): Aquesta sentència calcula la columna B * columna C * columna E * columna G i s’assigna a la columna H de la fila 8.
(g) Fulls ('Estimacions'). Cel·les (9, 8) = Fulls ('Estimacions'). Cel·les (9, 2) * Fulls ('Estimacions'). Cel·les (9, 3) * Fulls ('Estimacions') ). Cel·les (9, 5) * Fulls ('Estimacions'). Cel·les (9, 7): Aquesta afirmació calcula la columna B * columna C * columna E * columna G i s’assigna a la columna H de la fila 9.
(h) Fulls ('Estimacions'). Cel·les (10, 8) = Fulls ('Estimacions'). Cel·les (10, 2) * Fulls ('Estimacions'). Cel·les (10, 3) * Fulls ('Estimacions') ). Cel·les (10, 5) * Fulls ('Estimacions'). Cel·les (10, 7): Aquesta afirmació calcula la columna B * columna C * columna E * columna G i s’assigna a la columna H de la fila 10.
(i) Fulls ('Estimacions'). Cel·les (11, 8) = Fulls ('Estimacions'). Cel·les (4, 8) + Fulls ('Estimacions'). Cel·les (5, 8) + Fulls ('Estimacions') ). Cel·les (6, 8) + Fulls ('Estimacions'). Cel·les (7, 8) + Fulls ('Estimacions'). Cel·les (8, 8) + Fulls ('Estimacions'). Cel·les (9, 8) + Fulls de càlcul ('Estimacions'). Cel·les (10, 8): Aquesta sentència resumeix la cel·la H2 a H10 i assigna el valor final a H11. Aquest valor proporciona un esforç total (en hores).
(j) Per a i = 3 a 10
Fulls de càlcul ('gràfic'). Cel·les (i - 2, 1) = Fulls de càlcul ('Estimacions'). Cel·les (i, 1)
Fulls ('gràfic'). Cel·les (i - 2, 2) = Fulls ('Estimacions'). Cel·les (i, 8)
Següent jo: Aquesta còpia Per a bucles enganxa les dades de la columna 1 i la columna 8 del full Estimacions al full Gràfic. Això es fa perquè les dades del full gràfic es puguin utilitzar per preparar un gràfic circular. Hi ha una altra macro escrita per al full 'Gràfic' que prepara un gràfic per al mateix.
Codi VBA (macro) per al full de gràfics
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
Explicació del codi
- Mida com a rang: Aquesta sentència declara rng com a valor d'interval.
- Dim és com a objecte: Aquesta declaració declara est com a valor d'objecte.
- Aquest llibre de treball. Fulls ('gràfic'). Activeu: Aquesta declaració activa el full de gràfics.
- Estableix rng = ActiveSheet.Range ('A2: B8'): L'interval d'A2 a B8 del full de gràfics s'estableix en rng.
- Set est = ThisWorkbook.Sheets ('Chart'). Shapes.AddChart2: Aquesta afirmació s'utilitza per iniciar la creació d'un nou gràfic al full-gràfic.
- est.Chart.SetSourceData Source: = rng: Aquesta afirmació proporciona un interval de dades per a la contemplació al gràfic.
- est.Chart.ChartType = xl3DPieExploded: El tipus de gràfic s'estableix en 3D Pie de tipus Exploded. xl3DPieExploded ajuda a determinar aquest tipus de gràfic.
- est.Chart.HasTitle = Verdader: Aquesta afirmació verifica si el gràfic ja té títol.
- est.Chart.ChartTitle.Text = 'Estimacions de prova': Aquesta afirmació substitueix el títol del gràfic per 'Estimacions de prova'.
- est.Chart.SetElement (msoElementDataLabelCenter): Aquesta afirmació estableix les etiquetes de dades i les llegendes del gràfic.
- est.Chart.SetElement (msoElementLegendBottom): Aquesta afirmació estableix les etiquetes de dades a la part inferior del gràfic.
Maneres d'executar una macro
Es podria executar una macro de 4 maneres:
- Utilitzant la icona Executa a la finestra de l'editor VBA.
- Al fitxer Excel, seleccioneu l'opció de menú Veure -> Macros -> Veure Macro -> Seleccioneu el nom de la macro i seleccioneu Executa.
- Creeu una drecera mentre creeu la macro i, si premeu les tecles de drecera, s'executarà l'execució de la macro.
- La forma més fàcil d'utilitzar és crear un botó d'acció ( Per exemple. Botó d’ordres) al qual s’assignaria una macro que, en fer-hi clic, desencadenaria l’execució de la macro.
Veurem com afegir un botó d’ordres i assignar-li una macro. El botó en fer clic realitzarà l'execució de la macro.
Afegiu un botó de control de formularis a Excel
- Seleccioneu Menú 'Desenvolupador' -> Insereix -> Controls de formulari -> Icona de botó de selecció i afegiu el botó al full Excel.
- Introduïu el nom i el valor de text del botó. El nom del botó s’utilitza a la codificació VBA per reconèixer aquest botó d’ordres mentre que el text es mostra al botó.
- Ara feu clic dret sobre el botó d'ordres i seleccioneu l'opció 'Assigna una macro' , apareix la llista de macros, seleccioneu el nom de la macro que vulgueu assignar.
- Un cop assignada la macro, si feu clic al botó, s'executa la macro assignada.
- En aquest exemple, el fitxer 'Obteniu estimacions de proves' botó està assignat a 'Estimacions' macro.
- De la mateixa manera, afegirem un botó d’ordres per al full Gràfic i assignarem la macro per a Gràfic per activar la generació del gràfic.
- Fent clic al botó 'Crea un gràfic' el botó executa la macro del gràfic. Això millora la usabilitat de la macro.
Conclusió
Aquests eren pocs exemples en temps real que podrien formar part de la rutina diària del comprovador a la feina, que es podrien identificar de manera intel·ligent per a la generació de macros i, per tant, podrien estalviar una gran quantitat de temps en esforços manuals irrellevants i repetitius automatitzant la tasca.
Les captures de pantalla pertinents, el codi VBA i la comprensió detallada de cada línia de codi s’han tractat en aquest article. Espero que això doni un bon avantatge als QA sobre com transformar-se d'una mentalitat de prova manual a una mentalitat macro.
Per a les persones que creuen que la feina dels verificadors manuals és purament una feina no tècnica, demostrem-los que estan equivocats mitjançant l’aplicació necessària de coneixements tècnics per millorar la productivitat.
Autor: Aquesta publicació útil i profunda està escrita per Shobha D. Treballa com a cap de projecte i té més de 9 anys d’experiència en proves manuals, automàtiques (IBM RFT i Selenium amb Java) i API.
Lectura recomanada
- Treballar amb objectes VBScript Excel
- Creació de Selenium Framework i accés a les dades de proves des d'Excel: tutorial núm. 21 de Selenium
- 5 Tasques de proves més freqüents Els verificadors obliden provar (i com evitar-ho)
- 5 millors coses que un provador ha de tenir per Excel (i les perspectives canviants del provador de programari)
- Sub-tasca de JIRA amb exemple (Sub-tasca de creació de JIRA)