需要通过Java在QC中传递测试用例

时间:2016-06-23 06:28:38

标签: java qc hp-quality-center com4j

任何人都可以帮助我解决以下问题 我想通过Java在QC中传递测试用例,我使用con4j直到测试集,但是我无法在相应的测试集下获取测试用例。 请问任何人如何通过com4j

在QC中传递测试用例
import com.qc.ClassFactory;
import com.qc.ITDConnection;
import com.qc.ITestLabFolder;
import com.qc.ITestSetFactory;
import com.qc.ITestSetTreeManager;
import com.qc.ITestSetFolder;
import com.qc.IList;
import com.qc.ITSTest;
import com.qc.ITestSet;
import com.qc.ITestFactory;
import com4j.*;
import com4j.stdole.*;
import com4j.tlbimp.*;
import com4j.tlbimp.def.*;
import com4j.tlbimp.driver.*;
import com4j.util.*;
import com4j.COM4J;
import java.util.*;
import com.qc.IRun;
import com.qc.IRunFactory;


public class Qc_Connect {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String url="http://abc/qcbin/";
        String domain="abc";
        String project="xyz";
        String username="132222";
        String password="Xyz";
        String strTestLabPath = "Root\\Test\\"; 
        String strTestSetName = "TestQC";   


                try{
            ITDConnection itd=ClassFactory.createTDConnection();
            itd.initConnectionEx(url);
            System.out.println("COnnected To QC:"+ itd.connected());

            itd.connectProjectEx(domain,project,username,password);

            System.out.println("Logged into QC");

            //System.out.println("Project_Connected:"+ itd.connected());


            ITestSetFactory objTestSetFactory = (itd.testSetFactory()).queryInterface(ITestSetFactory.class);
            ITestSetTreeManager objTestSetTreeManager = (itd.testSetTreeManager()).queryInterface(ITestSetTreeManager.class);

           ITestSetFolder objTestSetFolder =(objTestSetTreeManager.nodeByPath(strTestLabPath)).queryInterface(ITestSetFolder.class);

           IList its1 = objTestSetFolder.findTestSets(strTestSetName, true, null);
          //IList ls= objTestSetFolder.findTestSets(strTestSetName, true, null);
          System.out.println("No. of Test Set:" + its1.count());
          ITestSet tst= (ITestSet) objTestSetFolder.findTestSets(strTestSetName, true, null).queryInterface(ITSTest.class);
          System.out.println(tst.name());
          //System.out.println( its1.queryInterface(ITestSet.class).name());

          /* foreach (ITestSet testSet : its1.queryInterface(ITestSet.class)){  
           ITestSetFolder tsFolder = (ITestSetFolder)testSet.TestSetFolder;    
           ITSTestFactory tsTestFactory = (ITSTestFactory)testSet.TSTestFactory;   
           List tsTestList = tsTestFactory.NewList("");
           }*/





          /* Com4jObject comObj = (Com4jObject) its1.item(0);
           ITestSet tst = comObj.queryInterface(ITestSet.class); 
           System.out.println("Test Set Name : " + tst.name());
           System.out.println("Test Set ID : " + tst.id());
           System.out.println("Test Set ID : " + tst.status());
           System.out.println("Test Set ID : " );*/


                System.out.println(its1.count());
           System.out.println("TestSet Present");

           Iterator itr = its1.iterator();
           System.out.println(itr.hasNext());
           while (itr.hasNext())
           {
               Com4jObject  comObj = (Com4jObject) itr.next();
           ITestSet sTestSet = comObj.queryInterface(ITestSet.class);
           System.out.println(sTestSet.name());
           Com4jObject comObj2 = sTestSet.tsTestFactory();
           ITestSetFactory test = comObj2.queryInterface(ITestSetFactory.class);
           }

          // ITSTest tsTest=null;
          // tsTest.
           //its1.
          /* comObj = (Com4jObject) its1.item(1);
           ITSTest tst2=comObj.queryInterface(ITSTest.class);*/
        //  System.out.println( tst2.name());
       /*    foreach (ITSTest tsTest : tst2)
        {
         IRun lastRun = (IRun)tsTest.lastRun();
         if (lastRun == null)
         {
            IRunFactory runFactory = (IRunFactory)tsTest.runFactory;
                        String date = "20160203";
                   IRun run = (IRun)runFactory.addItem( date);
                   run.status("Pass");
                   run.autoPost();
         }

        }*/
                }
        catch(Exception e){

            e.printStackTrace();
        }
    }

}

