Оператор INSERT не работает с Citrus Integration framework

Мы начали использовать платформу интеграции цитрусовых для тестирования нашего API. Я пытаюсь запустить запрос SQL INSERT в базе данных оракула.

Если мы запускаем SQL с ключевым словом select, он просто работает нормально, но если мы хотим вставить данные, он выдает исключение нулевого указателя. Трассировка стека ниже. Может кто подскажет.

com.consol.citrus.exceptions.TestCaseFailedException: тестовый пример не пройден

at com.consol.citrus.TestCase.executeAction(TestCase.java:221)
at com.consol.citrus.dsl.runner.DefaultTestRunner.run(DefaultTestRunner.java:189)
at com.consol.citrus.dsl.runner.DefaultTestRunner.query(DefaultTestRunner.java:249)
at com.consol.citrus.dsl.testng.TestNGCitrusTestRunner.query(TestNGCitrusTestRunner.java:170)
at com.consol.citrus.samples.DomainAPITest.sqlPMTest(DomainAPITest.java:37)
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.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:216)
at com.consol.citrus.dsl.testng.TestNGCitrusTest.invokeTestMethod(TestNGCitrusTest.java:130)
at com.consol.citrus.dsl.testng.TestNGCitrusTest.run(TestNGCitrusTest.java:100)
at com.consol.citrus.dsl.testng.TestNGCitrusTest.run(TestNGCitrusTest.java:58)
at org.testng.internal.MethodInvocationHelper.invokeHookable(MethodInvocationHelper.java:208)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:635)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:816)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1124)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:108)
at org.testng.TestRunner.privateRun(TestRunner.java:774)
at org.testng.TestRunner.run(TestRunner.java:624)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:359)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:354)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:312)
at org.testng.SuiteRunner.run(SuiteRunner.java:261)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1215)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1140)
at org.testng.TestNG.run(TestNG.java:1048)
at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:72)
at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:124)
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 com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)

Причина: com.consol.citrus.exceptions.CitrusRuntimeException: отсутствует ключевое слово SELECT в выражении: INSERT INTO CN_RATE_EXHIBIT (ID,RATE_EXHIBIT_CODE,DS,DSL,STATUS,RECIPROCAL_IND,START_DATE,END_DATE,TERM_REASON) значения (seqCN_RATE_EXHIBIT.nextval, 'Citrus_Inte_RE_Code ,'Citrus_Inte_RE_Code_DS','Citrus_Inte_RE_CodeDSL',null,'Y',to_date('01-JUN-16','DD-MON-RR'),to_date('01-JAN-4000','DD-MON-RR '),'O') в com.consol.citrus.actions.ExecuteSQLQueryAction.validateSqlStatement(ExecuteSQLQueryAction.java:266) в com.consol.citrus.actions.ExecuteSQLQueryAction.doExecute(ExecuteSQLQueryAction.java:84) в com.consol. citrus.actions.AbstractDatabaseConnectingTestAction.execute(AbstractDatabaseConnectingTestAction.java:62) в com.consol.citrus.TestCase.executeAction(TestCase.java:214)


person Harsha    schedule 19.09.2016    source источник


Ответы (2)


Информация о трассировке стека говорит мне, что Citrus пытается обработать ваш оператор INSERT как SQL-запрос (SELECT). Это происходит, когда вы смешиваете операторы INSERT и SELECT в одном тестовом действии SQL.

Пожалуйста, отделите операторы запроса (SELECT) от всех других операторов, таких как INSERT, UPDATE, DELETE. Просто используйте отдельные тестовые действия в своем тесте. Также не разрешается использовать выражения проверки в тестовом действии SQL при использовании операторов, отличных от SELECT.

Citrus обрабатывает операторы SELECT не так, как другие.

person Christoph Deppisch    schedule 20.09.2016

Убедитесь, что вы используете ExecuteSQLBuilder, а не ExecuteSQLQueryBuilder.

public class ExampleTestDesigner extends TestNGCitrusTestDesigner {

    @Autowired
    private DataSource bookDB;

    @Test
    @CitrusTest
    public void exampleTest() {

        // query uses ExecuteSQLQueryBuilder and should only be used for select statements
        query(bookDB).statement("select ISBN, Name from Books");

        // sql uses ExecuteSQLBuilder and can be used for insert, update, delete, etc, statements
        sql(bookDB).statement("insert into Books (ISBN, Name) values ('1-84149-003-2', 'A Shadow on the Glass')");
}

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

person Riverchimp    schedule 25.04.2018