少年智则国智,少年富则国富,少年强则国强,少年独立则国独立,少年自由则国自由,少年进步则国进步,少年胜于欧洲,则国胜于欧洲,少年雄于地球,则国雄于地球。红日初升,其道大光;河出伏流,一泻汪洋;潜龙腾渊,鳞爪飞扬;乳虎啸谷,百兽震惶;鹰隼试翼,风尘吸张;奇花初胎,矞矞皇皇;干将发硎,有作其芒;天戴其苍,地履其黄;纵有千古,横有八荒;前途似海,来日方长。美哉,我少年中国,与天不老!壮哉,我中国少年,与国无疆!
HP Quality Center OTA API实例 [附源码]
众所周知,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/fQv
QC软件分为站点管理员和QC应用二部分,在企业使用QC的过程中,有时候一个客户端在使用QC应用的时候,会在后台的站点管理员占用二个License连接;如果你的公司QC License比较紧张,这种情况更要避免!我们能够想到的办法是在站点管理员里的Site Connections里将重复的用户连接断开,但是如果QC软件频繁发生这种情况,即便公司的QC管理员也不想随叫随到的去删除这些重复的QC连接;因此,这里我们自然想到QC宣称的无所不能的OTA API,通过编程手段自动定期删除重复连接。51Testing软件测试网$o T?.Xqe#P
前置条件
9|qvf3H0
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,[be9iYQ}
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(qRC
Line Input #3, strConfig51Testing软件测试网3@VR ?$b6i
Close #351Testing软件测试网h:g}_Vx: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
1l x4]Ry5p"@4P sl1`0 Print #1, Trim(strCons)51Testing软件测试网8?+v4sa4O(p^}
Close #1
[0f~$U5X#{ q0 51Testing软件测试网3OX(GRn O1L
Open "./QCLicenseCleanUp.log" For Append As #251Testing软件测试网.D#f(p p;g3L Q'r.c
Print #2, "**************************************************************************"51Testing软件测试网}!|Y)Q5_Z8N7xX?Rdr
Print #2, "作者:叶赫华 运行时间:" & Now()51Testing软件测试网]'JiFY D2o
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*]ke}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`P Cy`]t
Print #2, "删除重复连接[SessionID:UserName] [" & arrUnavailSessions(i) & "] 成功..."51Testing软件测试网l'z[(E.Q*f#Do
Next
9h^?UD@0 Print #2, "连接清理完毕!"51Testing软件测试网3xg9j k LQ"}2_.b#}
End If
xz ~6]%[:qF.o051Testing软件测试网7uL5S~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软件测试网`!ENblJ]w
Dim strReturn As String51Testing软件测试网8l6_lTSQ ?
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$Sn-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
~S0HwVs4s0 本文以QC9.2为蓝本,通过一个QC扩展功能的实现,来演示如何使用QC的API接口。51Testing软件测试网!z0In Op~0d,y
实例简介51Testing软件测试网K*~}b~8W9J/fQv
QC软件分为站点管理员和QC应用二部分,在企业使用QC的过程中,有时候一个客户端在使用QC应用的时候,会在后台的站点管理员占用二个License连接;如果你的公司QC License比较紧张,这种情况更要避免!我们能够想到的办法是在站点管理员里的Site Connections里将重复的用户连接断开,但是如果QC软件频繁发生这种情况,即便公司的QC管理员也不想随叫随到的去删除这些重复的QC连接;因此,这里我们自然想到QC宣称的无所不能的OTA API,通过编程手段自动定期删除重复连接。51Testing软件测试网$o T?.Xqe#P
前置条件
9|qvf3H0
- 公司已经安装好Quality Center9.2服务器
- 本机客户端可以正常访问该服务器
- 本机安装Visual Basic6.0
- 本机具有QC站点管理员登录帐号
+v6@wZsl.O0
- 打开VB6,新建一个标准EXE程序
- 从VB6项目菜单里选择References,打开项目参考窗口
- 从项目参考窗口,找到以下二个COM组件,【SAClient Type Libray-Quality Center Site Administration】和【Microsoft XML V6.0】,并勾选它们,OK关闭该窗口
- 双击当前的Form1窗体,出现编程界面
- 拷贝以下代码到编程窗口:
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,[be9iYQ}
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(qRC
Line Input #3, strConfig51Testing软件测试网3@VR ?$b6i
Close #351Testing软件测试网h:g}_Vx: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
1l x4]Ry5p"@4P sl1`0 Print #1, Trim(strCons)51Testing软件测试网8?+v4sa4O(p^}
Close #1
[0f~$U5X#{ q0 51Testing软件测试网3OX(GRn O1L
Open "./QCLicenseCleanUp.log" For Append As #251Testing软件测试网.D#f(p p;g3L Q'r.c
Print #2, "**************************************************************************"51Testing软件测试网}!|Y)Q5_Z8N7xX?Rdr
Print #2, "作者:叶赫华 运行时间:" & Now()51Testing软件测试网]'JiFY D2o
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*]ke}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`P Cy`]t
Print #2, "删除重复连接[SessionID:UserName] [" & arrUnavailSessions(i) & "] 成功..."51Testing软件测试网l'z[(E.Q*f#Do
Next
9h^?UD@0 Print #2, "连接清理完毕!"51Testing软件测试网3xg9j k LQ"}2_.b#}
End If
xz ~6]%[:qF.o051Testing软件测试网7uL5S~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软件测试网`!ENblJ]w
Dim strReturn As String51Testing软件测试网8l6_lTSQ ?
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$Sn-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