3 个答案:

答案 0 :(得分:0)

如果你使用c#/ vb.net,这很容易完成。但是你正在研究java,我建议在dll上面提供接口来处理操作。这比使用com4j要容易得多。

类似的查询,可能以下可能对您有帮助。我建议不要使用com4j,并使用下面的线程中提供的解决方案,该解决方案经过验证,可以自动恢复,并且可以自动恢复。

QC API JAR to connect using java

总是很难将com4j专门用于HPQC / ALM。由于QC的dll存在故障,并且存在内存泄漏/分配问题,这些问题会在某些平台上频繁崩溃执行dll。

答案 1 :(得分:0)

为什么不构建一个客户端来访问REST API而不是通过OTA接口?

构建基本客户端后,您可以轻松发布运行并更新其状态。

答案 2 :(得分:0)

我知道该职位已经很老了。我必须在Java的OTA中苦苦挣扎,并且无法获得解决该问题的完整文章。 经过大量研究,现在我可以运行代码。 因此,请考虑共享我的代码,以防有人寻求帮助。 这是完整的解决方案。 `

    ITestFactory sTestFactory = (connection.testFactory())
            .queryInterface(ITestFactory.class);
    ITest iTest1 = (sTestFactory.item(12081)).queryInterface(ITest.class);
    System.out.println(iTest1.execDate());
    System.out.println(iTest1.name());

    ITestSetFactory sTestSetFactory = (connection.testSetFactory())
            .queryInterface(ITestSetFactory.class);

    ITestSet sTestSet = (sTestSetFactory.item(1402))
            .queryInterface(ITestSet.class);

    System.out.println(sTestSet.name() + "\n Test Set ID" + sTestSet.id());

    IBaseFactory testFactory1 = sTestSet.tsTestFactory().queryInterface(
            IBaseFactory.class);
    testFactory1.addItem(iTest1);
    System.out.println("Test case has been Added");
    System.out.println(testFactory1.newList("").count());
    IList tsTestlist = testFactory1.newList("");
    ITSTest tsTest;
    for (int tsTestIndex = 1; tsTestIndex <= tsTestlist.count(); tsTestIndex++) {
        Com4jObject comObj = (Com4jObject) tsTestlist.item(tsTestIndex);
        tsTest = comObj.queryInterface(ITSTest.class);

        if (tsTest.name().equalsIgnoreCase("[3]TC_OTA_API_Test")) {
            System.out.println("Hostname" + tsTest.hostName() + "\n"
                    + tsTest.name() + "\n" + tsTest.status());
            IRun lastRun = (IRun) tsTest.lastRun();
            // IRun lastRun = comObjRun.queryInterface(IRun.class);

            // don't update test if it may have been modified by someone
            // else
            if (lastRun == null) {
                System.out.println("I am here last Run = Null");
                runFactory = tsTest.runFactory().queryInterface(
                        IRunFactory.class);
                System.out.println(runFactory.newList("").count());
                String runName = "TestRun_Automated";

                Com4jObject comObjRunForThisTS = runFactory
                        .addItem(runName);
                IRun runObjectForThisTS = comObjRunForThisTS
                        .queryInterface(IRun.class);
                runObjectForThisTS.status("Passed");
                runObjectForThisTS.post();
                runObjectForThisTS.refresh();
            }
        }
    }



`