gpt4 book ai didi

VBScript 函数作为参数,或类似的构造

转载 作者:行者123 更新时间:2023-12-02 19:32:55 26 4
gpt4 key购买 nike

我正在尝试在 HP 统一功能测试中整合测试就像程序员那样。对于那些不知道的人来说,该工具使用 VBScript 作为其驱动程序。

因为我想在多个 UFT 操作中使用同一 DataTable 中的数据-- 并且因为全局表上已经有一组不同的数据-- 我想从外部文件检索数据。UFT 很高兴支持此功能。

我目前的计划是,根据我正在运行的测试,我将仅迭代该表中的一系列行。

这是我想出的脚本:

' targets the local sheet, but 
' not the same value as dtLocalSheet
Const sheetNum = 2

dim sheetRowCount
DataTable.ImportSheet "PersonFile.xlsx", 1, sheetNum
sheetRowCount = DataTable.GetSheet(sheetNum).GetRowCount

dim firstRow, lastRow
firstRow = Parameter("FirstPersonIndex")
lastRow = Parameter("LastPersonIndex")
If sheetRowCount < lastRow Then
lastRow = sheetRowCount
End If

If sheetRowCount >= firstRow Then
Dim i
For i = firstRow To lastRow
DataTable.SetCurrentRow i

' begin payload
MsgBox(DataTable.Value("LastName", dtLocalSheet))
' end payload

Next
End if

我不想重复所有这些样板文件每次我想使用这个模式。我真的很想要这样的东西:

在函数库中:

sub LoopThroughSheetAnd(sheetFile, doThis)
' targets the local sheet, but
' not the same value as dtLocalSheet
Const sheetNum = 2

dim sheetRowCount
DataTable.ImportSheet sheetFile, 1, sheetNum
sheetRowCount = DataTable.GetSheet(sheetNum).GetRowCount

dim firstRow, lastRow
firstRow = Parameter("FirstRow")
lastRow = Parameter("LastRow")
If sheetRowCount < lastRow Then
lastRow = sheetRowCount
End If

If sheetRowCount >= firstRow Then
Dim i
For i = firstRow To lastRow
DataTable.SetCurrentRow i

call doThis()
Next
End if
end sub

在原来的 Action 中...

sub Payload1()
MsgBox(DataTable.Value("LastName", dtLocalSheet))
end sub
LoopThroughSheetAnd "PersonFile.xlsx", Payload1

在一个单独的操作中,3或4步后...

sub Payload2()
' compare the data against another data source
end sub
LoopThroughSheetAnd "PersonFile.xlsx", Payload2

以上代码在 VBScript 中不起作用。抛出类型不匹配错误一旦我们尝试将 Payload1 作为参数传递。

如何在 VBScript 中合理地实现这一目标?如果答案也适用于 UFT,则可获得奖励积分。

最佳答案

可以使用GetRef()函数将函数作为参数传递。这是一个实用的 map 函数,就像您在 JavaScript 中看到的那样,它接受数组并为数组的每个元素调用一个函数:

Sub Map(a, f)
Dim i
For i = 0 To UBound(a)
' Call a function on each element and replace its value with the function return value
a(i) = f(a(i))
Next
End Sub

Map MyArray, GetRef("SomeFunc")

现在您可以编写 SomeFunc 以便它对值进行操作并返回更新的值:

Function SomeFunc(i)
SomeFunc = i + 1
End Function

这很好用。 map 使用我们传递给它的函数“指针”调用 SomeFunc

您可以使用 LoopThroughStreetAnd 函数执行类似的操作:

LoopThroughStreetAnd "PersonFile.xlsx", GetRef("Payload2")

关于VBScript 函数作为参数,或类似的构造,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31077792/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com