HP ALM Open Test Architecture API 介绍

从事测试工作的同学可能会用过HP ALM(以前叫QC),这是一款基于web的软件测试管理工具,功能非常强大。Test Case Design Test Case Execution Bug Tracking,这些想必大家都非常熟了,还有像Dashboard Management Requirements,这些可能不熟悉的。随着我们对ALM使用的逐渐深入,我们可能会有一些跟ALM相关的Idea,但是通过现有ALM功能不能手动解决,或者解决起来比较麻烦的,怎么办呢?

接下来我将介绍ALM OTA API,向大家展示如何通过它来实现我们的想法,以抛砖引玉,期待引起有相同需求的同学,共同探讨。

什么是ALM OTA API?

如果你正在使用ALM,可以从 Help->Document Library-> 选择HP ALM Open Test Architecture API Reference 去获得。

里面有详细的API介绍,并且包含丰富的例子。代码是用VB写的,不过我接下来的例子将用C#来诠释,以方便大家参考。

简而言之,ALM OTA API 就是一个COM库,通过它我们就能用代码来与ALM交互

口说无凭,有例子才有真相:

案例一:老板想方便的知道本项目这周跑了多少case,开了多少bug,怎么办?

分析:我们可以在ALM手动的一点点去查,然后整理成报告,发给老板。但是每次都得查,要是一不小心眼花了,还可能导致统计出错,要是被老板发现了那问题就可大可小了。此时我们想一想,如果我们能做个网站,提供相应的功能,让老板能够随时查询这样岂不很好?!

网站我们可以选择我们擅长的语言来写,至于如何写,不是本篇文章讨论的重点,我们关心的是如何让我们的网站与ALM通信,以获得数据。

这里以统计bug为例,上一段小代码为大家参考:

首先我们要先建立ALM连接:

 1 public static TDConnection ConnectProject(string server, string user, string pass, string domain, string project)
 2         {
 3             TDConnection tdc = new TDConnection();
 4             try
 5             {
 6                 // Connect to ALM
 7                 tdc.InitConnectionEx(server);
 8                 tdc.Login(user, pass);
 9                 tdc.Connect(domain, project);
10             }
11             catch (Exception ex)
12             {
13                 // Report Exception
14                 //Report.Failure("Failed to connect ALM! " + "Debug Trace: " + ex.ToString());
15                 Console.WriteLine("Failed to connect to ALM! " + "Debug Trace: " + ex.Message.ToString());
16             }
17             return tdc;
18         }

然后我们就可以通过ALM全局连接tdc, 去获得bug的List集合。

        public int GetBugCount()
        {
            BugFactory bugFac = null;
            TDFilter bugFilter = null;
            TDAPIOLELib.List lst = null;

            bugFac = tdc.BugFactory;
            bugFilter = bugFac.Filter;

            //这里设置我们期望的条件
            //比如,期望统计是new或者open的bug,并且severity大于等于3
            bugFilter["BG_STATUS"] = "New Or Open";
            bugFilter["BG_SEVERITY"] = ">=3";

            //此时就可以获得我们期望的bug List了
            lst = bugFac.NewList(bugFilter.Text);

            //有了这个bug List,我们就可以遍历每个bug,做我们期望做的事情,当然也可以直接返回bug数量
            return lst.Count;

        }

如果需要,我们甚至可以把每个bug的具体情况在网站上都罗列起来,相信用户体验一定比去ALM亲自去看要好。

总之老板满意了,我们才踏实嘛。

案例二:假设我们使用了一款自动化工具,写了一些自动化的case,这些case都会映射到ALM里的Manual case。于是我们就想,当我们跑完自动化的case时候,ALM里面的Manual Case也能根据我们自动化case跑的结果,去相应的改变状态,这样就不用我们手动去ALM更改这些Manual Case的状态,岂不很好?

分析:有了ALM OTA API,这些都能实现。

        /// <summary>
        /// 
        /// </summary>
        /// <param name="tsName">Test Set Name</param>
        /// <param name="tcName">Test Instance Name</param>
        /// <param name="status">The status of test instance</param>
        /// <param name="path">Path to target the Test Set</param>
        internal static void ModifyTestInstanceStatus(string tsName, string tcName, string status, string path)
        {
            TestSet ts = null;
            TSTest tc = null;          
            TDFilter aFilter = null;
            TestSetFolder tsFolder = null;
            TSTestFactory tcFactory = null;            
            TestSetTreeManager tsTreeMgr = null;      
            TDAPIOLELib.List lst = null;

            // Create the connectuon to ALM
            TDConnection tdc = ALMUtility.getTDCInstance();

            tsTreeMgr = tdc.TestSetTreeManager;
            tsFolder = tsTreeMgr.get_NodeByPath(path);

            // Find the Test Set
            lst = tsFolder.FindTestSets(tsName);

            // There should be only one Test Set 
            if (lst.Count != 1)
            {
                // Report Failure and Exit
                Console.WriteLine("Failed to find the specific Test Set!");
                return;
            }
            ts = lst[1];

            // Find the specific test in the Test Set
            tcFactory = ts.TSTestFactory;
            aFilter = tcFactory.Filter;
            aFilter["TS_NAME"] = tcName;
            lst = tcFactory.NewList(aFilter.Text);

            //There should be only one Test Instance
            if (lst.Count != 1)
            {
                // Report Error
                Console.WriteLine("Failed to find the specific Test Instance");
                return;
            }
            tc = lst[1];
            tc.Status = status;
            tc.Post();
            Console.WriteLine("Update test case successfully!");
        }

有了上面的方法,我们只要传入相应的参数,就可以实现自动改变test case状态了。

总结:

上面两个案例,是ALM OTA API 比较简单的使用,意在为大家发散思维,开拓思想。也许在实际工作中,可能会遇到有更好的案例,期待能共同讨论。

posted @ 2012-10-11 20:14  大卡尔  阅读(2552)  评论(2编辑  收藏  举报