7

HP Quality Center を使用するプロジェクトがあり、私たちが直面する定期的な問題の 1 つは、人々が欠陥に関するコメントを更新しないことです。

そこで、定期的にリマインダーを表示し、ユーザーにコメントの更新を強制するために使用できる小さなスクリプトまたはツールを考え出すことができないかと考えていました。

私は Open Test Architecture API に出くわし、私が見たのと同じ Python または Java の良い例があるかどうか疑問に思っていました。

ありがとうハリ

4

6 に答える 6

13

Python (win32com) を使用して OTA 経由で HP Quality Center に接続する例

HP Quality Center は、OTA と呼ばれる com ベースの API を公開しています。

これに関するドキュメントは、QC サーバー (OTA_API_Reference.chm) からダウンロードできます (奇妙なことに、オンラインで見つけるのは非常に困難です)。

ドキュメントは VBScript (公式にサポートされている QC の内部言語) を使用しており、精神的に Python に翻訳する必要があります。通常、これは非常に単純ですが、いくつかの落とし穴があります。

Quality Center のローカル コードをマシンにインストールする必要があります。Web インターフェイスから QC にアクセスできた場合、これは Windows PC にあります。

また、サーバーの URL、ユーザー名とパスワード、および作業中の QC プロジェクトのドメインも知っておく必要があります。

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       

これは先に進むための悪い基礎ではありませんが、欠陥用のダミー クラスを作成し、次のようなものを実行します。

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

次に、ワーカー コードを欠陥クラスに入れ、物事を整理します。やりたいことの 1 つは、Python ラッパー クラス内部の生の qc バグへのアクセスを維持することです。

于 2011-05-23T14:57:18.803 に答える
6

このスレッドを閲覧する可能性のある他のユーザー向けの情報。

このすべてを開始するには、ここからhttp://sourceforge.net/projects/pywin32/files/pywin32/Build216/のように、pywin32 をインストールする必要があります。

まず、pywin32 をインポートする必要があります。

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

次に、2番目の操作として、サーバーへのログイン時のアクションをここに含めます

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;

OTAapi dllファイルを含むすべての方法の2番目

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;

次に、QCserver に接続する主な方法

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;

そして最後に、これらすべてのメソッドを 1 か所で実行する方法と使用例を示します

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

さらに質問がある場合は、mailto: contact@qcintegration.com または Web 側に直接: http://www.qcintegration.com

于 2013-04-13T15:26:53.457 に答える
5

OTA は Java で直接使用できないため、Java の良いサンプルがあるかどうかはわかりません。JIntegra のような Java から COM へのブリッジが必要です

Python については、 Python COM APIを使用できます。そして、どの OTA の例でも構いません。OTA の QC ドキュメントには多くの情報があります。

しかし、ここでの本当の問題は、なぜ Python や Java でそれをやりたいのかということだと思います。QC のワークフロー機能を使用して、必要なものを直接 QC に書き込んでみませんか。これにより、VBScript でロジックを記述し、ユーザー アクションで QC UI 内で呼び出すことができます。たとえば、Defect / Bug の Post イベントにバインドして、コメントがあるかどうかを確認し、ない場合はユーザーに直接メッセージを表示できます。

于 2010-04-18T10:27:50.930 に答える
2

Windows COM コンポーネントを実行せずに Linux からアクセスする場合は、 HPQC (ALM11 以降) への REST APIがあります。

認証後に「requirement」レコード (#1202) を取得する例を次に示します。

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)

r.textXML からの解析は演習として残します。

于 2016-06-07T21:45:48.583 に答える
0

新しいテストを使用して、スクリプトの実行を許可するタイプ(VPXP_API)を選択できます。良い点は、ドキュメントに大きく依存する代わりに、QC内から関数定義をドラッグする準備ができていることです。QC内からAPIを使用してスクリプトを実行するPythonで実装を行いましたが、結果(出力)などを直接取得するのに便利なQCテストを介して、任意のスクリプトを呼び出すことができるシェルコマンドを実行しました。サーバーなど...

于 2010-11-29T23:45:07.993 に答える