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

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

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

    众所周知,HP Quality Center宣称的OTA(开放式测试架构)可以实现对QC软件的完全自定义和二次开发;OTA的实现就是依赖QC强大的API接口,掌握这些API接口,企业针对QC的一切扩展想像,即可化作现实;而恰巧QC API的强大让人感觉无所不能,横扫天下!
~S0HwVs4s0    本文以QC9.2为蓝本,通过一个QC扩展功能的实现,来演示如何使用QC的API接口。51Testing软件测试网!z0In Op~0d,y
实例简介51Testing软件测试网K*~}b~8W9J/fQ v
    QC软件分为站点管理员和QC应用二部分,在企业使用QC的过程中,有时候一个客户端在使用QC应用的时候,会在后台的站点管理员占用二个License连接;如果你的公司QC License比较紧张,这种情况更要避免!我们能够想到的办法是在站点管理员里的Site Connections里将重复的用户连接断开,但是如果QC软件频繁发生这种情况,即便公司的QC管理员也不想随叫随到的去删除这些重复的QC连接;因此,这里我们自然想到QC宣称的无所不能的OTA API,通过编程手段自动定期删除重复连接。51Testing软件测试网$o T?.Xqe#P
前置条件
9|q v f3H0
  • 公司已经安装好Quality Center9.2服务器
  • 本机客户端可以正常访问该服务器
  • 本机安装Visual Basic6.0
  • 本机具有QC站点管理员登录帐号
    +v6@wZsl.O0
实例开发51Testing软件测试网i A e/o DB'@3q$n5J
  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()
0MzcW0l$R#Y,w `sU:wu0    Dim QCConnection As Object51Testing软件测试网#k,O aJ5R4l
    Dim sReply As Integer51Testing软件测试网,I@h'u u,z0j gN
    Dim i As Integer
.SVT\]2V/d?0    Dim strCons As String51Testing软件测试网d(s;N6b]3|
    Dim strUnavailSessions As String51Testing软件测试网 Z m X,[be9i YQ}
    Dim arrUnavailSessions() As String
d:_)} c~e0    Dim strConfig As String51Testing软件测试网`;^j2nW`;W
    Dim arrConfig() As String
g%yt}b(YG0   
#X.R} ^O!gm0    Open "./property.conf" For Input As #351Testing软件测试网6EDl(q RC
    Line Input #3, strConfig51Testing软件测试网3@VR ?$b6i
    Close #351Testing软件测试网h:g}_ V x:L"G
    arrConfig = Split(Trim(strConfig), ",")
7^6^ W,?7E&Z _2nS051Testing软件测试网${8IF)@6Vh#O
    Set QCConnection = New SACLIENTLib.SAapi51Testing软件测试网m| sC6b)DNz@
    QCConnection.Login arrConfig(0), arrConfig(1), arrConfig(2)51Testing软件测试网g9z+YG fF^EfMg
    sReply = QCConnection.GetConnectionsCount("DEFAULT", "FlightDemo")
abB$b&i^0    strCons = Trim(QCConnection.GetConnections)
0L8uo,[R0T$f0   
/@nW$r-d%X5\UB0    Open "./qcconnections.xml" For Output As #1
1lx4]Ry5p"@4Psl1`0    Print #1, Trim(strCons)51Testing软件测试网8?+v4s a4O(p^}
    Close #1
[0f~$U5X#{ q0    51Testing软件测试网3OX(G Rn O1L
    Open "./QCLicenseCleanUp.log" For Append As #251Testing软件测试网.D#f(p p;g3LQ'r.c
    Print #2, "**************************************************************************"51Testing软件测试网}!|Y)Q5_Z8N7xX? Rdr
    Print #2, "作者:叶赫华 运行时间:" & Now()51Testing软件测试网]'JiFYD2o
    Print #2, "当前QC服务器共有" & CStr(sReply) & "个连接."51Testing软件测试网|5hzY'u&k;^PW+p
   
Eg }bTLP0    strUnavailSessions = GetQCUnavailSessions("./qcconnections.xml")51Testing软件测试网@p'|1a6A!^P]
    arrUnavailSessions = Split(strUnavailSessions, ",")
