Передать строку как имя переменной QTP

У меня есть функция, которая выполняет одну и ту же операцию для всех моих скриптов, но изменится только переменная, в которой хранится значение Pass-Fail. Например, в одном скрипте -> статус хранится в Envrionment.Value("Current_Status") в другом скрипте -> статус хранится в DataTable.Value("Status",1) в другом скрипте -> статус хранится в objRS("AddCriteria_Status").Значение

Итак, я пытаюсь создать функцию, в которой я передаю эти параметры в виде строк, а затем использую их как имена переменных. Вот пример кода:

Envrionment.Value("Current_Status") = "none"
Environment.Value("Fail_text") = "none"
Call AddCriteria("Environment.Value(""Current_Status"")","Environment.Value(""Fail_text"")")

Pubic Function AddCriteria(varStatus,varActual)

varTemp = ""

Execute(varStatus+ "=InProgress")    'change status to InProgress by the time execution is done
Execute(varActual + "=not_defined")   'this will have the reason the case failed

....code

If varTemp = "FAIL" Then
 Execute(varStatus+ "=PASS")
 Execute(varActual + "=PASS")
Else
 Execute(varStatus+ "=FAIL")
 Execute(varActual + "=Criteria did not get added")
End If

End Function

При вызове подпрограммы я хочу, чтобы значение Environment.Value("Current_Status") изменилось с "none" на "InProgress", а затем на "PASS". Но после выполнения команды "Execute" переменная среды становится пустой .

Поскольку CVar не поддерживается в VBScript, я не могу его использовать.

Я попробовал Eval, но он не работает в другом направлении, то есть: если вы измените значение Environment.Value("Current_Status"), то изменится значение Eval(varStatus), но я не смог найти способ изменить значение Eval(varStatus), чтобы значение Environment.Value("Current_Status") изменилось.

Пожалуйста, помогите. Я застрял на этом в течение недели.

!!!Чего я и добиваюсь!!!

В файле .vbs передать любую строку функции в качестве параметра; и преобразовать его в имя переменной в этой функции. Простой пример: передать строку «abc» в качестве параметра функции -> и внутри этой функции преобразовать строку в имя переменной для сохранения значения [скажем, abc = «PASS»]

!!!Как я пытаюсь это сделать!!!

Я попытался использовать команду «Выполнить», так как это решение, которое я получил из предыдущего сообщения [vbscript Преобразовать строку в переменную в цикле?

Использование "CVar" - это способ, но он не поддерживается в VBScript. Так что у меня закончились идеи

!!!Проблемы с которыми я столкнулся!!!

Честно говоря, я не понял логики использования "Выполнить", но тем не менее попробовал. К сожалению, не получилось. При использовании команды выполнения (как указано в коде) переменные среды становятся пустыми.


person Rahul    schedule 11.12.2014    source источник


Ответы (1)


Идеи:

  • Используйте ExecuteGlobal для выполнения назначения, которое вы хотите выполнить, если это то, что вы хотите. Eval и особенно Execute имеют тонкие ограничения в отношении области, в которой они живут.

  • Целевая переменная (т. е. переменная, которая получает значение в присваивании, оцениваемом ExecuteGlobal) должна быть глобальной переменной.

  • Если вызов ExecuteGlobal происходит в глобальной области действия действия, целевая переменная также должна быть объявлена ​​там. (Я думаю.)

  • Если вызов ExecuteGlobal происходит в подпрограмме в библиотеке функций, целевая переменная также должна быть объявлена ​​там. (Я это точно знаю. Но читайте дальше.)

Чтобы еще больше помочь вам, мне понадобится обновленная информация по вашему вопросу, потому что неясно, чего вы хотите достичь, и какие проблемы вы видите. Поскольку -- Eval не изменяет значения, он просто оценивает выражение, переданное в виде строки, и возвращает его значение. Если выражение имеет побочные эффекты, такие как установка глобальной переменной, вам может не повезти, потому что... ну... это зависит от того, где эта глобальная переменная объявлена ​​и инициализирована (если вообще) и где Происходит вызов ExecuteGlobal. Действия и библиотеки НЕ имеют одной глобальной области действия, даже если это выглядит так, и это может привести к странному поведению.

Но, как я уже сказал, если вы объясните, чего вы пытаетесь достичь (получено 90 %), как вы пытаетесь это сделать (получено 40 %) и с какими проблемами вы сталкиваетесь (получено 10 %), я Я уверен, что могу обновить этот ответ, чтобы он приблизился к решению.

** Обновлять **

Я использую этот код библиотеки для всех вычислений выражений во время выполнения, будь то из библиотеки или действия:

' Interpret (execute) a piece of VSH source code consisting of statements -- success?
'   Code: String containing VBS source code. Passed by reference for performance reasons only
Public Function ExecCode (ByRef Code)
    Dim ErrNumber
    Dim ErrDescription

    On error resume next ' Avoid getting kicked out by errors in the code contained in Code
    ExecuteGlobal Code
    ErrNumber=Err.Number
    ErrDescription=Err.Description
    On error goto 0 ' Re-enable RTE handling

    If ErrNumber <> 0 Then
        ExecCode=false

        Print "Code execution failed ('" & ErrDescription & "'), code:" & vbNewline & Code & "<eof>"
    else
        ExecCode=true
    End If
End Function

Dim GlobalVar

' Interpret (execute) a piece of VSH source code consisting of a single expression -- success?
'   Expr; String containing a VBS expression. Passed by reference for performance reasons only.
'   Target: Variable receiving the value to which the expression evaluates
Public Function EvalCodeAndAssign (ByRef Expr, ByRef Target)

    ' In order to force "Option explicit", we don´t use Eval, but ExecCode (and thus ExecuteGlobal):
    Dim Code: Code="Option Explicit: GlobalVar=(" & Expr & ")"
    Dim Result: Result=ExecCode (Code)
    If Result Then
        Target=GlobalVar
    End If
    EvalCodeAndAssign=Result

End Function

Обновление 2: если оператор, который вы передаете ExecuteGlobal, содержит кавычки (которые, я думаю, отсутствуют в вашем коде), он должен быть заключен в кавычки, т.е. вы должны использовать двойные кавычки, как в

ExecuteGlobal "x=""This is a string"""

Потому что ExecuteGlobal/Execute/Eval делают следующее: берут строку и интерпретируют ее как код VBScript. Код, который вы пытаетесь использовать, недействителен из-за отсутствия кавычек.

person TheBlastOne    schedule 11.12.2014