Чтение тестовых данных из Mercury Quality Center 9 через java

Мы используем Mercury Quality Center 9 для хранения тестов и результатов тестов.
Мне нужно считать данные тестов из Плана тестирования и записать результат теста в Test Lab. через java.
Я пытался найти информацию об этом в Google, но ничего не нашел.

ОБНОВЛЕНИЕ:

Я попытался использовать qctools4j для работы с MQC 9 со следующим кодом:

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();
}
}

Я получил следующее сообщение об исключении:

*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)*

Что я делаю неправильно?


person Yury Staravoitau    schedule 26.09.2012    source источник
comment
Что касается полученного вами исключения, взгляните на это: netheadaches.wordpress.com/2012/04/22/   -  person aviad    schedule 26.09.2012
comment
Какая у вас версия QC, судя по qctools4j она совместима с 9.2, а не 9.0.   -  person Alex Shnayder    schedule 28.09.2012
comment
9.0. Теперь я попытался использовать заводной скрипт   -  person Yury Staravoitau    schedule 28.09.2012


Ответы (2)


Я принимал участие в разработке QC 9 и не уверен, что есть Java API. Однако существует интерфейс COM или OTA. API. Вы можете использовать некоторую библиотеку, которая помогает вызывать COM API из Java.

Например:

  1. Jacob это открытый исходный код и здесь приведены несколько примеров.
  2. Nevaobject — коммерческий, но более стабильный.

Удачи!

РЕДАКТИРОВАТЬ:

только что видел qctools4j (он основан на Джейкобе) - никогда не пробовал.

person aviad    schedule 26.09.2012

Я нашел, как решить проблему. Я использовал заводной скрипт со следующим кодом (может кому поможет):

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();
}
person Yury Staravoitau    schedule 03.10.2012