Как поместить Groovy в централизованную библиотеку Groovy и получить доступ к этому классу из любого скрипта

У меня есть приведенный ниже скрипт Groovy, который мне нужно поместить в централизованную библиотеку Groovy, а затем получить доступ к классу, указанному в Groovy, из любого сценария в моемпути к проекту Ready API: D:\GroovyLib\com\Linos\readyapi\util\property\propertyvalidation

//Change the name of the Properties test step below
def step = context.testCase.testSteps['Properties']

//Parse the xml like you have in your script
def parsedXml = new XmlSlurper().parse(file)

//Get the all the error details from the response as map
def errorDetails = parsedXml.'**'.findAll { it.name() == 'IntegrationServiceErrorCode'}.inject([:]){map, entry ->    map[entry.ErrorCode.text()] = entry.Description.text(); map    }
log.info "Error details from response  : ${errorDetails}"

def failureMessage = new StringBuffer()

//Loop thru properties of Property step and check against the response
step.properties.keySet().each { key ->
   if (errorDetails.containsKey(key)) {
       step.properties[key]?.value == errorDetails[key] ?:  failureMessage.append("Response error code discription mismatch. expected [${step.properties[key]?.value}] vs actual [${errorDetails[key]}]")
   } else {
       failureMessage.append("Response does not have error code ${key}")
   }
}
if (failureMessage.toString()) {
  throw new Error(failureMessage.toString())
} 

Я создал код в библиотеке, как показано ниже:

package com.Linos.readyapi.util.property.propertyvalidation
import com.eviware.soapui.support.GroovyUtils
import groovy.lang.GroovyObject
import groovy.sql.Sql

class PropertyValidation
{
    def static propertystepvalidation()
{
//Change the name of the Properties test step below
def step = context.testCase.testSteps['Properties']

//Parse the xml like you have in your script
def parsedXml = new XmlSlurper().parse(file)

//Get the all the error details from the response as map
def errorDetails = parsedXml.'**'.findAll { it.name() == 'IntegrationServiceErrorCode'}.inject([:]){map, entry ->    map[entry.ErrorCode.text()] = entry.Description.text(); map    }
log.info "Error details from response  : ${errorDetails}"

def failureMessage = new StringBuffer()

//Loop thru properties of Property step and check against the response
step.properties.keySet().each { key ->
   if (errorDetails.containsKey(key)) {
       step.properties[key]?.value == errorDetails[key] ?:  failureMessage.append("Response error code discription mismatch. expected [${step.properties[key]?.value}] vs actual [${errorDetails[key]}]")
   } else {
       failureMessage.append("Response does not have error code ${key}")
   }
}
if (failureMessage.toString()) {
  throw new Error(failureMessage.toString())
} 

Я не уверен, что упомянуть в методе статического определения. Я новичок в этом процессе и еще не сделал этого. Может кто-нибудь, пожалуйста, ведите меня! Я прочитал документацию по Ready API! Веб-сайт. Но я не совсем уверен в этом.

2 ответа

Решение

ReadyAPI позволяет пользователям создавать библиотеки и размещать их под Script каталог и использовать их по мере необходимости.

Обратите внимание, что ReadyAPI не позволяет использовать в скрипте Groovy Script каталог, вместо него должны быть классы Groovy.

Похоже, вы пытались преобразовать сценарий с ответом на один из предыдущих вопросов в класс.

Здесь есть некоторые переменные, доступные в Groovy Script от SoapUI. Итак, те должны быть переданы в библиотечный класс. Например, context, log общие.

И может быть еще несколько параметров, связанных с вашим методом. В этом случае вам необходимо передать file, property step name и т.п.

Вот класс Groovy, который преобразован из скрипта. И метод может быть нестатичным или статическим. Но я хожу с нестатичным.

package com.Linos.readyapi.util.property.propertyvalidation

class PropertyValidator {

    def context
    def log

    def validate(String stepName, File file) {
        //Change the name of the Properties test step below
        def step = context.testCase.testSteps[stepName]

        //Parse the xml like you have in your script
        def parsedXml = new XmlSlurper().parse(file)

        //Get the all the error details from the response as map
        def errorDetails = parsedXml.'**'.findAll { it.name() == 'IntegrationServiceErrorCode'}.inject([:]){map, entry ->    map[entry.ErrorCode.text()] = entry.Description.text(); map    }
        log.info "Error details from response  : ${errorDetails}"

        def failureMessage = new StringBuffer()

        //Loop thru properties of Property step and check against the response
        step.properties.keySet().each { key ->
            if (errorDetails.containsKey(key)) {
                step.properties[key]?.value == errorDetails[key] ?:  failureMessage.append("Response error code discription mismatch. expected [${step.properties[key]?.value}] vs actual [${errorDetails[key]}]")
            } else {
                failureMessage.append("Response does not have error code ${key}")
            }
        }
        if (failureMessage.toString()) {
            throw new Error(failureMessage.toString())
        } 
    }
}

Надеюсь, вы уже знаете, где скопировать вышеуказанный класс. Обратите внимание, что это также имеет имя пакета. Так что скопируйте его в правильный каталог. У меня есть предложение относительно названия вашего пакета, которое может быть длинным, вы можете изменить его на что-то вроде com.linos.readyapi.util, Конечно, до вас.

Теперь вот как вы можете использовать / вызывать вышеуказанный класс или его методы из Groovy Script шаг тестирования тестового примера в различных проектах soapui:

Groovy Script step

import com.Linos.readyapi.util.property.propertyvalidation.PropertyValidator

def properties = [context:context, log:log] as PropertyValidator
//You need to have the file object here
properties.validate('Properties', file)

Ах! Вы имеете в виду библиотеку утилит? Предполагая, что вы поместили файл Groovy библиотеки в этот путь

D:\GroovyLib\ ком \Linos\readyapi\ Util \ Свойство \ propertyvalidation

Если вы используете soapui, установите значение выше пути в качестве значения поля ниже,

Файл> Настройки> SoapUiPro> Библиотека скриптов

Если вы используете готовый API, то,

Файл> Настройки> Готово! API> Библиотека скриптов

Затем вызовите ваш метод, сначала инициализируя класс

PropertyValidation classObject = new PropertyValidation()
classObject.propertystepvalidation()
//you might need to pass some parameters which are declared/initiated outside this class
Другие вопросы по тегам