简体   繁体   中英

Connect to HP quality center alm (version 12.50)

We need in our company to connect to HP alm and get differents tests and defects using Java. I work on 64bits machine (jdk 1.8). I tried many solutions on the web, here is different tests and errors I get on each test.

First method: Connecting using comp4j

Here is my Java code:

String url = "https://*****.saas.hpe.com/qcbin/";
    String domain = "DEFAULT_827852153";
    String project = "827852153_DEMO";
    String username = "****";
    String password = "*****";
    try {
        ITDConnection itd = ClassFactory.createTDConnection();
        itd.initConnectionEx(url);
        System.out.println("Test1:" + itd.connected());
        itd.connectProjectEx(domain, project, username, password);
    } catch (Exception e) {
        e.printStackTrace();
    }

The exception I get:

com4j.ExecutionException: com4j.ComException: 80040154 CoCreateInstance failed : Classe non enregistrée : .\com4j.cpp:153
at com4j.ComThread.execute(ComThread.java:236)
at com4j.Task.execute(Task.java:26)
at com4j.COM4J.createInstance(COM4J.java:99)
at com4j.COM4J.createInstance(COM4J.java:74)
at com.mercury.qualitycenter.otaclient.ClassFactory.createTDConnection(Unknown Source)
at infrastructure.Test.main(Test.java:24)

Second method: Connecting using rest api

I followed this tutorial step by step https://www.consulting-bolte.de/index.php/tech-blog/hp-alm/hp-alm-rest-api/115-connect-to-hp-alm-via-java-using-rest-api This tutorial uses ALM REST API official documentation ( https://admhelp.microfocus.com/alm/en/12.60/api_refs/REST_TECH_PREVIEW/ALM_REST_API_TP.html#REST_API_Tech_Preview/CodeSamples/infrastructure/RestConnector.htm%3FTocPath%3DExample%2520Application%7Cinfrastructure%7C_____10 ).

Whatever user or password I pass to the login method it returns status code 200. So login and password aren't considered in the code. But when i try read defects using this code:

AlmConnector alm = new AlmConnector();
    RestConnector conn = RestConnector.getInstance();
    conn.init(new HashMap<String, String>(), Constants.HOST,
            Constants.DOMAIN, Constants.PROJECT);
    alm.login("***", "***");
    conn.getQCSession();
    String defectUrl = conn.buildEntityCollectionUrl("defect");
    defectUrl += "/89";
    Map<String, String> requestHeaders = new HashMap<String, String>();
    requestHeaders.put("Accept", "application/xml");
    conn.first = false;
    Response res = conn.httpGet(defectUrl, null, requestHeaders);
    String postedEntityReturnedXml = res.toString();
    Entity entity = EntityMarshallingUtils.marshal(Entity.class,
            postedEntityReturnedXml);
    List<Field> fields = entity.getFields().getField();
    for (Field field : fields) {
        System.out.println(field.getName() + " : "
                + field.getValue().size());
    }
    alm.logout();
    alm = null;

I get this exception:

Exception in thread "main" javax.xml.bind.UnmarshalException: élément inattendu (URI : "", local : "html"). Les éléments attendus sont <{}Entity>
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(UnmarshallingContext.java:681)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:247)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:242)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportUnexpectedChildElement(Loader.java:109)
at 

...........

I didn't change anything in the api infrastructure code.

I just want to write a simple Java code which allows me to connect to HP alm and just read defects.

For the COM4J case: you have three issues:

  1. You have to use 32-bit version of Java, since OTAClient.dll is 32-bit and there is no 64-bit version of it unfortunately
  2. You need to install ALM Connectivity Add-in from ( https://yoursever/qcbin/PlugIns/TDConnectivity/TDConnect.exe ) or register ALM Client
  3. ALM server URL must end with qcbin , while you have: String url = "https://*****.saas.hpe.com/qcbin/"; (ends with / )

For the REST API case: looks like you got HTML instead of XML which is possible when error happens and return code is not 200, then ALM might return HTML with some error message. I would start with checking HTTP return code and checking what is in postedEntityReturnedXml

As a side note - we are developing a product for integration with ALM which is called Bumblebee ( https://www.agiletestware.com/bumblebee ), so maybe you might have a look at it.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM