如何查询当前正在执行的组件参数的参数名称?
首先想到的是使用UFT自动化对象并查询.BusinessComponent
属性,如下所示:
Dim UFTApp: Set UFTApp=CreateObject ("QuickTest.Application")
Dim Index
Print "BusinessComponent.ParameterDefinitions.Count=" & CStr (UFTApp.BusinessComponent.ParameterDefinitions.Count)
For Index = 1 To UFTApp.BusinessComponent.ParameterDefinitions.Count
Print CStr (Index) & ": " & UFTApp.BusinessComponent.ParameterDefinitions.Item (Index).Name
Next
有了姓名后,我可以致电Parameter (<Name>)
来获取价值。或者,要获取值,可以使用
Print "BusinessComponent.ParameterDefinitions.GetParameters.Count=" & CStr (UFTApp.BusinessComponent.ParameterDefinitions.GetParameters.Count)
For Index = 1 To UFTApp.BusinessComponent.ParameterDefinitions.GetParameters.Count
Print CStr (Index) & ": " & UFTApp.BusinessComponent.ParameterDefinitions.GetParameters.Item (Index).Value
Next
如果组件是独立执行的,这可以正常工作。
但是!如果您将组件作为BPT的一部分执行,.Count
方法将返回零。
在这种情况下似乎没有设置ParameterDefinitions
集合。 (注意.BusinessComponent.Name
返回正确的值,因此容器实例本身确实设置正确。)
那么,如果我事先不知道参数名称,如何迭代当前组件的参数?
一旦您创建了不允许事先“知道”名称的通用库代码,就会出现此问题。
我99%确定同样的问题适用于QTP,所以我也包含了该标签。
答案 0 :(得分:0)
事实证明,主要问题是path = ['Leslie','Marie','Tori','Kevin'] # more complex requires two nodes to be created
def get_node_by_path(path=[])...
未正确设置,至少在所有情况下都没有。
要获取参数定义,我们需要查看ALM的API。
在那里,主要问题是我们不知道要查询哪个组件,即我们不知道哪个是当前正在运行的组件。
我发现获取当前组件名称(和ALM路径)的唯一可靠方法是检查BusinessComponent.ParameterDefinitions
。 (UFTApp.BusinessComponent.Location
是不可靠的,因为某些版本的UFT似乎使用组件ID在测试计划中查找组件名称,这会产生一些(不可预测的)测试名称,而不是正确的组件名称。)
因此,为了枚举当前组件的参数,我现在在ALM的组件文件夹工厂中查找组件的路径(从UFTApp.BusinessComponent.Name
获得),过滤生成的ALM文件夹,以便过滤的列表仅包含具有搜索名称的组件(也从.Location
获得),并使用ALM的API查询参数。
只要您不使用版本控制,或者在运行以下代码之前确保在修改参数后首先签入更改,这似乎工作正常。
由于ALM API不理解UFT想要的.Location
前缀(以及“[ALM] “
属性值中包含的前缀),因此有些快速&amp;构建要搜索的路径(或名称)需要脏字符串解析。
结果代码:
BusinessComponent.Location
由于这完全回答了我原来的问题,我会接受我自己的答案,尽管看起来很糟糕,所以每个有相同问题的人都可以使用这种方法。
答案 1 :(得分:0)
使用ALM + BPT,我使用以下代码多次执行一个组件,并且每次获得正确的参数计数。我也在同一个BPT中使用了两次相同的组件。
UFTApp.BusinessComponent.ParameterDefinitions.Count
你是一直有0或只有一次吗?