Как получить фактическое и ожидаемое значение от утверждения вместо статуса Действительный в Soap UI, используя groovy? - PullRequest
0 голосов
/ 28 мая 2020

Я написал следующий код для подготовки отчета о степени для каждого теста на project level .. Он фиксирует имя и статус утверждения ..

log.info "------- Starting Executing Teardown Script -------------------"
import java.text.SimpleDateFormat;
import java.util.Date;
import com.aventstack.extentreports.AnalysisStrategy;
import com.aventstack.extentreports.ExtentReports;
import com.aventstack.extentreports.ExtentTest;
import com.aventstack.extentreports.Status;
import com.aventstack.extentreports.reporter.ExtentHtmlReporter;
//Get Dynamic Value for Report
SimpleDateFormat sdf = new SimpleDateFormat('yyyy-MM-dd HH-mm-ss');
def currentDateString = sdf.format(new Date())

// Get the project path
def projectPath = new com.eviware.soapui.support.GroovyUtils(context).projectPath
def relativeFilePath = projectPath.replace("\\","//");
def actualProjectPath = relativeFilePath+"//Reports//soapuiExecutionReport"+currentDateString+".html"

ExtentHtmlReporter htmlReporter = new ExtentHtmlReporter(actualProjectPath);
ExtentReports extent = new ExtentReports ();

extent.attachReporter(htmlReporter);
extent.setSystemInfo("Application Name", "API");
extent.setSystemInfo("Environment", "SIT");
extent.setSystemInfo("Executor", "Test Engineer");

htmlReporter.config().setDocumentTitle("SOAPUI Automation Report");
htmlReporter.config().setReportName("Automation Testing Reporter");
//htmlReporter.config().setChartVisibilityOnOpen(true);

// Actual logic for Reports update
ArrayList<String> failedMessages = new ArrayList<String>();
runner.getResults().each { testSuiteRunner ->
//  ExtentTest parentTest = extent.createTest(testSuiteRunner.getTestSuite().getName());
    //log.info('Test Suite ' + testSuiteRunner.getTestSuite().getName() + ' TestRunner.status = ' + testSuiteRunner.getStatus());
    def assertLabel =null
    def assertStatus=null
    testSuiteRunner.getResults().each { testCaseRunner ->
        //ExtentTest parentTest = extent.createTest(testSuiteRunner.getTestSuite().getName());
        ExtentTest test = extent.createTest(testCaseRunner.getTestCase().getName(), testCaseRunner.getTestCase().getDescription());
        //log.info('Test Case ' + testCaseRunner.getTestCase().getName() + ' TestRunner.status = ' + testCaseRunner.getStatus());
        def authorName = testCaseRunner.getTestCase().getPropertyValue("Author")
        def categoryName = testCaseRunner.getTestCase().getPropertyValue("Category")
        if(authorName != null && categoryName != null){
            test.assignAuthor(authorName)
            test.assignCategory(categoryName)
        }
        testCaseRunner.getResults().each { testStepResult ->
            //log.info('Test Step ' + testStepResult.getTestStep().getName() + ' TestRunner.status = ' + testStepResult.getStatus());

            def testStepStatus = testStepResult.getStatus();

            if(testStepStatus.toString().equalsIgnoreCase('OK') || testStepStatus.toString().equalsIgnoreCase('PASS')) {
                //log.info "Start Loging " + testStepResult.getTestStep().getName() + " As Passed"

            test.pass(testStepResult.getTestStep().getName());
            //def messages =testStepResult.getMessages(); 
            if (testStepResult.testStep.config.type == 'request')
                {
                    testStepResult.testStep.getAssertionList().each{
                    assertLabel = it.label
                    assertStatus = it.status

                    if (assertStatus == 'VALID') { successAssertions ++ }
                    //else {failedAssertions ++ }
                    log.info(assertLabel)
                    if(!assertLabel.contains("disabled")){
                    test.info "$it.label - $it.status"

                    }
                    }

                }
            }   
         else {
                testStepResult.getMessages().each { message ->
                    failedMessages.add(message);                    
                }
                //log.info "Start Loging " + testStepResult.getTestStep().getName() + " As Failed"

                def testSuiteName = testSuiteRunner.getTestSuite().getName()
                def testCaseName = testCaseRunner.getTestCase().getName()
                def testStepName = testStepResult.getTestStep().getName()               
                def Request = "NULL"
                def Response = "NULL"
                def GroovyScript = "NULL"
                def Req = "NULL"
                def Res = "NULL"
                def actualData

                def tempTCName = testCaseName.replace('/','');
                def testTStpName = testStepName.replace('/','');

                def ResFile = relativeFilePath+"//ReqRespPairs//"+tempTCName+"_"+testTStpName+"_"+currentDateString+"_Failed.txt"

                def getTestStepDetails = project.testSuites[testSuiteName].testCases[testCaseName].getTestStepByName(testStepName)

                if(getTestStepDetails.getProperty("Request") || getTestStepDetails.getProperty("Response") || getTestStepDetails.getProperty("Result")) {
                    Request = getTestStepDetails.getProperty("RawRequest")
                    Response = getTestStepDetails.getProperty("Response")
                    GroovyScript = getTestStepDetails.getProperty("Result")

                    if(GroovyScript.toString().equalsIgnoreCase("NULL")) {
                        Req = Request.getValue();
                        Res = Response.getValue();

                        actualData = "------------- REQUEST DATA ---------------\n\n" + Req + "\n\n------------- RESPONSE DATA ---------------\n\n" + Res + "\n\n------------- REQUEST DATA ---------------\n\n" + failedMessages.toString()

                        def data = new File(ResFile)
                        data.write(actualData,"UTF-8")

                        def appendReqAndRespPair = '<a href="' + ResFile + '" target="_blank">Failed Step Details </a>'

                        test.fail(testStepName +" <b>Failed. Check Details | <b> " + "<span style='font-weight:bold;'></span>" + appendReqAndRespPair);

                        log.info "Test Log Completed for " + testStepName
                        failedMessages.clear();
                    } else if (Request.toString().equalsIgnoreCase("NULL")) {
                        Req = "No Request Found. Check below error details"
                        Res = "No Response Found. Check below error details"

                        actualData = "------------- REQUEST DATA ---------------\n\n" + Req + "\n\n------------- RESPONSE DATA ---------------\n\n" + Res + "\n\n------------- REQUEST DATA ---------------\n\n" + failedMessages.toString()

                        def data = new File(ResFile)
                        data.write(actualData,"UTF-8")

                        def appendReqAndRespPair = '<a href="' + ResFile + '" target="_blank">Failed Step Details </a>'

                        test.fail(testStepName +" <b>Failed. Check Details | <b> " + "<span style='font-weight:bold;'></span>" + appendReqAndRespPair);

                        log.info "Test Log Completed for " + testStepName
                        failedMessages.clear();
                    }
                } else {
                    Req = "No Request Found. Check below error details"
                    Res = "No Response Found. Check below error details"

                    actualData = "------------- REQUEST DATA ---------------\n\n" + Req + "\n\n------------- RESPONSE DATA ---------------\n\n" + Res + "\n\n------------- REQUEST DATA ---------------\n\n" + failedMessages.toString()

                    def data = new File(ResFile)
                    data.write(actualData,"UTF-8")

                    def appendReqAndRespPair = '<a href="' + ResFile + '" target="_blank">Failed Step Details </a>'

                    test.fail(testStepName +" <b>Failed. Check Details | <b> " + "<span style='font-weight:bold;'></span>" + appendReqAndRespPair);

                    log.info "Test Log Completed for " + testStepName
                    failedMessages.clear();
                }
            }
        }
    }
}
extent.flush();
log.info "------- Completed Executing Teardown Script ------------------"

