少年智则国智,少年富则国富,少年强则国强,少年独立则国独立,少年自由则国自由,少年进步则国进步,少年胜于欧洲,则国胜于欧洲,少年雄于地球,则国雄于地球。红日初升,其道大光;河出伏流,一泻汪洋;潜龙腾渊,鳞爪飞扬;乳虎啸谷,百兽震惶;鹰隼试翼,风尘吸张;奇花初胎,矞矞皇皇;干将发硎,有作其芒;天戴其苍,地履其黄;纵有千古,横有八荒;前途似海,来日方长。美哉,我少年中国,与天不老!壮哉,我中国少年,与国无疆!

HP Quality Center OTA API实例 [附源码]

上一篇 / 下一篇  2009-09-25 12:39:31

    众所周知,HP Quality Center宣称的OTA(开放式测试架构)可以实现对QC软件的完全自定义和二次开发;OTA的实现就是依赖QC强大的API接口,掌握这些API接口,企业针对QC的一切扩展想像,即可化作现实;而恰巧QC API的强大让人感觉无所不能,横扫天下!51Testing软件测试网 gyI#\R4M}e
    本文以QC9.2为蓝本,通过一个QC扩展功能的实现,来演示如何使用QC的API接口。
#d J*e)eW0实例简介
([rWK0k+]!s0    QC软件分为站点管理员和QC应用二部分,在企业使用QC的过程中,有时候一个客户端在使用QC应用的时候,会在后台的站点管理员占用二个License连接;如果你的公司QC License比较紧张,这种情况更要避免!我们能够想到的办法是在站点管理员里的Site Connections里将重复的用户连接断开,但是如果QC软件频繁发生这种情况,即便公司的QC管理员也不想随叫随到的去删除这些重复的QC连接;因此,这里我们自然想到QC宣称的无所不能的OTA API,通过编程手段自动定期删除重复连接。51Testing软件测试网W:L:R%` N x1mCW
前置条件51Testing软件测试网&HptP sYz-|
  • 公司已经安装好Quality Center9.2服务器
  • 本机客户端可以正常访问该服务器
  • 本机安装Visual Basic6.0
  • 本机具有QC站点管理员登录帐号
    G7q4Z Y!i"F)\1m Z k0
实例开发51Testing软件测试网-F*b}*n4T W S
  1. 打开VB6,新建一个标准EXE程序
  2. 从VB6项目菜单里选择References,打开项目参考窗口
  3. 从项目参考窗口,找到以下二个COM组件,【SAClient Type Libray-Quality Center Site Administration】和【Microsoft XML V6.0】,并勾选它们,OK关闭该窗口
  4. 双击当前的Form1窗体,出现编程界面
  5. 拷贝以下代码到编程窗口:
Private Sub Form_Load()51Testing软件测试网Ve RvG#a-xhBB
    Dim QCConnection As Object51Testing软件测试网;lR x{6P4K}&p*Z,[q
    Dim sReply As Integer51Testing软件测试网)}D ^/v] UmnL
    Dim i As Integer51Testing软件测试网7gCz)VK#FK,gB,|/e$T
    Dim strCons As String
n.x6|#E5?A&e$I ?0    Dim strUnavailSessions As String51Testing软件测试网"o(z9OZa
    Dim arrUnavailSessions() As String51Testing软件测试网&Qr J`[ c v:_&L'R
    Dim strConfig As String51Testing软件测试网bD_dn X ^
    Dim arrConfig() As String
.Bkc_hR+E&y J^;\ ~8@0   
a-M7UBoVt4f.P0    Open "./property.conf" For Input As #3
#Af9jFve:p1a {qCd0    Line Input #3, strConfig
/P$u*Mi8Rc0    Close #3
e8WK8D'r;J b3]Z0    arrConfig = Split(Trim(strConfig), ",")51Testing软件测试网&|#h?P,tFN~u

S(R-IMyC(r0}0    Set QCConnection = New SACLIENTLib.SAapi
(Ym;v ip0    QCConnection.Login arrConfig(0), arrConfig(1), arrConfig(2)51Testing软件测试网Z;eU/y6H P-Re Q
    sReply = QCConnection.GetConnectionsCount("DEFAULT", "FlightDemo")
G%D I2b6s+k$H0    strCons = Trim(QCConnection.GetConnections)51Testing软件测试网](y#d.wT,_0{!s6s
   
Sf$~a-})KmZu0    Open "./qcconnections.xml" For Output As #1
x'vlu"]$qm0    Print #1, Trim(strCons)51Testing软件测试网C6g/_? T
    Close #1
},_2}N9aT4e)o)Z0    51Testing软件测试网U0~*r)A2p tB/_
    Open "./QCLicenseCleanUp.log" For Append As #251Testing软件测试网(\H,dI m hp!W|
    Print #2, "**************************************************************************"51Testing软件测试网&XXv&_ N pj K
    Print #2, "作者:叶赫华 运行时间:" & Now()51Testing软件测试网@xf6UJ&IjB
    Print #2, "当前QC服务器共有" & CStr(sReply) & "个连接."51Testing软件测试网-LCB$~{0V~
   
