Плагин Jenkins testng показывает ошибку синтаксического анализа xml (Не удалось проанализировать XML: символы]]> не допускаются в содержимом) - PullRequest
0 голосов
/ 25 июня 2018

Я получаю сообщение об ошибке в консоли jenkins на шаге Опубликовать результаты тестирования

Processing '/var/lib/jenkins/jobs/myseleniumJob/builds/9/testng/testng-results.xml'
Failed to parse XML: characters ]]> are not allowed in content (position: CDSECT seen ...te: # Distinct OrderID] \'COL1\' , [Time.Year] \'COL2\' FROM [ALL]]]]>... @20965:901) 
org.xmlpull.v1.XmlPullParserException: characters ]]> are not allowed in content (position: CDSECT seen ...te: # Distinct OrderID] \'COL1\' , [Time.Year] \'COL2\' FROM [ALL]]]]>... @20965:901) 
    at org.xmlpull.mxp1.MXParser.nextImpl(MXParser.java:1343)
    at org.xmlpull.mxp1.MXParser.nextToken(MXParser.java:1100)
    at hudson.plugins.testng.parser.ResultsParser.parse(ResultsParser.java:154)
    at hudson.plugins.testng.TestNGTestResultBuildAction.loadResults(TestNGTestResultBuildAction.java:120)
    at hudson.plugins.testng.Publisher.perform(Publisher.java:141)
    at org.jenkins_ci.plugins.flexible_publish.builder.FailAtEndBuilder.perform(FailAtEndBuilder.java:104)
    at org.jenkins_ci.plugins.run_condition.BuildStepRunner$2.run(BuildStepRunner.java:110)
    at org.jenkins_ci.plugins.run_condition.BuildStepRunner$Fail.conditionalRun(BuildStepRunner.java:154)
    at org.jenkins_ci.plugins.run_condition.BuildStepRunner.perform(BuildStepRunner.java:105)
    at org.jenkins_ci.plugins.flexible_publish.strategy.FailAtEndExecutionStrategy.perform(FailAtEndExecutionStrategy.java:85)
    at org.jenkins_ci.plugins.flexible_publish.ConditionalPublisher.perform(ConditionalPublisher.java:206)
    at org.jenkins_ci.plugins.flexible_publish.FlexiblePublisher.perform(FlexiblePublisher.java:124)
    at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20)
    at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:782)
    at hudson.model.AbstractBuild$AbstractBuildExecution.performAllBuildSteps(AbstractBuild.java:723)
    at hudson.model.Build$BuildExecution.post2(Build.java:185)
    at hudson.model.AbstractBuild$AbstractBuildExecution.post(AbstractBuild.java:668)
    at hudson.model.Run.execute(Run.java:1763)
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
    at hudson.model.ResourceController.execute(ResourceController.java:98)
    at hudson.model.Executor.run(Executor.java:410)

