Создание библиотеки скриптов в бесплатной версии SoapUI
Я новичок в SoapUI и groovy scripting
Я хотел бы создать репозиторий groovy скриптов, которые могут быть повторно использованы на различных этапах тестирования
Я использую бесплатную версию SoapUI, и ниже приведена структура моего проекта SoapUI
Project
|-TestSuite
| |-TestCase
| |-TestSteps
| |-LocalScript (Groovy TestStep to reuse library scripts)
| |-OtherTestStep (Run TestCase TestStep)
|-ScriptLibrary
|-TestCase
|-TestSteps
|-GroovyScriptStep1 (Contain a class for commonly used functions)
|-GroovyScriptStep2 (Contain another class for other functions)
вот что я смог сделать:
я смог создать библиотеку, используя образец, упомянутый в этот пост. Подобно примеру в post, мой код в шаге test (GroovyScriptStep1 согласно вышеуказанной структуре) библиотеки просто считывал некоторое значение из внешнего файла и используется в шаге теста другого TestSuite (localscript шаг в вышеуказанной структуре).
вот в чем проблема:
теперь я хочу создать новый класс и добавить к нему функцию, которая будет нуждаться в информации от запущенного класса и просто распечатать его. Разница здесь в том, что некоторые значения генерируются в тестовом запуске и должны передаваться в сценарий библиотеки inorder для обработки / печати так далее.
чтобы сделать мой вопрос более ясным следующий фрагмент кода
Я буду использовать простой сценарий здесь
пример цели: Хотите иметь возможность печатать все утверждения и статус (так как это будет использоваться во всех тестовых случаях, которые я хочу создать библиотеку)
код для того же, когда не использовать библиотеку будет как под (это может пойти как groovy шаг сценария)
def obj = context.testCase.getTestStepByName("Request 1");
def assertions = obj.getAssertionList()
//Loop on assertions
assertions.each{
log.info(it.name + ' --> ' + it.status)
код что-то подобное в тестовом примере библиотеки TestSuite шаг
context.setProperty("Assertions", new Assertions());
class Assertions{
def printAssertion(def someArgumentToGetAssertionlistforTestStepinAnotherTestSuite){
def obj = ????
def assertions = obj.getAssertionList()
//Loop on assertions
assertions.each{
log.info(it.name + ' --> ' + it.status)
}
}
}
код, из которого я хочу вызвать этот метод (LocalScript в соответствии со структурой проекта выше)
scripts = testRunner.testCase.testSuite.project.testSuites["ScriptLibrary"];
scripts.testCases["Scripts"].testSteps["Assertions"].run(testRunner, context);
context.Assertions.printAssertion(ArgumentRequired);
это только один пример, я хочу создать библиотеки некоторых более распространенных скриптов, которые используют переменную контекста при локальном использовании
любезно помогите мне с этим и, пожалуйста, дайте мне знать, если требуется дополнительная информация/разъяснение
3 ответов
что я получаю от ваших вопросов, так это то, что вы хотите создать библиотеку кода в SoapUI, которую можно использовать повторно. Я думаю, что лучший способ-создать JAR-файлы и развернуть их в папке ext SoapUI
- создайте новый файл скрипта groovy с классом (следует стандартам java в именовании файлов, т. е. имя класса и имя файла должны быть одинаковыми)
- скомпилируйте файл кода groovy
- создать файл jar
- разверните файл jar на Soapui_home/bin / ext папка
- перезапустите SoapUI, если он уже был открыт
- создайте объект класса и используйте методы в любом месте проектов SoapUI
Примечание: если вы переносите свой проект на другую машину, убедитесь, что вы также переносите эти библиотеки, если вы используете их в проектах
детали с Пример:
Шаг 1: создайте новый файл скрипта groovy с структура класса
i. Рассматривая класс ScriptLibrary, содержащий метод с именем printTestDetails, как в следующем коде в нем:
class ScriptLibrary {
def context
def testRunner
def log
def printTestDetails(def PrintThisToo) {
log.info 'Name of the test case is :'+testRunner.testCase.name
log.info 'Name of the test suite is : '+testRunner.testCase.testSuite.name
log.info PrintThisToo
}
}
ii. Сохраните файл с именем класса,ScriptLibrary.groovy
в этом случае
Шаг 2: скомпилировать код
i. Откройте командную строку и запустите следующую команду (из папки, где ваш хранится)
компиляции код:
groovyc -d classes SimplePrint.groovy
Шаг 3: создайте файл jar
i. После компиляции кода мы можем создать jar Создать jar-файл:
jar cvf SimplePrint.jar -C classes .
Шаг 4: разверните файл jar в SoapUI_Home/bin/ext
папку
Шаг 5: перезапустите SoapUI, если он уже был открыт
Шаг 6: создайте объект класса и используйте методы в любом месте проектов SoapUI
i. Создание объекта
def scripts = new ScriptLibrary(context:context, log:log, testRunner:testRunner)
ii. Вызов методов
scripts.printTestDetails(“This is my argument”)
Я надеюсь, что это решит вашу проблему над всеми, этот подход позволит вам свободно использовать код в любом месте в SoapUI и, самое главное, решит вашу проблему для получения context
, log
и testrunner
внешний код
вы также можете использовать любую IDE по вашему выбору для создания библиотеки кода и работы над ней для компиляции и создания jar.
Дайте мне знать, если у вас любые сомнения или нужно больше разъяснений
это должно помочь
context.setProperty("Assertions", new Assertions());
class Assertions{
def printAssertion( tStep){
def assertions = tStep.getAssertionList()
//Loop on assertions
assertions.each{
log.info(it.name + ' --> ' + it.status)
}
}
}
и назовите это так
TestStep=testRunner.testCase.testSuite.getTestCaseByName("yourTestCase").getTestStepByName("stepName")
context.Assertions.printAssertion(TestStep)
Для Утверждения :
поместите этот скрипт в репозиторий
context.setProperty("Assertions", new Assertions());
class Assertions{
def printAssertion(tStep){
def assertions = tStep.getAssertionList()
//Loop on assertions
}
}
используйте этот скрипт в SoapUI:
TestStep=testRunner.testCase.testSuite.getTestCaseByName("addTestCase").getTestStepByName("add")
//context.Assertions.printAssertion(TestStep)
scripts = testRunner.testCase.testSuite.project.testSuites["ScriptLibrary"];
scripts.testCases["Demo"].testSteps["TestAssertion"].run(testRunner, context);
context.Assertions.printAssertion(TestStep).each{
log.info(it.name + ' --> ' + it.status)
}
return null