我们公司需要连接到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),所以也许您可以看一下。