请求解决ALM与Eclipse工作区集成的自动化测试联动问题
实现ALM与Eclipse Selenium项目集成的方案
1. 将Eclipse中的Selenium项目打包为可执行Jar
- 在Eclipse中右键目标项目 → Export → Runnable JAR File
- 选择包含
main方法的Selenium测试主类,勾选Package required libraries into generated JAR,将Jar包导出到固定路径(例如D:\selenium-automation\test-executor.jar) - 本地验证:打开命令行执行
java -jar D:\selenium-automation\test-executor.jar,确认Selenium脚本可正常运行并输出执行结果
2. 配置ALM自定义工作流,触发Jar执行
- 登录ALM后台,进入Customization模块(需管理员权限)
- 定位到目标测试集,编辑其工作流脚本:
- 在测试用例执行触发事件(如
TEST_RUN_START)中添加命令行执行逻辑,示例VBScript代码:Function Test_Run_MoveTo(status) If status = "Ready" Then Dim shellObj Set shellObj = CreateObject("WScript.Shell") ' 传递ALM测试用例ID作为参数,供Selenium脚本识别对应任务 shellObj.Run "java -jar D:\selenium-automation\test-executor.jar " & Test_Fields.Field("TS_TEST_ID").Value, 0, True Set shellObj = Nothing End If End Function
- 在测试用例执行触发事件(如
3. 在Selenium代码中集成ALM REST API同步测试结果
- 在Java项目中添加HTTP请求依赖(或直接用
HttpURLConnection),执行完Selenium测试后调用ALM API更新对应测试用例状态:- 示例Java代码片段:
import java.net.HttpURLConnection; import java.net.URL; import java.io.OutputStream; import org.json.JSONObject; public class AlmResultSync { public static void syncResult(String almTestId, boolean isPassed) throws Exception { // ALM基础配置 String almServer = "http://your-alm-domain/qcbin/rest/domains/[DOMAIN]/projects/[PROJECT]"; String user = "alm-username"; String pwd = "alm-password"; // 登录获取会话Cookie URL loginUrl = new URL(almServer + "/authentication-point/authenticate"); HttpURLConnection loginConn = (HttpURLConnection) loginUrl.openConnection(); loginConn.setRequestMethod("POST"); loginConn.setDoOutput(true); OutputStream os = loginConn.getOutputStream(); os.write(("j_username=" + user + "&j_password=" + pwd).getBytes()); os.flush(); String sessionCookie = loginConn.getHeaderField("Set-Cookie"); // 更新测试结果 URL updateUrl = new URL(almServer + "/runs/" + almTestId); HttpURLConnection updateConn = (HttpURLConnection) updateUrl.openConnection(); updateConn.setRequestMethod("PUT"); updateConn.setRequestProperty("Cookie", sessionCookie); updateConn.setRequestProperty("Content-Type", "application/json"); updateConn.setDoOutput(true); JSONObject payload = new JSONObject(); payload.put("status", isPassed ? "Passed" : "Failed"); os = updateConn.getOutputStream(); os.write(payload.toString().getBytes()); os.flush(); if (updateConn.getResponseCode() == 200) { System.out.println("ALM测试结果同步成功"); } else { System.err.println("ALM测试结果同步失败"); } } } - 在Selenium主类的测试逻辑结束后,调用
syncResult方法,传入ALM测试用例ID和执行结果
- 示例Java代码片段:
4. 调试与验证
- 在ALM中手动触发测试用例执行,检查命令行是否被调用、Jar包是否正常运行
- 确认ALM中对应测试用例的执行状态被正确更新
- 排查权限问题:确保ALM服务账户有执行命令行和访问Jar包路径的权限,操作用户有修改测试结果的权限
内容的提问来源于stack exchange,提问作者Pradeep Peketi
相关产品推荐
相关产品推荐

