You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python通过win32调用ALM OTA无法执行测试用例问题

问题原因

你的代码无法触发执行是3个核心错误导致的:

  • RunFactory.AddItem方法调用错误:该方法仅接收1个可选字符串类型参数(自定义运行记录名称),你错误传入了TSTest对象和状态字符串,创建出的Run对象本身是无效实例,所有后续操作都不会生效。
  • 执行顺序逻辑错误:StartExecution()是测试集调度器的方法,不属于单个Run实例;且你在持久化Run对象之前就调用执行方法,ALM服务端根本收不到执行请求。
  • 未设置必要的执行参数:创建Run对象后没有指定执行主机、初始化状态,ALM不会分配执行资源调度用例。

另外你代码里导入了大量未使用的模块、定义了未使用的变量,容易触发win32com的COM对象引用异常,建议全部清理。

修正后代码
import win32com.client
import socket

def execute_testlab(self,ALM_TEST_SET_PATH):
    try:
        tsFolder = self.TDConnection.TestSetTreeManager.NodeByPath(ALM_TEST_SET_PATH)
        print(f"匹配到测试集路径: {tsFolder.Path}")
        tsFactory = tsFolder.TestSetFactory
        td_tsetfilter = tsFactory.Filter
        td_testset = td_tsetfilter.NewList()
        
        for singletest in td_testset:
            print(f"加载测试集: {singletest.Name}")
            # 如果是需要调度器执行的自动化测试集,直接用下面两行替代逐用例执行逻辑
            # scheduler = singletest.StartExecution("")
            # scheduler.Run()
            # continue
            td_tsTestSetFactory = singletest.TSTestFactory
            td_testlist = td_tsTestSetFactory.NewList("")
            
            for testitem in td_testlist:
                print(f"触发用例执行: {testitem.Name}")
                lclRunFactory = testitem.RunFactory
                # 传入自定义运行记录名称,传空字符串会自动生成带时间戳的默认名称
                lclobjRun = lclRunFactory.AddItem(f"AutoRun_{testitem.Name}")
                # 必须先将Run对象提交到ALM服务端
                lclobjRun.Post()
                # 配置执行参数:指定执行主机、初始状态
                lclobjRun.HostName = socket.gethostname()
                lclobjRun.Status = "Not Completed"
                lclobjRun.Post()
                # 触发执行
                lclobjRun.Run()
                # 执行后提交状态变更
                lclobjRun.Post()
    except Exception as e:
        print(f"执行出错: {str(e)}")
        # 打印COM异常详情方便排查
        if hasattr(e, 'excepinfo'):
            print(f"ALM接口错误码: {e.excepinfo[5]}, 错误信息: {e.excepinfo[2]}")
排错提示
  • 如果调用后ALM端只生成了运行记录但没有实际拉起测试脚本,检查你用的测试集类型:性能测试集、UFT统一调度的测试集不能逐用例调用Run方法,必须用测试集自带的Scheduler调度器启动执行。
  • 确认当前连接ALM的账号对目标测试集、测试用例有执行权限,无权限时Post操作会抛出COM异常但不会中断代码(没加异常捕获时会静默失败)。
  • 检查Python和ALM客户端的位数匹配:32位Python必须配32位ALM客户端,64位Python配64位ALM客户端,位数不匹配会出现方法调用无响应、不报错也不执行的问题。

内容的提问来源于stack exchange,提问作者sak-iiitb syed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 16:39:19