8s{i OG4O0   
?C wBaH*]k e}0    If Trim(strUnavailSessions) = ":" Then
:pw `2ns0        Print #2, "没有重复的连接需要断开!"
n,_X^_6\d.cl0    Else51Testing软件测试网bA+Ao5mX.OV
        Print #2, "开始在叶赫华本机清理重复连接..."51Testing软件测试网3ja%p)rI/Q7FL5e
        For i = 0 To UBound(arrUnavailSessions)51Testing软件测试网5dQ6V9^"XIh@
            QCConnection.Disconnect CLng(Split(arrUnavailSessions(i), ":")(0))51Testing软件测试网y`PCy`]t
            Print #2, "删除重复连接[SessionID:UserName] [" & arrUnavailSessions(i) & "] 成功..."51Testing软件测试网l'z[(E.Q*f#Do
        Next
9h^?UD@0        Print #2, "连接清理完毕!"51Testing软件测试网3xg9jk LQ"}2_.b#}
    End If
x z ~6]%[:qF.o051Testing软件测试网7u L5S~0}1N+x
    Print #2, "作者:叶赫华 结束时间:" & Now()51Testing软件测试网3ymQ U m|-Ht0_-Y
    Print #2, "**************************************************************************"
_0i n ~vv.S-|u0    Print #2,
6u/@lRK i~0    Close #2
#U'K ?:p+b6Nt0    Set QCConnection = Nothing51Testing软件测试网d)U3Zye
    End
.K'[r];_ U0End Sub51Testing软件测试网K,krBe"pV}!O
51Testing软件测试网;Xm5H:zA2?fF8C
Public Function GetQCUnavailSessions(strConFilePath As String) As String51Testing软件测试网 rV+u6t9X9i
    Dim arrSessionId() As String
6B"n4v;d@8J#mM+P pI%gw0    Dim arrUserName() As String51Testing软件测试网s8x/K4tLzq
    Dim arrLastAction() As String51Testing软件测试网c%i-sw}L+z([f
    Dim arrDeleteSessions() As String51Testing软件测试网`!E NblJ]w
    Dim strReturn As String51Testing软件测试网8l6_lT S Q ?
    Dim delCount As Integer
?,A)PnC|0    Dim userCount As Integer51Testing软件测试网tuiv$h
    delCount = 051Testing软件测试网q.oGYod
    userCount = 051Testing软件测试网2sJP"H)q-?_
    51Testing软件测试网:R"P"`FE G*]
    Dim objDOMDoc As New DOMDocument6051Testing软件测试网{/Bsyy1_yh
    objDOMDoc.async = False
w3}%TAH&zex6m0    objDOMDoc.Load strConFilePath51Testing软件测试网)~?pu-q'} z
    51Testing软件测试网0a3O3s9s#n9B/}7| @#M
    Dim root As MSXML2.IXMLDOMElement51Testing软件测试网 H/P?vv5b;^S
    Set root = objDOMDoc.documentElement
.e/h$S n-B)_`]0   
4Z-Bg4[X6b T"n0    Dim sessionIdList As MSXML2.IXMLDOMNodeList51Testing软件测试网'd(N im'C&q;?6G*L
    Set sessionIdList = root.selectNodes("/GetConnections/TDXItem/LOGIN_SESSION_ID")
lZ;djygQ9u0    Dim userNameList As MSXML2.IXMLDOMNodeList51Testing软件测试网b? c&QG
    Set userNameList = root.selectNodes("/GetConnections/TDXItem/USERNAME")
N9s0E8J8^R:x0    Dim lastActionList As MSXML2.IXMLDOMNodeList
? c7d8j[0j0    Set lastActionList = root.selectNodes("/GetConnections/TDXItem/LASTACTION")
X/a+l+N-X])r2N2B0    51Testing软件测试网 Q` M9u)mI!K/] E)F&~ c
    Dim length As Integer
c8w/r}{ N#~n)q0    length = sessionIdList.length - 1
/K8_Hs6c@MXx0   
lB,LWU3w0    ReDim arrSessionId(length)
c,M@sH"JJI0    ReDim arrUserName(length)51Testing软件测试网 HmWV&a\(NI+X t
    ReDim arrLastAction(length)
|]] a2m)Pj P0    ReDim arrDeleteSessions(length)
8[6XOOf3oCu5iOC5e0    ReDim arrDeleteUserName(length)51Testing软件测试网+q9F W[+DW
    51Testing软件测试网'A"r{9A7Bm6K
    Dim i As Integer
U9z*~ ?@$@0    Dim j As Integer
,UjH.l7HhVO0    Dim flag As Boolean
7JO]'Cze0   
-h"q9bV(m%x B0    For i = 0 To length
9}1v|W'?;Y0^9{!p0        flag = False
+jC,aqhDMsP k F0        For j = 0 To userCount
8o4w0L\?rtMr'Y B)I0            If userNameList(i).Text = arrUserName(j) Then
L'Z;mO's9n0                flag = True51Testing软件测试网'GXx$Q%J!oH3b9X-W
                If lastActionList(i).Text > arrLastAction(j) Then51Testing软件测试网nq@2k3xl&K%L2s
                    arrDeleteSessions(delCount) = arrSessionId(j)
_%@F [ WAM;|L0                    arrDeleteUserName(delCount) = arrUserName(j)
?s-P+x$v?%XB0                    arrSessionId(j) = sessionIdList(i).Text
'Dfv)ZwdM}/ej0                    arrLastAction(j) = lastActionList(i).Text
,i ODOUUGu!C0                Else51Testing软件测试网1mizn)T5Yl&q _GI
                    arrDeleteSessions(delCount) = sessionIdList(i).Text
Q |o5pdk.F0                    arrDeleteUserName(delCount) = userNameList(i).Text51Testing软件测试网(F |G(N)GZ+ID9c
                End If    51Testing软件测试网0Zfyc-Q8@4x
                delCount = delCount + 1
)cj%c+A+D;dht0                Exit For 
Ea,nX4p%PV+^&h0            End If51Testing软件测试网lZF7cH!Gs
        Next
*}g,E:|a~1c;m0       
*}6m?E2}!i~S0        If flag = False Then
!]skD1Pp/n3iP0            arrSessionId(userCount) = sessionIdList(i).Text51Testing软件测试网 iCaE z1cmh
            arrLastAction(userCount) = lastActionList(i).Text51Testing软件测试网/m)E o?'g.qx7vl
            arrUserName(userCount) = userNameList(i).Text51Testing软件测试网2g%CO Q@7W_
            userCount = userCount + 151Testing软件测试网"Oy!yY6s&U*bM0T
        End If           51Testing软件测试网:QHd Ipq7H
    Next
uA'YZ;r;HL0        51Testing软件测试网`6T*dSK2p%ez&P\9e
    strReturn = arrDeleteSessions(0) + ":" + arrDeleteUserName(0)
