Question

We use Mercury Quality Center 9 for storage tests and test results.
I need to read test data from Test Plan and to write test result into Test Lab via java.
I tried to find about this in google but I have not found anything.

UPDATE:

I tried to use qctools4j for working with MQC 9 with the following code:

public void connect() {
try{
    IQcConnection conn = QcConnectionFactory.createConnection("http://qc/qcbin");                           
    conn.connect("login", "password", "DEFAULT","project");                         
    TestClient tc = conn.getTestClient();
    System.out.println("Connection success!!!");
}
catch (QcException e) {
    System.out.println(e.getMessage());
    e.printStackTrace();
}
}

I got the following exception message:

*org.qctools4j.exception.QcException: Can't co-create object
    at org.qctools4j.clients.QcConnectionImpl.initConnection(Unknown Source)
    at org.qctools4j.clients.QcConnectionImpl.<init>(Unknown Source)
    at org.qctools4j.QcConnectionFactory.createConnection(Unknown Source)
    at automation_framework1.automation_framework1.QCWorker.connect1(QCWorker.java:38)
    at automation_framework1.automation_framework1.Main.main(Main.java:12)
Caused by: com.jacob.com.ComFailException: Can't co-create object
    at com.jacob.com.Dispatch.createInstanceNative(Native Method)
    at com.jacob.com.Dispatch.<init>(Dispatch.java:99)
    at com.jacob.activeX.ActiveXComponent.<init>(ActiveXComponent.java:58)
    at org.qctools4j.clients.QcConnectionImpl.initConnection(Unknown Source)*

What am I doing wrong?

Was it helpful?

Solution

I took part in developping QC 9 and I am not sure there is Java API. However, there is a COM interface or OTA API. You can use some library that helps to call COM API from Java.

For example:

  1. Jacob it is open source and here are some examples.
  2. Nevaobject - it is commercial but more stable.

Good luck!

EDIT:

just saw qctools4j (it is based on Jacob) - never tried it.

OTHER TIPS

I found how to solve the problem. I used groovy scriptom with the following code (may be it will help somebody):

def tdc;
public QualityCenterController(){
static{
System.load("C:\\WINDOWS\\system32\\OTAClient.dll");
System.load("D:\\Work\\automation_framework\\libs\\lib\\jacob-1.16-M2-x86.dll");
}

public void connect(){
    tdc = new ActiveXObject ("TDApiOle80.TDConnection");
    tdc.InitConnectionEx("http://qc/qcbin");
    tdc.Login("username", "password");
    tdc.Connect("DEFAULT","PROJECT");
    System.out.println("login is success");
}

//ReqFactory Object
public void getRequirements(){
    def requironmetns = tdc.ReqFactory();
    def listReq = requironmetns.NewList("");
    for (def iterReq : listReq) {
        getRequirement(iterReq);
    }
    println listReq.count();
}

//Req Object
public void getRequirement(def itemReq){
    println 'ID: '+itemReq.ID();
    println 'Name:' + itemReq.Name();
    println 'Path:' + itemReq.Path();
    println 'Reviewed:' + itemReq.Reviewed();

    println 'Author:' + itemReq.Author();
    println 'Priority: ' + itemReq.Priority();
    println 'Comment: '+removeHtmlTag(itemReq.Comment());
    println 'Type: ' + itemReq.Type();



}
public Test getTestsFromTestLab(String path){

    Test resultTest = new Test();
    def labFolder = tdc.TestSetTreeManager.NodeByPath(path);
    def tsList = labFolder.FindTestInstances("");

    for (def iterable_element : tsList){

        Test test = getTestData(iterable_element);
        def steps =  iterable_element.Test().DesignStepFactory();
        TestStep  testStep = getTest(steps);
    }
    return resultTest;
}

public TestStep getTest(def testData){
    TestStep testStep = new TestStep();
    def listSteps = testData.NewList("");
    for(def item1 : listSteps){
        testStep = getTestStepData(item1);
        showTestStep(testStep);
    }
    return testStep;
}

private TestStep getTestStepData(def stepData){
    TestStep testStep =  new TestStep();
    testStep.setId(stepData.ID());
    testStep.setName(stepData.StepName());
    testStep.setDescription(removeHtmlTag(stepData.StepDescription()));
    testStep.setExpected(removeHtmlTag(stepData.StepExpectedResult()));
    testStep.setStepOrder(stepData.Order());
    return testStep;
}

public Test getTestData(def testData){
    Test test = new Test();
    test.setId(Integer.parseInt(testData.Id()));
    test.setName(testData.Name());
    test.setExecStatus(testData.Status());
    showTest(test);
    return test;
}

private String removeHtmlTag(String html){
    String result = "";
    result = Jsoup.parse(html).text();
    return result;
}

public void showTestStep(TestStep testStep){
    println testStep.getId();
    println testStep.getName();
    println testStep.getDescription();
    println testStep.getExpected();
    println testStep.getStepOrder();
}
public void showTest(Test test){
    println test.getId();
    println test.getName();
    println test.getExecStatus();
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top