首页 > 解决方案 > 连接到 HP 质量中心 alm(版本 12.50)

问题描述

我们公司需要连接到 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 并读取缺陷。

标签: java

解决方案


对于 COM4J 案例:您有三个问题:

  1. 您必须使用 32 位版本的 Java,因为 OTAClient.dll 是 32 位的,不幸的是没有 64 位版本
  2. 您需要从 ( https://yoursever/qcbin/PlugIns/TDConnectivity/TDConnect.exe ) 安装 ALM Connectivity Add-in 或注册 ALM Client
  3. 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 ),所以也许您可以看看它。


推荐阅读