Il report sarà composto da un unico foglio excel in cui verranno riportate queste informazioni:
Per estrarre le informazioni relative alle esecuzioni dei test e alle anomalie connesse è importante capire quali sono le relazioni tra i diversi oggetti. Per far ciò si vedano le 2 figure qui sotto:
______________________________________________________________________
Estrazione dei Dati - Riepilogo:
PREREQUISITI ESSENZIALI:
1. Partiamo col fatto che l'estrazione avverrà tramite la selezione di un pulsante personalizzato all'interno della sezione TestLab che funzionerà solo se posizionati su una cartella.
2. Se Ok dalla Folder estraiamo tutte le strategie che si trovano al di sotto (compresi figli, nipoti, pronipoti, ecc...). Utilizzeremo il metodo FindTestSets dell'oggetto TestSetFolder.
3. Ciclando su ogni TestSet viene estratta la lista delle Istanze di Test
4. Ciclando su tutte le Istanze recuperiamo lo stato di esecuzione e accederemo all'ultimo Run, se esiste.
5. Dal Run esamineremo se, per ciascun step, esistono anomalie collegate
5.1 Se esiste l'anomalia dovrà essere riportata incrementando il totale ed esaminando lo stato della stessa incrementando il contatore relativo.
_______________________________________________________________________
Implementazione sul Prodotto
Si rimanda alla sezione WorkFlow Script Editor per la spiegazione su come inserire un Nuovo Pulsante Personalizzato
Supponiamo che la Action collegata al Pulsante sia actReportRunDefect
1. Inseriremo nella ActionCanExecute il richiamo alla Sub principale in TestLab
Function ActionCanExecute(ActionName)
On Error Resume Next
Dim Res
Res = True
if ActionName = "actReportRunDefect" then
'Richiamo Sub sotto TestLab
TestSet_ReportRunDefect
end if
ActionCanExecute = Res
On Error Goto 0
End Function
2. Nella sezione TestLab inserisco la Sub TestSet_ReportRunDefect
Sub TestSet_ReportRunDefect
On Error Resume Next
Dim objXLS, objWkb, objWks, i
Dim myTestSetList, myListaIstanze
Dim varRes, arrRes, j, col
'Controllo il focus sia su una folder altrimenti esco
'Utilizzo l'oggetto objFold_TL.
'Questo oggetto deve essere dichiarato nella sezione common module
'bisogna inserire questo codice nell'evento MoveToFolder:
' set objFold_TL = Folder
'bisogna inserire questo codice in ExitModule (common) e
'in TestSet_MoveTo (TestLab):
' set objFold_TL = Nothing
if objFold_TL.IsNull then
msgbox "Non ho il focus su una cartella. Posizionarsi su una folder.", vbCritical + vbSystemModal, "Quality Center - Errore Focus Cartella"
exit sub
end if
'Se sono qui significa che il controllo di posizionamento è ok
'*******************************************************
'Creazione oggetti Excel.
'*******************************************************
set objXLS = CreateObject("Excel.Application")
objXLS.Visible = False 'Non visualizzo l'ambiente excel
set objWkb = objXLS.Workbooks.Add
set objWks = objWkb.Worksheets(1)
'Rinomino il foglio excel
objWks.Name = "Report Esecuzioni e Bug"
'Scrivo l'intestazione delle colonne
objWks.Cells(1,1).Value = "Path"
objWks.Cells(1,2).Value = "Strategia"
'lasciamo la terza colonna libera
objWks.Cells(1,4).Value = "Numero Test"
objWks.Cells(1,5).Value = "Passed"
objWks.Cells(1,6).Value = "Failed"
objWks.Cells(1,7).Value = "No Run"
objWks.Cells(1,8).Value = "Not Completed"
objWks.Cells(1,9).Value = "N/A"
'lasciamo la decima colonna vuota
objWks.Cells(1,11).Value = "Tot Bug"
objWks.Cells(1,12).Value = "New"
objWks.Cells(1,13).Value = "Open"
objWks.Cells(1,14).Value = "Assigned"
objWks.Cells(1,15).Value = "Fixed"
objWks.Cells(1,16).Value = "Reopened"
objWks.Cells(1,17).Value = "Rejected"
objWks.Cells(1,18).Value = "Closed"
'*******************************************************
'Estraggo la lista dei TestSet presenti nell'alberatura
set myTestSetList = objFold_TL.FindTestSets("",False,"")
'incremento il numero di riga
i = 2
'Ciclo per ogni strategia e analizzo le info
for each elTS in myTestSetList
'prima di tutto recupero dal testset la folder e da questa il path da scrivere
'sul file excel. Faccio tutto in una unica istruzione
objWks.Cells(i,1).Value = elTS.TestSetFolder.Path
'scrivo il nome del testset nel secondo campo dell'excel
objWks.Cells(i,2).Value = elTS.Name
'Recupero la lista delle istanze di test presenti nella strategia
set myListaIstanze = elTS.TSTestFactory.NewList("")
'scrivo il numero dei test che compongono la strategia
objWks.Cells(i,4).Value = myListaIstanze.Count
'Analizzo tutte le istanze richiamando una funzione che mi ritorna
'una variabile con tutti i restanti dati suddivisi da una virgola
varRes = TestSet_Analizza_ListaIstanze(myListaIstanze)
'creo l'array del risultato splittando la variabile sul carattere virgola.
arrRes = split(varRes,",")
'scrivo tutti i dati sul file excel
for j = 0 to Ubound(arrRes)
'utilizzo una var col che rappresenta la colonna da scrivere
'avendo inserito uno spazio a colonna 10 devo incrementarlo di 1
'per saltarla.
'Dal momento che j=0 sarebbe la colonna 5 quando j = 5
'la colonna deve essere incrementata di 1, cioè col = 11
if j = 5 then
col = j + 5 + 1
else
col = j + 5
end if
'scrivo l'informazione
objWks.Cells(i,col).Value = arrRes(j)
next
set myListaIstanze = Nothing
i = i + 1 'incremento la riga da scrivere sul file excel
next
'salvataggio file excel
objWkb.SaveAs "c:\temp\ReportEsecuzioni_" & split(date,"/")(2) & split(date,"/")(1) & split(date,"/")(0) & "_" & split(time,":")(0) & split(time,":")(1) & ".xls"
'Chiudo il workbook
objWkb.Close
'esco dall'applicazione excel
objXLS.Quit
set objWks = Nothing
set objWkb = Nothing
set objXLS = Nothing
set myTestSetList = Nothing
On Error Goto 0
End Sub
Function TestSet_Analizza_ListaIstanze(theList)
On Error Resume Next
Dim intPassed, intFailed, intNoRun, intNotComp, intNA
Dim intTotBug, intNew, intOpen, intAssigned, intFixed, intReopened, intRejected
Dim intClosed, Res
Dim RunList, UltimoRun, StepList
Dim myComm, RecSet, myBug
Res = ""
'Inizializzo tutti i counter a 0
intPassed = 0
intFailed = 0
intNoRun = 0
intNotComp = 0
intNA = 0
intTotBug = 0
intNew = 0
intOpen = 0
intAssigned = 0
intFixed = 0
intReopened = 0
intRejected = 0
intClosed = 0
'adesso ciclo per tutte le istanze
for each elIst in theList
'recupero l'informazione sullo stato di esecuzione dell'istanza
select case elIst.Status
case "Passed": intPassed = intPassed + 1
case "Failed": intFailed = intFailed + 1
case "No Run": intNoRun = intNoRun + 1
case "Not Completed": intNotComp = intNotComp + 1
case "N/A": intNA = intNA + 1
end select
'recupero la lista dei Run per l'istanza per recuperare i bug
set RunList = elIst.RunFactory.NewList("")
if RunList.Count > 0 then 'significa che esiste almeno un Run
'istanzio l'ultimo Run
set UltimoRun = elIst.LastRun
'estraggo la lista degli step dal Run.
'Sono certo, perché l'ho dato come prerequisito,
'che i casi di Test abbiano almeno uno Step
set StepList = UltimoRun.StepFactory.NewList("")
for each elStep in StepList
'Controllo se per questo step è stato creato un bug.
'devo eseguire una query
set myComm = TDConnection.Command
myComm.CommandText = "Select LN_BUG_ID from LINK where " & _
"LN_ENTITY_TYPE = 'STEP' and LN_ENTITY_ID = " & elStep.ID
'Eseguo la query e la salvo sul RecSet
set RecSet = myComm.Execute
'Controllo che RecSet abbia qualche record
if RecSet.RecordCount > 0 then
'mi muovo al primo elemento
RecSet.First
'devo ciclare per tutte le righe del recordset
do while Not(RecSet.EOR)
'incremento il contatore del Totale dei bug
intTotBug = intTotBug + 1
'creo l'oggetto Bug prendendo l'ID dal RecordSet
set myBug = TDConnection.BugFactory.Item(RecSet.FieldValue(0))
'Controllo lo stato del Bug per incrementare i contatori
Select case myBug.Status
case "New": intNew = intNew + 1
case "Open": intOpen = intOpen + 1
case "Assigned": intAssigned = intAssigned + 1
case "Fixed": intFixed = intFixed + 1
case "Reopened": intReopened = intReopened + 1
case "Rejected": intRejected = intRejected + 1
case "Closed": intClosed = intClosed + 1
End Select
RecSet.Next
loop
end if
set RecSet = Nothing
set myComm = Nothing
next
set StepList = Nothing
end if
set RunList = Nothing
next
'adesso che ho tutti i counter li aggrego in una variabile risultato che poi
'assegnerò alla funzione
res = str(intPassed) & "," & _
str(intFailed) & "," & _
str(intNoRun) & "," & _
str(intNotComp) & "," & _
str(intNA) & "," & _
str(intTotBug) & "," & _
str(intNew) & "," & _
str(intOpen) & "," & _
str(intAssigned) & "," & _
str(intFixed) & "," & _
str(intReopened) & "," & _
str(intRejected) & "," & _
str(intClosed)
TestSet_Analizza_ListaIstanze = Res
On Error Goto 0
End Function
_________________________________________________________________________