Как поместить 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