2010-04-13 6 views
7

Wir haben ein Projekt, das HP Quality Center verwendet, und eines der regelmäßigen Probleme, denen wir gegenüberstehen, besteht darin, dass Benutzer keine Kommentare zu dem Fehler aktualisieren.Automatisierung von HP Quality Center mit Python oder Java

Also dachte ich, wenn wir ein kleines Skript oder Werkzeug entwickeln könnten, mit dem wir regelmäßig eine Erinnerung auslösen und den Benutzer zwingen könnten, die Kommentare zu aktualisieren.

Ich stieß auf die Open Test Architecture API und fragte mich, ob es irgendwelche guten Python- oder Java-Beispiele für das gleiche gibt, die ich sehen konnte.

Dank Hari

Antwort

5

Ich bin nicht sicher, dass alle gute Proben für Java gibt es, weil OTA kann nicht direkt von Java verbraucht werden, ist es eine Java COM bridnge wie JIntegra muss. Über Python können Sie Python COM APIs verwenden. Und dann wird jedes OTA-Beispiel ausreichen. Du hast genug in der QC Dokumentation von OTA.

Aber ich denke, die wirkliche Frage hier ist, warum möchten Sie es in Python oder Java tun. Warum schreiben Sie nicht, was Sie direkt in QC mit der Workflow-Funktion benötigen? Dadurch können Sie Ihre Logik in VBScript schreiben und sie in der QC-Benutzeroberfläche für Benutzeraktionen aufrufen. Zum Beispiel können Sie an das Post-Ereignis eines Fehlers/Fehlers binden und prüfen, ob es einen Kommentar gibt und ob der Benutzer nicht direkt eine Nachricht erhält.

+0

Danke, werde versuchen, die VBScript-Option und sehen, wie es geht. – Hari

0

Sie können einen neuen Test verwenden und den Typ (VPXP_API) auswählen, mit dem das Skript ausgeführt werden kann. Die gute Sache ist, dass Sie die Funktionsdefinition bereit haben, aus QC gezogen zu werden, anstatt sich stark auf doc zu verlassen. Ich habe eine Implementierung in Python ausgeführt, die ein Skript innerhalb von QC unter Verwendung seiner API ausführt, aber über einen QC-Test, der nützlich ist, um direkt das Ergebnis (Output) usw. abzufragen und einen Shell-Befehl auszuführen, der dann jedes Skript aufrufen kann jeder Server etc ...

+0

Ich hätte gerne mehr Informationen zur Verwendung der VPXP_API (VAPI_XP_TEST nehme ich an?) Ich habe OTAClient mit Python & C# benutzt, aber meine Tests (zB Selen) von QC zu starten entzieht sich mir immer noch. – fijiaaron

12

Beispiel für Python (win32com) zu HP Quality Center via OTA

HP Quality Center stellt eine cOM-basierte API namens OTA zu verbinden.

Dokumentation dazu ist, herunterladbare von einem QC-Server (OTA_API_Reference.chm) (Seltsam ist es sehr schwer zu finden online)

Die Dokumentation verwendet VBScript (die offiziell unterstützten interne Sprache für QC) und Sie werden Mental zu Python übersetzen müssen. Dies ist normalerweise sehr einfach, aber ein paar Fälle existieren.

Sie müssen auf Ihrem Computer den lokalen Code des Quality Center installieren, dies ist auf Ihrem Windows-PC , wenn Sie über die Webschnittstelle zu QC gelangen konnten.

Sie müssen auch die URL des Servers und Ihren Benutzernamen und Ihr Passwort sowie die Domain des QC-Projekts, an dem Sie arbeiten, kennen. Diese

from win32com.client import Dispatch 

conn = get_QCConnection() 

for bug in get_bugs(qcConn): 
    print bug.Title 

put_QCConnection(conn) 

#below code needs to be in seperate module or at least above the fold but here 
# for clarity 

def get_QCConnection(): 
    '''Get the hardcoded connection to the server and domain. 
    Can be made a "real" engine if you try hard. 
    Use makepy utility to determine if the version number has changed (TDApiOle80) 
    but this works to current version''' 

    QCConnection = Dispatch("TDApiOle80.TDConnection") 
    url = "http://qc.example.com/qcbin" 
    QCConnection.InitConnectionEx(url) 
    QCConnection.login("USER", "PASS") 
    QCConnection.Connect("google_projects", "Google_Chrome")  
    return QCConnection 

def put_QCConnection(qcConn): 
    #If one person logged in to QC changes *anything* on a bug, 
    # they hold a global lock on writing to that bug till 
    # thier session times out, so really really remember to logout 
    # its painful to wait for your own session to time out 

    qcConn.Logout() 

def get_bugs(qcConn): 
    '''just following boiler plate from vbscript 
    PS the SetFilter is not in QTA API, it uses Filter. 
    But due to the workarounds in 
    the very brilliant pythoncom code it supplies a virtual wrapper class 
    called SetFilter - this is one of those gotchas ''' 

    BugFactory = qcConn.BugFactory 
    BugFilter = BugFactory.Filter 

    BugFilter.SetFilter(u"Status", "New") 
    #NB - a lot of fields in QC are malleable - and vary from site to site. 
    #COntact your admins for a real list of fields you can adjust 
    buglist = BugFilter.NewList() 
    return buglist  

ist keine schlechte Basis für die Zukunft, aber ich eine Dummy-Klasse für Defekte erstellen und ausführen, so etwas wie:

dfcts = [defect(b) for b in buglist] 

Dann kann ich Arbeiter Code in Fehlerklasse setzen und die Dinge ordentlicheres . Eine Sache, die Sie tun möchten, ist den Zugriff auf den rohen qc-Fehler, der in der Python-Wrapper-Klasse enthalten ist.

