`
CharlesCui
  • 浏览: 425964 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

将QC的COM接口开放成Rest服务

阅读更多
以Ruby代码为例,

QC平台的SDK以COM组件的形式对外开放,但这种开放方式只限于本机,如果需要进行远程访问QC开放的接口,需要对这套SDK包装一下,做成标准化的远程通讯协议或方式,比如:ice或者rest。

我的设计是将COM用Ruby包装一下,做成一个对外提供Rest方式接口的QCMetaServer服务器。 过程如下:


首先要访问QC的COM组件,建立全局连接,需要的话可以放到公用的池子里。Ruby做成服务发布的时候通常是按多进程方式发布的,所以一般一个进程一个连接就够了,不需要池子。

其次将所需的所有COM接口封装一下,变成Rest接口,这样可以和其它远程服务器进行通讯。

最后,注意在服务器终止之前释放连接,否则QC的COM会报错:

QCMetaServer.rb:112: [BUG] Segmentation faultruby 1.8.6 (2008-08-11) [i386-mswin32]This application has requested the Runtime to terminate it in an unusual way.Please contact the application’s support team for more information.
QCMetaServer.rb:112: [BUG] Segmentation fault ruby 1.8.6 (2008-08-11) [i386-mswin32] This application has requested the Runtime to terminate it in an unusual way. Please contact the application’s support team for more information.

这个错误对于公司内部少数人使用的情况下没有多大影响,但这种设计对生产环境上的应用来说是不允许的。

对QC接口二次开发之前,需要了解下QC SDK,相关资料请各位网上搜索,我这里资料有限,本人也是边看少而又少的资料,边猜测着开发的。




下面这个图大家引用的较多,这是QC COM中的SDK方法的树状结构图,绝大部分对象都是通过工厂方法生成的,这是规律。






代码如下:

require 'rubygems'
require 'activerecord'
require 'win32ole'
require 'pp'

p "Global initializion."
$qc = WIN32OLE.new("TDApiOle80.TDConnection")
p "Loaded COM => TDApiOle80.TDConnection"
$qc.InitConnectionEx("http://10.2.226.12/qcbin/");
p "QC connection init."
$qc.ConnectProjectEx('ALISOFT_CRM','ALISOFT_CRM2006','cuizheng','');
p "QC project connection init."

require 'sinatra/base'
require 'coderay'

class QCMeta < Sinatra::Base

  get '/' do
    h = {}
    h[:ProjectName] = $qc.ProjectName
    h[:ServerURL] = $qc.ServerURL
    h[:ServerTime] = $qc.ServerTime
    h[:ProjectProperties] = $qc.ProjectProperties
    h[:ServerName] = $qc.ServerName
    h.to_xml
  end
  
  get '/ole' do
    h = {
      "TDApiOle80.TDConnection<functional>" => $qc.ole_func_methods.map{|f|f.to_s},
      "TDApiOle80.TDConnection<property(get)>" => $qc.ole_get_methods.map{|f|f.to_s},
      "TDApiOle80.TDConnection<property(set)>" => $qc.ole_put_methods.map{|f|f.to_s}
    }.to_json
    params[:color].downcase == "true" ? CodeRay.scan(h,:json).div(:line_number => :tables) : h
  end
  
  get '/projects' do
    {:ProjectsList => $qc.ProjectsList}.to_xml
  end

=begin
  <C#>

  int intSub = 286;
  SubjectNode nodSub = objTree.get_NodeById(intSub) as SubjectNode;
  TestFactory objTF = nodSub.TestFactory as TestFactory;
  lstList = objTF.NewList("");
  foreach (Test objTest in lstList)
  {
  MessageBox.Show((string)objTest.Name);
  }
=end

  #~ tm = $qc.TreeManager
  #~ nod = tm.get_NodeById(id)
  #~ nod.TestFactory.NewList("").each do |test|
    #~ pp test.Status
  #~ end


=begin
  <VB>
  Dim BugFactory, BugList
  Set BugFactory = QCConnection.BugFactory
  Set BugList = BugFactory.NewList("") 'Get a list of all the defects.
=end



  get "/bugs" do
    bf = $qc.BugFactory
    bflist = bf.NewList("")

    max = params[:max] || 100
    i = 0
    h = {}
    bflist.each do |bug|
      h[bug.ID] = {
        :Status => bug.Status,
        :AssignedTo => bug.AssignedTo,
        :DetectedBy => bug.DetectedBy,
        :Priority => bug.Priority,
        :Summary => bug.Summary
      }
      i >= max ? break : i+=1
    end
    {:BUGS => h,:COUNT => bflist.Count}.to_xml
  end
  
  def self.run!(options={},&trap_handler)
    set options
    handler      = detect_rack_handler
    handler_name = handler.name.gsub(/.*::/, '')
    puts "== Sinatra/#{Sinatra::VERSION} has taken the stage " +
      "on #{port} for #{environment} with backup from #{handler_name}" unless handler_name =~/cgi/i
    handler.run self, :Host => host, :Port => port do |server|
      trap(:INT) do
        trap_handler.call
        ## Use thins' hard #stop! if available, otherwise just #stop
        server.respond_to?(:stop!) ? server.stop! : server.stop
        puts "\n== Sinatra has ended his set (crowd applauds)" unless handler_name =~/cgi/i
      end
      set :running, true
    end
  rescue Errno::EADDRINUSE => e
    puts "== Someone is already performing on port #{port}!"
  end
end


QCMeta.run!(:host=>'0.0.0.0', :port => 4567){
  begin
    $qc.DisconnectProject
    p "QCMeta disconnected to QC."
    $qc.ReleaseConnection
    p "QCMeta released to QC."
    p "QCMeta will shutdown."
    rescue => e
    p "QCMeta disconnect and release faile."
    p "But server still going to shutdown."
    p e.to
  end
}


服务器启动后,访问如下几个url可得到相应的结果:

http://localhost:4567/(QC的一些信息)

引用
<hash>
<ServerURL>http://10.2.226.12/qcbin</ServerURL>
<ServerTime>2009/11/16 10:56:57</ServerTime>
<ProjectProperties>#&lt;WIN32OLE:0×2cd0404&gt;</ProjectProperties>
<ServerName>http://10.2.226.12/qcbin/wcomsrv.dll</ServerName>
<ProjectName>ALISOFT_CRM2006</ProjectName>
</hash>


http://localhost:4567/ole(下面是COM中所有方法和属性的列表。)

引用
{”TDApiOle80.TDConnection<property(get)>”=>
["Connected",
"ProjectConnected",
"ServerName",
"ProjectName",
"TestRepository",
"UserName",
"TestFactory",
"BugFactory",
"TestSetFactory",
"UserGroupsList",
"HostFactory",
"VCS",
"ProjectsList",
"Command",
"TreeManager",
"ReqFactory",
"ActionPermission",
"DBType",
"DBManager",
"Customization",
"Fields",
"CommonSettings",
"UserSettings",
"HostGroupFactory",
"UsersList",
"Password",
"ExtendedStorage",
"DirectoryPath",
"ChangeFactory",
"MailConditions",
"ServerTime",
"TDSettings",
"ProjectProperties",
"DomainName",
"TextParam",
"TDParams",
"UsingProgress",
"CheckoutRepository",
"ViewsRepository",
"VcsDbRepository",
"RunFactory",
"ModuleVisible",
"ProjectsListEx",
"DomainsList",
"Analysis",
"VMRepository",
"DBName",
"Rules",
"TestSetTreeManager",
"AlertManager",
"AllowReconnect",
"KeepConnection",
"IgnoreHtmlFormat",
"ReportRole",
"ComponentFactory",
"ComponentFolderFactory",
"ServerURL",
"ProductInfo"],
“TDApiOle80.TDConnection<property(set)>”=>
["UsingProgress",
"AllowReconnect",
"KeepConnection",
"IgnoreHtmlFormat",
"ClientType"],
“TDApiOle80.TDConnection<functional>”=>
["QueryInterface",
"AddRef",
"Release",
"GetTypeInfoCount",
"GetTypeInfo",
"GetIDsOfNames",
"Invoke",
"InitConnection",
"ReleaseConnection",
"ConnectProject",
"DisconnectProject",
"GetLicense",
"SendMail",
"ChangePassword",
"PurgeRuns",
"GetLicenseStatus",
"InitConnectionEx",
"ConnectProjectEx",
"ConnectToVCSAs",
"GetLicenses",
"SynchronizeFollowUps",
"GetTDVersion",
"GetTypeInfoCount",
"GetTypeInfo",
"GetIDsOfNames",
"Invoke"]}



http://localhost:4567/projects(得到QC中项目列表,COM中的ProjectsList对象怎么使用还没有找到文档)

引用
<hash>
<ProjectsList>#&lt;WIN32OLE:0×344f07c&gt;</ProjectsList>
</hash>



http://localhost:4567/bugs(显示当前项目的Bug信息,目前有乱码问题。通过max参数控制显示的数量)

引用
<hash>
<BUGS>
<85>
<Summary>&#178;&#191;&#195;&#197;&#195;&#232;&#202;&#246;&#206;&#170;511&#184;&#246;&#215;&#214;&#183;&#251;&#181;&#196;&#178;&#191;&#195;&#197;&#163;&#172;&#212;&#218;&#178;&#191;&#195;&#197;&#208;&#197;&#207;&#162;&#181;&#196;&#178;&#191;&#195;&#197;&#195;&#232;&#202;&#246;&#214;&#208;&#206;&#222;&#183;&#168;&#207;&#212;&#202;&#190;</Summary>
<AssignedTo>quake.hongwq</AssignedTo>
<DetectedBy>snake.zhangw</DetectedBy>
<Status>Closed</Status>
<Priority></Priority>
</85>
<9>
<Summary>&#178;&#250;&#198;&#183;&#208;&#197;&#207;&#162;&#207;&#212;&#202;&#190;&#178;&#187;&#205;&#234;&#213;&#251;</Summary>
<AssignedTo>morgan.zhul</AssignedTo>
<DetectedBy>snake.zhangw</DetectedBy>
<Status>Closed</Status>
<Priority></Priority>
</9>
<47>
<Summary>&#177;&#168;&#188;&#219;&#180;&#242;&#211;&#161;&#212;&#164;&#192;&#192;&#210;&#179;&#195;&#187;&#211;&#208;&#180;&#242;&#211;&#161;&#186;&#205;&#183;&#181;&#187;&#216;&#176;&#180;&#197;&#165;</Summary>
<AssignedTo>morgan.zhul</AssignedTo>
<DetectedBy>jack</DetectedBy>
<Status>Closed</Status>
<Priority></Priority>
</47>
<28>
<Summary>&#202;&#228;&#200;&#235;&#183;&#199;&#183;&#168;&#210;&#179;&#194;&#235;&#163;&#172;&#179;&#246;&#180;&#237;</Summary>
<AssignedTo>quake.hongwq</AssignedTo>
<DetectedBy>jack</DetectedBy>
<Status>Closed</Status>
<Priority></Priority>
</28>
<66>
  • 大小: 76.9 KB
分享到:
评论

相关推荐

    QC8.2开放式架构指南

    尽管它可能基于较旧的版本QC8.2,但其核心理念和原则仍然具有很高的参考价值,尤其在理解如何将这些原理应用于更新的版本如QC9.2时。这份指南旨在帮助IT专业人员和质量管理人员理解和实施开放式架构,以提高系统的...

    QC8.2和QC9.0相关资料大全

    (4)QC8.2开放式测试体系架构指南.pdf (5)QC9.0BPT英文指南.pdf (6)QC9.0Site_Admin_API_Reference英文版 (7)QC9.0安装指南英文版 (8)QC9.O中文版用户手册 (9)QC操作汇总.doc (10)QC测试用例管理.ppt ...

    高通快充协议QC3.0介绍

    - **效率提升**:据高通宣称,与传统的充电方式相比,QC3.0可以将充电速度提高4倍,而发热降低25%。这意味着用户可以在较短时间内充满电池,且设备不会过热。 - **兼容性**:虽然QC3.0是新一代的快充标准,但它向下...

    STM32 驱动IO模拟QC2.0握手程序

    标题中提到的“STM32 驱动IO模拟QC2.0握手程序”表明本文将介绍如何使用STM32微控制器,通过硬件抽象层(HAL)库来模拟快速充电2.0(Quick Charge 2.0, QC2.0)协议的握手过程。QC2.0是高通公司开发的一种用于快速充电的...

    QC资料 QC资料 QC资料

    QC,全称为Quality Control,中文译为质量控制,是产品或服务生产过程中确保质量的一系列管理活动。质量控制旨在发现并消除可能导致产品或服务不符合规定要求的因素,以达到预期的质量标准。在IT行业中,QC是软件...

    高通快充协议QC4.0介绍

    QC4.0协议向下兼容前几代的QC技术,这意味着配备了QC4.0的设备也可以使用支持QC3.0或更低版本的充电器,但充电速度将受到限制。此外,QC4.0不仅适用于手机,还广泛应用于平板电脑、笔记本电脑、智能穿戴设备等,甚至...

    QC9.0资料大全(安装、使用和管理)

    在本资料大全中,我们将深入探讨如何安装、使用和管理QC9.0,以便您能够充分利用这个工具来优化您的测试流程。 ### 一、QC9.0的安装 安装QC9.0是一个系统性的过程,需要考虑服务器配置、数据库设置以及客户端部署...

    QC客户端插件,IE7,IE8下可以完美运行

    QC客户端插件是与QC服务器进行交互的必备组件,它允许用户在本地计算机上通过浏览器或者其他特定的接口直接访问和操作QC的数据。 标题提到的"QC客户端插件,IE7,IE8下可以完美运行",意味着这个插件是针对旧版本的...

    QC9.0License+QC9.2License+QC10.0License

    【QC9.0 License、QC9.2 License、QC10.0 License】是与IBM Rational Quality Manager(RQM)相关的授权文件,该软件是IBM提供的一款强大的质量管理工具,主要用于测试管理和质量保证。这些版本号代表着不同的软件...

    QC浏览器.rar

    6. **更新和支持**:作为专门针对QC的浏览器,开发者会持续关注QC平台的更新,确保其始终保持兼容性,并提供及时的技术支持和更新服务。 使用"QC浏览器"解压后的文件可能包含安装程序和其他相关文档,如用户手册、...

    通过excel将用例导入到QC

    不过,值得注意的是,自动化导入虽然便利,但也需要对Excel和QC接口有一定的了解,以及对数据处理的谨慎态度,避免数据丢失或错误导入。因此,在实际操作中,应当充分测试和验证导入过程,确保其稳定可靠。

    QC9.0 安装步骤

    QC9.0作为其中的一个版本,其安装过程涉及多个步骤与特定的环境要求,以下将对QC9.0的安装步骤及其所需环境进行详细解析。 #### 安装前准备与环境要求 QC9.0的安装首先需要一个稳定且满足一定硬件和软件条件的操作...

    QC安装部署教程

    Jboss是一个开源的应用服务器,用于托管QC的应用服务。启动成功后,用户可以通过浏览器访问QC的界面。 7. **完成安装** 最后一步,安装程序会显示“大功告成”的消息,并提示用户可以通过特定的URL访问QC9界面。...

    QC3.0_DEMO.zip_qc3.0_电源_移动电源_移动电源QC3.0_程序

    移动电源程序,QC3.0协议,完整的移动电源模块,带充放电,保护功能

    通过excel导入QC

    在IT行业中,质量中心(Quality Center,简称QC)是一款由HP公司开发的强大的测试管理和缺陷跟踪工具,广泛应用于软件测试领域。...在实际应用中,不断熟悉和掌握Excel与QC的接口特性,将有助于进一步优化工作流程。

    最新QC浏览器1.5版本,打开即可以用

    它可能包含了一些特定的插件或者技术调整,以适应QC的Web服务接口,提供稳定且高效的访问体验。此外,考虑到不同用户的需求,它支持跨平台使用,无论是在Windows、Mac还是Linux环境下,都能提供一致的用户体验。 **...

    TD8和QC9差异比较图

    - **接口类型**: 使用ADO (ActiveX Data Objects) 接口来访问数据库。 **QC9:** - **数据库客户端**: 不需要安装额外的数据库客户端。 - **访问方式**: 通过JDBC Type 4驱动直接连接到数据库服务器。 #### 存储...

    QC 10.0安装和操作手册

    总之,HP Quality Center 10.00提供了一套全面的质量管理解决方案,其安装和操作涉及多个环节,熟练掌握这些知识将有助于提升软件项目的质量管理效率。通过详细阅读和实践提供的安装手册和操作指南,用户可以更好地...

    QC Excel导入插件

    **QC Excel导入插件**解决了这个问题,它允许用户在Excel环境中预先编辑和格式化数据,然后一次性将这些数据批量导入到QC系统中,降低了人为错误的可能性。 使用这个插件,首先需要在本地计算机上安装**...

    IE访问QC10问题处理

    - 打开IE浏览器,访问QC服务器地址,这将触发客户端组件的下载。 4. **访问QC Server**: - 下载完成后,即可正常使用IE浏览器访问QC Server。 5. **恢复UAC设置**: - 完成配置后,建议将UAC设置恢复至初始...

Global site tag (gtag.js) - Google Analytics