Я написал следующий код для подготовки отчета о степени для каждого теста на 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
Может кто-нибудь вникнуть в это?