+0

Hallo und danke für die Antwort. Das ist ein guter Ausgangspunkt! Aber ich würde gerne wissen, ob es eine Referenz (Dokumentation) für diese Schnittstelle gibt? –

6

Informationen für andere, die diesen Thread anzeigen können.

So starten Sie das alles Sie pywin32 müssen installieren, wie von hier http://sourceforge.net/projects/pywin32/files/pywin32/Build216/

Zunächst einmal müssen Sie pywin32

'''@author: www.qcintegration.com @mailto:[email protected]''' 
import pywintypes 
import win32com.client as w32c 
from win32com.client import gencache, DispatchWithEvents, constants 

Dann als zweite Operation ich bei der Anmeldung hier auch Maßnahmen gehören importieren Server

def connect_server(qc, server): 
     '''Connect to QC server 
     input = str(http adress) 
     output = bool(connected) TRUE/FALSE ''' 
     try: 
      qc.InitConnectionEx(server); 
     except: 
      text = "Unable connect to Quality Center database: '%s'"%(server); 
     return qc.Connected; 

def connect_login(qc, username, password): 
    '''Login to QC server 
    input = str(UserName), str(Password) 
    output = bool(Logged) TRUE/FALSE ''' 
    try: 
     qc.Login(username, password); 
    except pywintypes.com_error, err: 
     text = unicode(err[2][2]); 
    return qc.LoggedIn; 

def connect_project(qc, domainname, projectname): 
    '''Connect to Project in QC server 
    input = str(DomainName), str(ProjectName) 
    output = bool(ProjectConnected) TRUE/FALSE ''' 

    try: 
     qc.Connect(domainname, projectname) 
    except pywintypes.com_error, err: 
     text = "Repository of project '%s' in domain '%s' doesn't exist or is not accessible. Please contact your Site Administrator"%(projectname, domainname); 
    return qc.ProjectConnected; 

Zweite aller Verfahren, die OTAapi Datei enthält dll

def qc_instance(): 
     '''Create QualityServer instance under variable qc 
     input = None 
     output = bool(True/False)''' 
     qc= None; 
     try: 
      qc = w32c.Dispatch("TDApiole80.TDConnection"); 
      text = "DLL QualityCenter file correctly Dispatched" 
      return True, qc; 
     except: 
      return False, qc; 

Dann Hauptmethode verbinden

def qcConnect(server, username, password, domainname, projectname): 
    print("Getting QC running files"); 

    status, qc = qc_instance(); 
    if status: 
     print("Connecting to QC server"); 
     if connect_server(qc, server): 
      ##connected to server 
      print("Checking username and password"); 
      if connect_login(qc, username, password): 
       print("Connecting to QC domain and project"); 
       if connect_project(qc, domainname, projectname): 
        text = "Connected" 
        connected = True; 
        return connected, text; 
       else: 
        text = "Not connected to Project in QC server.\nPlease, correct DomainName and/or ProjectName"; 
        connected = False; 
        return connected, text; 
      else: 
       text = "Not logged to QC server.\nPlease, correct UserName and/or Password"; 
       connected = False; 
       return connected, text; 
     else: 
      text = "Not connected to QC server.\nPlease, correct server http address"; 
      connected = False; 
      return connected, text; 
    else: 
     connected = False; 
     text = "Unable to find QualityCenter installation files.\nPlease connect first to QualityCenter by web page to install needed files" 
     return connected, text; 

Und am Ende QCserver, wie alle diese Methoden an einem Ort mit Anwendungsbeispiel auszuführen

if __name__ == "__main__": 
    server= r"http://qualitycenterServer:8080/qcbin" 
    username= "alex_qc" 
    password= "" 
    domainname= "DEFAULT" 
    projectname= "QualityCenter_Demo" 

    connection_status, text = qcConnect(server, username, password, domainname, projectname); 
    print "connection_status:", connection_status 

Bei jeder mehr Frage mailto: [email protected] oder direkt zur Web-Seite: http://www.qcintegration.com

1

Es gibt eine REST API to HPQC (ALM11 und neuer), wenn Sie von Linux darauf zugreifen möchten, ohne eine Windows COM-Komponente zu verwenden.

Hier ist ein Beispiel, das einen "Anforderung" Datensatz (# 1202) nach der Authentifizierung zieht.

import requests 
session = requests.session() 
user='hpqc' 
password='xxxxx' 
r = session.get("http://hpqc-server:8080/qcbin/authentication-point/authenticate",auth=(user,password)) 

r = session.get("http://hpqc-server:8080/qcbin/rest/domains/Foo/projects/Bar/requirements/1202") 
print(r.text) 

Das Parsen von r.text von XML wird als Übung.

1

Obwohl Sie nach einer Python- oder Java-basierten Lösung gefragt haben, geben Sie den folgenden VBA-Code frei, den Sie mit dem Script-Editor von HPQC/ALM (Defects module skript) verwenden können, um das Ziel zu erreichen.

Function Bug_FieldCanChange(FieldName, NewValue) 

On Error Resume Next 

if not changed then 
strCommentBeforeUpdate = Bug_Fields("BG_DEV_COMMENTS").Value 
end if 

If FieldName = "BG_DEV_COMMENTS" and blnAddCommentClicked = False Then 
    Msgbox "Cannot update the comments." & Chr(13)& "Changes made will not be saved."&Chr(13)& "Please use 'Add comment' button to insert new comment." &Chr(13)& " Or click Cancel without saving." 
    blnUpdateCommentError = true 
    blnAddCommentClicked = False 
    changed = true 
    End If 
Bug_FieldCanChange = DefaultRes 

End Function 
Verwandte Themen