Чтобы получить утверждения .. Я использую приведенный ниже код ..

   if (testStepResult.testStep.config.type == 'request')
                        {
                            testStepResult.testStep.getAssertionList().each{
                            assertLabel = it.label
                            assertStatus = it.status

                            if (assertStatus == 'VALID') { successAssertions ++ }
                            //else {failedAssertions ++ }
                            log.info(assertLabel)
                            if(!assertLabel.contains("disabled")){
                            test.info "$it.label - $it.status"

                            }
                            }

}

с этим .. Мне нужно получить ожидаемое значение и фактическое значение, а также напечатать это .. Если это не удалось, это показывает, что на неудачных шагах .. Мне нужно предоставить предполагаемые и фактические значения для отчета клиенту. Есть ли способ получить это?

Я использую это, но оно не работает ..

$it.getAssertionByName($it.label).getExpectedContent()

Чт, 28 мая, 17:23:26 IST 2020: ОШИБКА: Произошла ошибка [Нет такого свойства: getAssertionByName для класса : com.eviware.soapui.impl.wsdl.teststeps.assertions. soap .SoapResponseAssertion], подробности см. в журнале ошибок

Существует возможность использовать его, как указано ниже Как получить значение утверждения используя groovy скрипт . Но переменная testRunner недоступна на уровне проекта. .Я использую testCaseRunner ... но не работаю

                def assertionsList = testRunner.getTestCase().getTestStepByName(testStepResult.getTestStep().getName()).getAssertionList()
for( e in assertionsList){
    log.info e.getToken() //gives the value of the content to search for
    log.info e.DESCRIPTION
    log.info e.ID
    log.info e.LABEL
    log.info e.toString()
}

Получение

Thu May 28 18:31:58 IST 2020:ERROR:An error occurred [No signature of method: com.eviware.soapui.impl.wsdl.teststeps.assertions.basic.GroovyScriptAssertion.getToken() is applicable for argument types: () values: []
Possible solutions: getIcon(), getLabel(), getName(), getParent(), getClass(), getProject()], see error log for details

Если я использую getExpectedContent () ..

Thu May 28 18:28:48 IST 2020:ERROR:An error occurred [No signature of method: com.eviware.soapui.impl.wsdl.teststeps.assertions.soap.SoapResponseAssertion.getExpectedContent() is applicable for argument types: () values: []], see error log for details

Может кто-нибудь вникнуть в это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...