在运行时查询组件参数?

时间:2015-12-10 14:36:42

标签: qtp hp-uft alm

如何查询当前正在执行的组件参数的参数名称?

首先想到的是使用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,所以我也包含了该标签。

2 个答案:

答案 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或只有一次吗?