Выдержка из моего сгенерированного testng-results.xml

            <test-method status="FAIL" signature="verifyCustomSet_In_Query()[pri:0, instance:com.test.myTest.Test@7ac3aa7d]" name="verifyCustomSet_In_Query" duration-ms="5336" started-at="2018-06-24T23:00:58Z" depends-on-methods="com.test.myTest.Test.verifyQueries" finished-at="2018-06-24T23:01:03Z">
          <exception class="java.lang.AssertionError">
            <message>
              <![CDATA[Queries didn't match expected [pushdown:SELECT USING OUTER JOIN IIF( STAT ( COUNT, 0, [Categories.CategoryName], SELECT [Categories.CategoryName] FROM [All] WHERE [Categories.CategoryName] = %0 AND [Categories.CategoryName] IN ( SELECT TOP 100 USING OUTER JOIN [Categories.CategoryName] 'COL0' , [OrderDate: Sum: Quantity] 'COL1' FROM [ALL] WHERE ( ( [OrderDate: Sum: Quantity]>5000 ) ) ) ) > 0,'In Value', 'Out Value') 'COL0' , [OrderDate: # Distinct OrderID] 'COL1' , [Time.Year] 'COL2' , [Categories.CategoryName] FROM [ALL]] but found [pushdown:SELECT USING OUTER JOIN IIF( [Categories.CategoryName] IN ( SELECT TOP 100 USING OUTER JOIN [Categories.CategoryName] 'COL0' , [OrderDate: Sum: Quantity] 'COL1' FROM [ALL] WHERE ( ( [OrderDate: Sum: Quantity]>5000 ) ) ),'In Value', 'Out Value') 'COL0' , [OrderDate: # Distinct OrderID] 'COL1' , [Time.Year] 'COL2' FROM [ALL]]]]>
            </message>
            <full-stacktrace>
              <![CDATA[java.lang.AssertionError: Queries didn't match expected [pushdown:SELECT USING OUTER JOIN IIF( STAT ( COUNT, 0, [Categories.CategoryName], SELECT [Categories.CategoryName] FROM [All] WHERE [Categories.CategoryName] = %0 AND [Categories.CategoryName] IN ( SELECT TOP 100 USING OUTER JOIN [Categories.CategoryName] 'COL0' , [OrderDate: Sum: Quantity] 'COL1' FROM [ALL] WHERE ( ( [OrderDate: Sum: Quantity]>5000 ) ) ) ) > 0,'In Value', 'Out Value') 'COL0' , [OrderDate: # Distinct OrderID] 'COL1' , [Time.Year] 'COL2' , [Categories.CategoryName] FROM [ALL]] but found [pushdown:SELECT USING OUTER JOIN IIF( [Categories.CategoryName] IN ( SELECT TOP 100 USING OUTER JOIN [Categories.CategoryName] 'COL0' , [OrderDate: Sum: Quantity] 'COL1' FROM [ALL] WHERE ( ( [OrderDate: Sum: Quantity]>5000 ) ) ),'In Value', 'Out Value') 'COL0' , [OrderDate: # Distinct OrderID] 'COL1' , [Time.Year] 'COL2' FROM [ALL]]
    at org.testng.Assert.fail(Assert.java:93)
    at org.testng.Assert.failNotEquals(Assert.java:512)
    at org.testng.Assert.assertEqualsImpl(Assert.java:134)
    at org.testng.Assert.assertEquals(Assert.java:115)
    at org.testng.Assert.assertEquals(Assert.java:189)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:108)
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:661)
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:869)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1193)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:126)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
    at org.testng.TestRunner.privateRun(TestRunner.java:744)
    at org.testng.TestRunner.run(TestRunner.java:602)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:380)
    at org.testng.SuiteRunner.access$000(SuiteRunner.java:39)
    at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:414)
    at org.testng.internal.thread.ThreadUtil$1.call(ThreadUtil.java:52)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
]]>
            </full-stacktrace>
          </exception> <!-- java.lang.AssertionError -->
          <reporter-output>
          </reporter-output>
        </test-method> <!-- verifyCustomSet_In_Query -->

Не удается выполнить синтаксический анализ содержимого'<message>' /'<full-stacktrace>' тегов, которые содержат сообщения подтверждения, передаваемые из теста. Означает ли это, что testng ожидает, что тестер передаст сообщение подтверждения в определенном формате, без ограниченных символов?

Обновление

Я проанализировал это далее и узнал, что «CDSECT» в исключении относится к разделу «CDATA», а строка «20965», как упомянуто в вышеприведенном исключении, указывает на тег <message>.Итак, как мы видим, это относится к [CDATA] разделу <message> тега

<message>
          <![CDATA[Queries didn't match expected [pushdown:SELECT USING OUTER JOIN IIF( STAT ( COUNT, 0, [Categories.CategoryName], SELECT [Categories.CategoryName] FROM [All] WHERE [Categories.CategoryName] = %0 AND [Categories.CategoryName] IN ( SELECT TOP 100 USING OUTER JOIN [Categories.CategoryName] 'COL0' , [OrderDate: Sum: Quantity] 'COL1' FROM [ALL] WHERE ( ( [OrderDate: Sum: Quantity]>5000 ) ) ) ) > 0,'In Value', 'Out Value') 'COL0' , [OrderDate: # Distinct OrderID] 'COL1' , [Time.Year] 'COL2' , [Categories.CategoryName] FROM [ALL]] but found [pushdown:SELECT USING OUTER JOIN IIF( [Categories.CategoryName] IN ( SELECT TOP 100 USING OUTER JOIN [Categories.CategoryName] 'COL0' , [OrderDate: Sum: Quantity] 'COL1' FROM [ALL] WHERE ( ( [OrderDate: Sum: Quantity]>5000 ) ) ),'In Value', 'Out Value') 'COL0' , [OrderDate: # Distinct OrderID] 'COL1' , [Time.Year] 'COL2' FROM [ALL]]]]>
        </message>

1 Ответ

0 голосов
/ 25 июня 2018

Я думаю, что все дело в тире (-) в имени переменной. Например, давайте попробуем разобрать ваш XML на игровой площадке https://groovy -playground.appspot.com /

import groovy.util.XmlSlurper
def xml = '''<xml body>'''

def testmethod = new XmlSlurper().parseText(xml)
print testmethod.exception.full-stacktrace

Мы получаем ошибку как not such property stacktrace. После изменения full-stacktrace на full-stacktrace оператор печати работает так, как ожидалось. Поэтому я предлагаю разобрать Ваш файл следующим образом:

import groovy.util.XmlSlurper

//replace test-method for testmethod in code
def testmethod = new XmlSlurper().parseText(xml)

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