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 比较简单的使用,意在为大家发散思维,开拓思想。也许在实际工作中,可能会遇到有更好的案例,期待能共同讨论。

你可能感兴趣的:(Architecture)