Создание библиотеки скриптов в бесплатной версии 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

  1. создайте новый файл скрипта groovy с классом (следует стандартам java в именовании файлов, т. е. имя класса и имя файла должны быть одинаковыми)
  2. скомпилируйте файл кода groovy
  3. создать файл jar
  4. разверните файл jar на Soapui_home/bin / ext папка
  5. перезапустите SoapUI, если он уже был открыт
  6. создайте объект класса и используйте методы в любом месте проектов 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