6OcW"H3M s7~R0    strUnavailSessions = GetQCUnavailSessions("./qcconnections.xml")51Testing软件测试网\9[:kU$P,d
    arrUnavailSessions = Split(strUnavailSessions, ",")51Testing软件测试网L*h%w EMxH {Z#|a
    51Testing软件测试网 {+sIf0_&o!^P*z
    If Trim(strUnavailSessions) = ":" Then51Testing软件测试网3V1]WnD
        Print #2, "没有重复的连接需要断开!"
4@)c"[l:kJr8_0    Else
@hv6ax#L0        Print #2, "开始在叶赫华本机清理重复连接..."
9Hq&y Oo0        For i = 0 To UBound(arrUnavailSessions)51Testing软件测试网+P+k?.@R4_I
            QCConnection.Disconnect CLng(Split(arrUnavailSessions(i), ":")(0))51Testing软件测试网?hkE:gau1B
            Print #2, "删除重复连接[SessionID:UserName] [" & arrUnavailSessions(i) & "] 成功..."
B9c{6q3l@;e/Q0        Next51Testing软件测试网KX3qAx$W
        Print #2, "连接清理完毕!"51Testing软件测试网(|9HK.lq6m4| n
    End If51Testing软件测试网F-KhgJN"P:P

`!L(\C W#r _0    Print #2, "作者:叶赫华 结束时间:" & Now()51Testing软件测试网#s1H:DWdTn@
    Print #2, "**************************************************************************"51Testing软件测试网+J6BzO m$t)?5]
    Print #2,51Testing软件测试网`Q~6r4bWZ!t%f
    Close #251Testing软件测试网 I DkF&V,\ P
    Set QCConnection = Nothing51Testing软件测试网mq{&e"f7_
    End
s[oJZktGG0End Sub
E y#{z ]gH051Testing软件测试网 ~.b1io9QL Q#j5tg
Public Function GetQCUnavailSessions(strConFilePath As String) As String
}MvC$C0    Dim arrSessionId() As String51Testing软件测试网I`i-b'FS!A ]3Q
    Dim arrUserName() As String
w$q\de{A0    Dim arrLastAction() As String
"LZ1l$uT2I Q#b0    Dim arrDeleteSessions() As String51Testing软件测试网 S8Ny4_%hJ
    Dim strReturn As String
/M D!xF9D0O&SQ!Iw1c0    Dim delCount As Integer51Testing软件测试网$jf0W%Ej!L
    Dim userCount As Integer51Testing软件测试网/JL O#Z+Ux t
    delCount = 051Testing软件测试网C.G2`yS)[X8s N%a
    userCount = 051Testing软件测试网8t(P~1C/ED*S1Nn'B
   
-_S-DaC$Ny l0    Dim objDOMDoc As New DOMDocument60
L d0R?D8F tW7c0    objDOMDoc.async = False51Testing软件测试网#zWkj~nY G
    objDOMDoc.Load strConFilePath51Testing软件测试网o Mt!g$j~!z}
   
!m)`)c8Ul4D0    Dim root As MSXML2.IXMLDOMElement
Y5s4g"w)I8{IA0    Set root = objDOMDoc.documentElement51Testing软件测试网5fp;W8s9l3]\ Oh&A
    51Testing软件测试网Tt$V@"^lGd8t
    Dim sessionIdList As MSXML2.IXMLDOMNodeList51Testing软件测试网8e%{5X:TQ#IP-Uc
    Set sessionIdList = root.selectNodes("/GetConnections/TDXItem/LOGIN_SESSION_ID")
rKGzjN? b N0    Dim userNameList As MSXML2.IXMLDOMNodeList51Testing软件测试网7}Kp3v `
    Set userNameList = root.selectNodes("/GetConnections/TDXItem/USERNAME")51Testing软件测试网~Kd-}d~
    Dim lastActionList As MSXML2.IXMLDOMNodeList
wD.| ^V*_ L0    Set lastActionList = root.selectNodes("/GetConnections/TDXItem/LASTACTION")51Testing软件测试网*G-QW?2SB)Z^S
   
X0rI1] ps_E0    Dim length As Integer51Testing软件测试网5V0?'} Z*_ {
    length = sessionIdList.length - 1
