2015-02-25 2 views
0

Я пытаюсь написать модульный код в groovy внутри soapui. Я создал класс Example, имеющий метод hello(), который имеет оператор log.info.Ошибка SoapUI groovy: Нет такого свойства: log для класса

Я создаю экземпляр этого класса для вызова функции hello. При запуске скрипта я получаю следующую ошибку.

groovy.lang.MissingPropertyException: Нет такого свойства: журнал для класса: Пример

Нужна помощь по этому вопросу.

class Example{ 

    void hello(){ 
    log.info ' >>>> Hello World'; 
    } 

} 

Example example = new Example(); 
example.hello(); 

ответ

0

Или вы можете покинуть log.info, все еще делая то же самое. вещь.

class Example{ 

    String hello(){ 
    return ' >>>> Hello World'; 
    } 

} 

Example example = new Example(); 
log.info example.hello(); 
+0

Мне нужно, чтобы выяснить, как использовать log.info внутри функции. –

+0

Требование - мне нужно использовать log.info внутри функции. Как и в функции hello() в этом случае. –

0

Найдено решение. Вот оно. 1. Необходимо поставить класс в контекст. 2. Необходимо передать журнал как объект функции.

Надеемся, что это поможет другим людям найти подобное решение.

class Example{ 

    void hello(Object log){ 
    log.info ' >>>> Hello World'; 
    } 

} 

context = new Example(); 
context.hello(log); 
2

Вот пример с полным сценарием. Здесь объект журнала является переменной-членом и инициализируется с помощью конструктора с картой. Обратите внимание, что здесь класс также присутствует в самом скрипте. Если это многоразовое, нужно скопировать мимо него в любом сценарии

class TestLogging { 
    def log 

    def sayHello(def name){ 
    log.info "Hello $name" 
    } 
} 

def testLogging = new TestLogging(log:log) 
testLogging.sayHello('Mr. ABC') 

Обычно, когда я пишу некоторые заводные библиотеку классов, я использую следующий способ определения класса, создание библиотеки и доступ к SoapUI предоставляется переменным, а также , и как звонить из сценария. Это покажет повторного использования из class- определяют один раз, повторно использовать каждый, где:

TestRunnerHelper.groovy - скомпилировать & создать .jar файл и поместите его в/бен/доб каталог SOAPUI_HOME

class TestRunnerHelper { 
    def context 
    def testRunner 
    def log 

    def printTestDetails() { 
    log.info 'Name of the test case is :'+testRunner.testCase.name 
    log.info 'Name of the test suite is : '+testRunner.testCase.testSuite.name 
    } 
} 

Теперь написать скрипт в любом из вашего project-> testsuite-> теста к регистру> шаг теста Groovy сценарий с помощью указанного класса

def testHelper = new TestRunnerHelper(context:context, log:log, testRunner:testRunner) 
testHelper.printTestDetails() 

Примечания: если у вас есть какое-то название пакета в заводной классе, то я t также должен быть импортирован в скрипт.

Что я хотел бы рассказать по второму примеру, так это то, что вы можете писать классы библиотек в своей любимой среде IDE (я написал groovy, но вы также можете использовать java) и использовать переменные context, log, testRunner, предоставленные soapui by передавая их вашим классам.

0

Вот решение для добавления функции log внутри класса и вызова этой функции из другого (внешнего) скрипта.

Создание Groovy Шаг в SoapUI (TestLogging) и добавьте следующий код:

class TestLogging 
{ 
    def log; 
    def context; 
    def testRunner; 

    def sayHello() 
     { 
      log.info ("Hello "); 
    } 

} 

context.setProperty("testClass", new TestLogging(log:log,context:context,testRunner:testRunner)); 

Добавить другой сценарий и добавить следующий код для добавления функции класса TestLogging:

tSuite = testRunner.testCase.testSuite.project.testSuites["TestSuiteName"] 

module = tSuite.testCases["TestCaseName"].testSteps["TestLogging"] 

// initialise the tSuite; which places an instance of TestLogging in the context 
module.run(testRunner, context) 

// get the instance of TestLogging Class from the context. 
def testClass= context.testClass 

//call function 
testClass.sayHello(); 
1

Здесь это прямой и простой способ сделать это.

  1. Внутри класса объявить журнал как статическую переменную.

    def static log;

  2. Вне класса (пример) инициализируйте его журналом.

    Example.log = log;

Вот полный код для этого.

Example.log = log; 
Example.hello(); 

class Example{ 

def static log; 

    def static hello(){ 
     log.info ("Hello World..."); 
    } 
} 

В случае нестационарного метода. Создайте ссылку на класс и вызовите функцию через нее. Например.

Example ex = new Example; 
ex.hello(); 
0

Вам нужно определить log с именем класса, и вы должны объявить log, как static внутри класса, как показано ниже:

Example.log = log  
class Example {  
    def static log  
    public void hello()    
    {   
    log.info ' >>>> Hello World';   
    } 
}   

Example example = new Example();  
example.hello();  
Смежные вопросы