Lu7pN uf0    For i = 1 To delCount - 151Testing软件测试网~Uw0nYK
        strReturn = strReturn + "," + arrDeleteSessions(i) + ":" + arrDeleteUserName(i)51Testing软件测试网9[_t-kF3qx&Nr
    Next51Testing软件测试网Ud-oq O(F!Q4~r uc
   
e |SwS6D0    Set sessionIdList = Nothing
']uu&ig~c0    Set userNameList = Nothing
9j `;\/p[1MN0    Set lastActionList = Nothing
qa+?L }0    Set root = Nothing
"^.Vmcq#s3qy^0    Set bjDOMDoc = Nothing51Testing软件测试网WZ!Qm^ s!G8Y%|%C e
    GetQCUnavailSessions = strReturn51Testing软件测试网8CU-bW@8K
End Function
a*i&e&lY{0
XbXb)F*WZ0    6.选择VB6文件菜单,Make该EXE应用程序到本机D:\SinckyQC\QCLicenseCleanUp.exe文件夹下
2Um3Pi"K&l#y0    7.关闭VB6
5m-BPa5cr0    8.在D:\SinckyQC目录下新建一个文本文件,输入一行内容:http://[QCServerName]:8080/sabin,[QC Site Admin username],[QC Site Admin password],并保存该文件,名为property.conf51Testing软件测试网"YI9h+F)q^:\*HK
    9.双击QCLicenseCleanUp.exe运行即可;如果出错,请打开VB6去调试,直到成功
*K)@ ?m,pq0    10.在该文件夹下检查出现的QCLicenseCleanUp.log文件,打开显示类似如下内容:
4B#t/Q2vy#{sD0**************************************************************************
9w&t f F??_vR0作者:叶赫华 运行时间:9/1/2009 11:46:05 AM
K}Gj [Og0当前QC服务器共有14个连接
ES]'ha4Ah `+c#A0开始在叶赫华本机清理重复连接...51Testing软件测试网+]XVhL`1W b;U
删除重复连接[SessionID:UserName] [39390:sincky.zhang] 成功...
_fR}Ob7H{#@0删除重复连接[SessionID:UserName] [39326:hehua.ye] 成功...51Testing软件测试网)m])Whk*Hbn)u
连接清理完毕!
9Z'uL~.fX0作者:叶赫华 结束时间:9/1/2009 11:46:23 AM51Testing软件测试网+k0qcES"nd\
**************************************************************************
5B'O3d1qk9U0【完】     叶赫华       2009年9月     上海       MSN: SINCKYZHANG@GMAIL.COM
&p)eS;K og:cl/}051Testing软件测试网F_H+Dvl*a:N5DzY
51Testing软件测试网)L)M E%hI+Z
51Testing软件测试网%t b5yiI2Qf+B
Link URL: http://sinckyzhang.blog.sohu.com/130888193.html

TAG:

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

评分:0

我来说两句

日历

« 2024-05-08  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

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

RSS订阅

Open Toolbar