#w+t|$n3KW(x0   
k,V@:|~TE0    ReDim arrSessionId(length)51Testing软件测试网/[8u-oP"v;Iy
    ReDim arrUserName(length)
0?Jx2I$R+d.UC0    ReDim arrLastAction(length)51Testing软件测试网)o$^9CQ'[jQ"l
    ReDim arrDeleteSessions(length)51Testing软件测试网a3Ch+{'Le6[.`
    ReDim arrDeleteUserName(length)
N%_$[Ck7|(l0    51Testing软件测试网,s D7o,L(M(DZ6^
    Dim i As Integer51Testing软件测试网#vA ?_o-d*V
    Dim j As Integer
FGa;R MeO0    Dim flag As Boolean51Testing软件测试网e?H U4g0X#G"w
    51Testing软件测试网0^9j HhXc;Xi
    For i = 0 To length
:h%iC5?z4V)^0        flag = False51Testing软件测试网#V Xl&@Gy(|-s/K
        For j = 0 To userCount51Testing软件测试网 o!{ k$Kz7|Aj
            If userNameList(i).Text = arrUserName(j) Then
d?B4Ibw2`u0                flag = True51Testing软件测试网#q$B@ l@o9]
                If lastActionList(i).Text > arrLastAction(j) Then
tEW-aZ1`5} t YB,x0                    arrDeleteSessions(delCount) = arrSessionId(j)
`\8{!Xw0                    arrDeleteUserName(delCount) = arrUserName(j)
O)O+_ T'SU0                    arrSessionId(j) = sessionIdList(i).Text51Testing软件测试网6NSwe/m_`7K
                    arrLastAction(j) = lastActionList(i).Text
:G6?8|$P8m%ZO0                Else51Testing软件测试网{AnLp z*a%A
                    arrDeleteSessions(delCount) = sessionIdList(i).Text
g m_6yP;\%r0                    arrDeleteUserName(delCount) = userNameList(i).Text
w+sL ["}'_d{R0                End If    51Testing软件测试网pt)w9h9o(f
                delCount = delCount + 1
S5G0^GbO DE0                Exit For 
F u5H1n5r|0            End If51Testing软件测试网o'p#QX`[7BR
        Next51Testing软件测试网bek:d[
        51Testing软件测试网+y"WU1@S/i'PS4zyw
        If flag = False Then51Testing软件测试网t+r#ooR]qk
            arrSessionId(userCount) = sessionIdList(i).Text
Fp,V7@ox0            arrLastAction(userCount) = lastActionList(i).Text51Testing软件测试网0iCg_N Ss2K@
            arrUserName(userCount) = userNameList(i).Text
0`!VSe R0            userCount = userCount + 1
WL YQX[K/j+Pw~0        End If          
uep.Gr1G.[c"}K0    Next
y(g_z`n[.u0        51Testing软件测试网mb-q#\#|C/C&[
    strReturn = arrDeleteSessions(0) + ":" + arrDeleteUserName(0)51Testing软件测试网W6gd"@(pF \(_M
    For i = 1 To delCount - 1
eLGf4x O7oy'D0        strReturn = strReturn + "," + arrDeleteSessions(i) + ":" + arrDeleteUserName(i)
m;a7B#p6rY+cC0    Next
}vjX0CCj6}0   
HN R;Y)vOQ0@0    Set sessionIdList = Nothing
.{)BD;x5d0    Set userNameList = Nothing
9l%['Nv!Kq9BF0    Set lastActionList = Nothing
ivg ZMx \F!J0    Set root = Nothing
$G:Owd8Uw0    Set bjDOMDoc = Nothing51Testing软件测试网 s["Qno4u
    GetQCUnavailSessions = strReturn51Testing软件测试网co#jD3w+R
End Function51Testing软件测试网 L6`Y`~)dx [!?X.p&n
51Testing软件测试网-Z/@u'h&[1E
    6.选择VB6文件菜单,Make该EXE应用程序到本机D:\SinckyQC\QCLicenseCleanUp.exe文件夹下
sP1T$V"Y8ts0    7.关闭VB6
w:XBn*NMS0    8.在D:\SinckyQC目录下新建一个文本文件,输入一行内容:http://[QCServerName]:8080/sabin,[QC Site Admin username],[QC Site Admin password],并保存该文件,名为property.conf51Testing软件测试网3U GHDg{(c*Yf
    9.双击QCLicenseCleanUp.exe运行即可;如果出错,请打开VB6去调试,直到成功
8dlq$jhL0    10.在该文件夹下检查出现的QCLicenseCleanUp.log文件,打开显示类似如下内容:51Testing软件测试网 cD$c+B9?8j
**************************************************************************
9fR?%B*N.Y0作者:叶赫华 运行时间:9/1/2009 11:46:05 AM
s#L6FO/[&B0当前QC服务器共有14个连接
ga/kWg.UCK {!U0开始在叶赫华本机清理重复连接...
sVVT&w^0删除重复连接[SessionID:UserName] [39390:sincky.zhang] 成功...51Testing软件测试网#}Pkz2},`Ga
删除重复连接[SessionID:UserName] [39326:hehua.ye] 成功...
*h.j TXzs0连接清理完毕!
T'H?%DT0作者:叶赫华 结束时间:9/1/2009 11:46:23 AM
A%x;Jc Yh1^6k]ms0**************************************************************************51Testing软件测试网'R lr.o;@$x2M,A9vP
【完】     叶赫华       2009年9月     上海       MSN: SINCKYZHANG@GMAIL.COM51Testing软件测试网}x$U&o\G$ym]

X5d P&FL}1r)SG4I?0

L ^H)zR0
SRp1@ d9H {)f0Link URL: http://sinckyzhang.blog.sohu.com/130888193.html

TAG:

のDream的个人空间 引用 删除 violet0214   /   2012-07-02 17:13:58
5
 

评分:0

我来说两句

日历

« 2024-04-23  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 20937
  • 日志数: 27
  • 建立时间: 2006-12-22
  • 更新时间: 2007-07-18

RSS订阅

Open Toolbar