我们公司需要连接到HP alm并使用Java进行差异测试和缺陷。我在64位计算机(jdk 1.8)上工作。我在网络上尝试了许多解决方案,这是不同的测试以及每次测试都会出现的错误。

第一种方法:使用comp4j连接

这是我的Java代码:

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


我得到的例外:

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)


第二种方法:使用rest api进行连接

我一步一步地遵循了本教程
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
本教程使用ALM REST API官方文档
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)。

无论我将什么用户名或密码传递给登录方法,它都将返回状态码200。因此在该代码中不考虑登录名和密码。但是当我尝试使用此代码读取缺陷时:

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;


我得到这个例外:

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


...........

我没有更改api基础结构代码中的任何内容。

我只想编写一个简单的Java代码,使我可以连接到HP alm并读取缺陷。

最佳答案

对于COM4J情况:您有三个问题:


您必须使用Java的32位版本,因为OTAClient.dll是32位的,不幸的是它没有64位版本
您需要从(https://yoursever/qcbin/PlugIns/TDConnectivity/TDConnect.exe)安装ALM连接加载项或注册ALM客户端
当您具有以下内容时,ALM服务器URL必须以qcbin结尾:String url = "https://*****.saas.hpe.com/qcbin/";(以/结尾)


对于REST API情况:看起来您得到了HTML而不是XML,这可能在发生错误并且返回代码不是200时出现,那么ALM可能会返回HTML并带有一些错误消息。我将从检查HTTP返回代码并检查postedEntityReturnedXml中的内容开始

附带说明-我们正在开发一种用于与ALM集成的产品,称为Bumblebee(https://www.agiletestware.com/bumblebee),所以也许您可以看一下。

10-07 13:23