Best Citrus code snippet using com.consol.citrus.actions.ExecutePLSQLAction.isIgnoreErrors
Source:ExecutePLSQLTestRunnerTest.java
...52 Assert.assertEquals(test.getActions().get(0).getClass(), ExecutePLSQLAction.class);53 Assert.assertEquals(test.getActiveAction().getClass(), ExecutePLSQLAction.class);54 ExecutePLSQLAction action = (ExecutePLSQLAction)test.getActions().get(0);55 Assert.assertEquals(action.getName(), "plsql");56 Assert.assertEquals(action.isIgnoreErrors(), false);57 Assert.assertEquals(action.getStatements().toString(), "[TEST_STMT_1, TEST_STMT_2, TEST_STMT_3]");58 Assert.assertNull(action.getScript());59 Assert.assertNull(action.getSqlResourcePath());60 Assert.assertEquals(action.getJdbcTemplate(), jdbcTemplate);61 verify(jdbcTemplate).execute("TEST_STMT_1");62 verify(jdbcTemplate).execute("TEST_STMT_2");63 verify(jdbcTemplate).execute("TEST_STMT_3");64 }65 @Test66 public void testExecutePLSQLBuilderWithTransaction() {67 reset(jdbcTemplate, transactionManager);68 MockTestRunner builder = new MockTestRunner(getClass().getSimpleName(), applicationContext, context) {69 @Override70 public void execute() {71 plsql(builder -> builder.jdbcTemplate(jdbcTemplate)72 .transactionManager(transactionManager)73 .transactionTimeout(5000)74 .transactionIsolationLevel("ISOLATION_READ_COMMITTED")75 .statement("TEST_STMT_1")76 .statement("TEST_STMT_2")77 .statement("TEST_STMT_3"));78 }79 };80 TestCase test = builder.getTestCase();81 Assert.assertEquals(test.getActionCount(), 1);82 Assert.assertEquals(test.getActions().get(0).getClass(), ExecutePLSQLAction.class);83 Assert.assertEquals(test.getActiveAction().getClass(), ExecutePLSQLAction.class);84 ExecutePLSQLAction action = (ExecutePLSQLAction)test.getActions().get(0);85 Assert.assertEquals(action.getName(), "plsql");86 Assert.assertEquals(action.isIgnoreErrors(), false);87 Assert.assertEquals(action.getStatements().toString(), "[TEST_STMT_1, TEST_STMT_2, TEST_STMT_3]");88 Assert.assertNull(action.getScript());89 Assert.assertNull(action.getSqlResourcePath());90 Assert.assertEquals(action.getJdbcTemplate(), jdbcTemplate);91 Assert.assertEquals(action.getTransactionManager(), transactionManager);92 Assert.assertEquals(action.getTransactionTimeout(), "5000");93 Assert.assertEquals(action.getTransactionIsolationLevel(), "ISOLATION_READ_COMMITTED");94 verify(jdbcTemplate).execute("TEST_STMT_1");95 verify(jdbcTemplate).execute("TEST_STMT_2");96 verify(jdbcTemplate).execute("TEST_STMT_3");97 }98 @Test99 public void testExecutePLSQLBuilderWithSQLResource() throws IOException {100 reset(jdbcTemplate, sqlResource);101 when(sqlResource.getInputStream()).thenReturn(new ByteArrayInputStream(("TEST_STMT_1\n" +102 "/\n" +103 "TEST_STMT_2\n" +104 "/\n" +105 "TEST_STMT_3\n" +106 "/").getBytes()));107 MockTestRunner builder = new MockTestRunner(getClass().getSimpleName(), applicationContext, context) {108 @Override109 public void execute() {110 plsql(builder -> builder.jdbcTemplate(jdbcTemplate)111 .sqlResource(sqlResource));112 }113 };114 TestCase test = builder.getTestCase();115 Assert.assertEquals(test.getActionCount(), 1);116 Assert.assertEquals(test.getActions().get(0).getClass(), ExecutePLSQLAction.class);117 Assert.assertEquals(test.getActiveAction().getClass(), ExecutePLSQLAction.class);118 ExecutePLSQLAction action = (ExecutePLSQLAction)test.getActions().get(0);119 Assert.assertEquals(action.getName(), "plsql");120 Assert.assertEquals(action.isIgnoreErrors(), false);121 Assert.assertEquals(action.getStatements().size(), 3L);122 Assert.assertEquals(action.getStatements().toString(), "[TEST_STMT_1, TEST_STMT_2, TEST_STMT_3]");123 Assert.assertEquals(action.getScript(), ("TEST_STMT_1\n" +124 "/\n" +125 "TEST_STMT_2\n" +126 "/\n" +127 "TEST_STMT_3\n" +128 "/"));129 Assert.assertEquals(action.getJdbcTemplate(), jdbcTemplate);130 verify(jdbcTemplate).execute("TEST_STMT_1");131 verify(jdbcTemplate).execute("TEST_STMT_2");132 verify(jdbcTemplate).execute("TEST_STMT_3");133 }134 @Test135 public void testExecutePLSQLBuilderWithSQLResourcePath() throws IOException {136 reset(jdbcTemplate);137 MockTestRunner builder = new MockTestRunner(getClass().getSimpleName(), applicationContext, context) {138 @Override139 public void execute() {140 plsql(builder -> builder.jdbcTemplate(jdbcTemplate)141 .sqlResource("classpath:com/consol/citrus/dsl/runner/plsql.sql"));142 }143 };144 TestCase test = builder.getTestCase();145 Assert.assertEquals(test.getActionCount(), 1);146 Assert.assertEquals(test.getActions().get(0).getClass(), ExecutePLSQLAction.class);147 Assert.assertEquals(test.getActiveAction().getClass(), ExecutePLSQLAction.class);148 ExecutePLSQLAction action = (ExecutePLSQLAction)test.getActions().get(0);149 Assert.assertEquals(action.getName(), "plsql");150 Assert.assertEquals(action.isIgnoreErrors(), false);151 Assert.assertEquals(action.getStatements().size(), 3L);152 Assert.assertEquals(action.getStatements().toString(), "[TEST_STMT_1, TEST_STMT_2, TEST_STMT_3]");153 Assert.assertNull(action.getScript());154 Assert.assertEquals(action.getSqlResourcePath(), "classpath:com/consol/citrus/dsl/runner/plsql.sql");155 Assert.assertEquals(action.getJdbcTemplate(), jdbcTemplate);156 verify(jdbcTemplate).execute("TEST_STMT_1");157 verify(jdbcTemplate).execute("TEST_STMT_2");158 verify(jdbcTemplate).execute("TEST_STMT_3");159 }160 @Test161 public void testExecutePLSQLBuilderWithInlineScript() {162 reset(jdbcTemplate);163 MockTestRunner builder = new MockTestRunner(getClass().getSimpleName(), applicationContext, context) {164 @Override165 public void execute() {166 plsql(builder -> builder.jdbcTemplate(jdbcTemplate)167 .ignoreErrors(true)168 .sqlScript(("TEST_STMT_1\n" +169 "/\n" +170 "TEST_STMT_2\n" +171 "/")));172 }173 };174 TestCase test = builder.getTestCase();175 Assert.assertEquals(test.getActionCount(), 1);176 Assert.assertEquals(test.getActions().get(0).getClass(), ExecutePLSQLAction.class);177 Assert.assertEquals(test.getActiveAction().getClass(), ExecutePLSQLAction.class);178 ExecutePLSQLAction action = (ExecutePLSQLAction)test.getActions().get(0);179 Assert.assertEquals(action.getName(), "plsql");180 Assert.assertEquals(action.isIgnoreErrors(), true);181 Assert.assertEquals(action.getStatements().size(), 2L);182 Assert.assertEquals(action.getStatements().toString(), "[TEST_STMT_1, TEST_STMT_2]");183 Assert.assertNull(action.getSqlResourcePath());184 Assert.assertEquals(action.getScript(), ("TEST_STMT_1\n" +185 "/\n" +186 "TEST_STMT_2\n" +187 "/"));188 Assert.assertEquals(action.getJdbcTemplate(), jdbcTemplate);189 verify(jdbcTemplate).execute("TEST_STMT_1");190 verify(jdbcTemplate).execute("TEST_STMT_2");191 }192}...
Source:ExecutePLSQLTestDesignerTest.java
...52 Assert.assertEquals(test.getActions().get(0).getClass(), ExecutePLSQLAction.class);53 54 ExecutePLSQLAction action = (ExecutePLSQLAction)test.getActions().get(0);55 Assert.assertEquals(action.getName(), "plsql");56 Assert.assertEquals(action.isIgnoreErrors(), false);57 Assert.assertEquals(action.getStatements().toString(), "[TEST_STMT_1, TEST_STMT_2, TEST_STMT_3]");58 Assert.assertNull(action.getScript());59 Assert.assertNull(action.getSqlResourcePath());60 Assert.assertEquals(action.getDataSource(), dataSource);61 }62 @Test63 public void testExecutePLSQLBuilderWithTransaction() {64 MockTestDesigner builder = new MockTestDesigner(applicationContext, context) {65 @Override66 public void configure() {67 plsql(dataSource)68 .transactionManager(transactionManager)69 .transactionTimeout(5000)70 .transactionIsolationLevel("ISOLATION_READ_COMMITTED")71 .statement("TEST_STMT_1")72 .statement("TEST_STMT_2")73 .statement("TEST_STMT_3");74 }75 };76 builder.configure();77 TestCase test = builder.getTestCase();78 Assert.assertEquals(test.getActionCount(), 1);79 Assert.assertEquals(test.getActions().get(0).getClass(), ExecutePLSQLAction.class);80 ExecutePLSQLAction action = (ExecutePLSQLAction)test.getActions().get(0);81 Assert.assertEquals(action.getName(), "plsql");82 Assert.assertEquals(action.isIgnoreErrors(), false);83 Assert.assertEquals(action.getStatements().toString(), "[TEST_STMT_1, TEST_STMT_2, TEST_STMT_3]");84 Assert.assertNull(action.getScript());85 Assert.assertNull(action.getSqlResourcePath());86 Assert.assertEquals(action.getDataSource(), dataSource);87 Assert.assertEquals(action.getTransactionManager(), transactionManager);88 Assert.assertEquals(action.getTransactionTimeout(), "5000");89 Assert.assertEquals(action.getTransactionIsolationLevel(), "ISOLATION_READ_COMMITTED");90 }91 92 @Test93 public void testExecutePLSQLBuilderWithSQLResource() throws IOException {94 MockTestDesigner builder = new MockTestDesigner(applicationContext, context) {95 @Override96 public void configure() {97 plsql(dataSource)98 .sqlResource(sqlResource);99 }100 };101 102 reset(sqlResource);103 when(sqlResource.getInputStream()).thenReturn(new ByteArrayInputStream("testScript".getBytes()));104 builder.configure();105 TestCase test = builder.getTestCase();106 Assert.assertEquals(test.getActionCount(), 1);107 Assert.assertEquals(test.getActions().get(0).getClass(), ExecutePLSQLAction.class);108 ExecutePLSQLAction action = (ExecutePLSQLAction)test.getActions().get(0);109 Assert.assertEquals(action.getName(), "plsql");110 Assert.assertEquals(action.isIgnoreErrors(), false);111 Assert.assertEquals(action.getStatements().size(), 0L);112 Assert.assertEquals(action.getScript(), "testScript");113 Assert.assertEquals(action.getDataSource(), dataSource);114 }115 116 @Test117 public void testExecutePLSQLBuilderWithInlineScript() {118 MockTestDesigner builder = new MockTestDesigner(applicationContext, context) {119 @Override120 public void configure() {121 plsql(dataSource)122 .ignoreErrors(true)123 .sqlScript("testScript");124 }125 };126 builder.configure();127 TestCase test = builder.getTestCase();128 Assert.assertEquals(test.getActionCount(), 1);129 Assert.assertEquals(test.getActions().get(0).getClass(), ExecutePLSQLAction.class);130 ExecutePLSQLAction action = (ExecutePLSQLAction)test.getActions().get(0);131 Assert.assertEquals(action.getName(), "plsql");132 Assert.assertEquals(action.isIgnoreErrors(), true);133 Assert.assertEquals(action.getStatements().size(), 0L);134 Assert.assertNull(action.getSqlResourcePath());135 Assert.assertEquals(action.getScript(), "testScript");136 Assert.assertEquals(action.getDataSource(), dataSource);137 }138}...
isIgnoreErrors
Using AI Code Generation
1import com.consol.citrus.dsl.testng.TestNGCitrusTestDesigner;2import org.testng.annotations.Test;3public class 4 extends TestNGCitrusTestDesigner {4public void 4() {5variable("var1", "value1");6variable("var2", "value2");7variable("var3", "value3");8variable("var4", "value4");9variable("var5", "value5");10variable("var6", "value6");11variable("var7", "value7");12variable("var8", "value8");13variable("var9", "value9");14variable("var10", "value10");15variable("var11", "value11");16variable("var12", "value12");17variable("var13", "value13");18variable("var14", "value14");19variable("var15", "value15");20variable("var16", "value16");21variable("var17", "value17");22variable("var18", "value18");23variable("var19", "value19");24variable("var20", "value20");25variable("var21", "value21");26variable("var22", "value22");27variable("var23", "value23");28variable("var24", "value24");29variable("var25", "value25");30variable("var26", "value26");31variable("var27", "value27");32variable("var28", "value28");33variable("var29", "value29");34variable("var30", "value30");35variable("var31", "value31");36variable("var32", "value32");37variable("var33", "value33");38variable("var34", "value34");39variable("var35", "value35");40variable("var36", "value36");41variable("var37", "value37");42variable("var38", "value38");43variable("var39", "value39");44variable("var40", "value40");45variable("var41", "value41");46variable("var42", "value42");47variable("var43", "value43");48variable("var44", "value44");49variable("var45", "value45");50variable("var46", "value46");51variable("var47", "value47");52variable("var48", "value48");53variable("var49", "value49");54variable("var50", "value50");55variable("var51", "
isIgnoreErrors
Using AI Code Generation
1package com.consol.citrus;2import java.io.IOException;3import java.util.ArrayList;4import java.util.List;5import org.testng.Assert;6import org.testng.annotations.Test;7import com.consol.citrus.annotations.CitrusTest;8import com.consol.citrus.dsl.testng.TestNGCitrusTestDesigner;9import com.consol.citrus.exceptions.CitrusRuntimeException;10import com.consol.citrus.jdbc.message.JdbcMessage;11import com.consol.citrus.message.MessageType;12import com.consol.citrus.testng.CitrusParameters;13public class ExecutePLSQLActionIT extends TestNGCitrusTestDesigner {14 public void testExecutePLSQLAction() {15 executePLSQLAction()16 .statements("CREATE TABLE EMPLOYEES (EMP_ID NUMBER, EMP_NAME VARCHAR2(20));")17 .statements("INSERT INTO EMPLOYEES VALUES (1, 'Joe Doe');")18 .statements("INSERT INTO EMPLOYEES VALUES (2, 'Jane Doe');")19 .statements("INSERT INTO EMPLOYEES VALUES (3, 'John Smith');")20 .statements("INSERT INTO EMPLOYEES VALUES (4, 'John Doe');")21 .statements("INSERT INTO EMPLOYEES VALUES (5, 'Jane Smith');")22 .statements("INSERT INTO EMPLOYEES VALUES (6, 'Joe Smith');")23 .statements("INSERT INTO EMPLOYEES VALUES (7, 'Joe Black');")24 .statements("INSERT INTO EMPLOYEES VALUES (8, 'Jane Black');")25 .statements("INSERT INTO EMPLOYEES VALUES (9, 'John Black');")26 .statements("INSERT INTO EMPLOYEES VALUES (10, 'John White');")27 .statements("INSERT INTO EMPLOYEES VALUES (11, 'Jane White');")28 .statements("INSERT INTO EMPLOYEES VALUES (12, 'Joe White');");29 }30 public void testExecutePLSQLActionWithSelect() {31 executePLSQLAction()32 .statements("CREATE TABLE EMPLOYEES (EMP_ID NUMBER, EMP_NAME VARCHAR2(20));")33 .statements("INSERT INTO EMPLOYEES VALUES (1, 'Joe Doe');")34 .statements("INSERT INTO EMPLOYEES VALUES (2, 'Jane Doe');")35 .statements("INSERT
isIgnoreErrors
Using AI Code Generation
1package com.consol.citrus.dsl.testng;2import com.consol.citrus.annotations.CitrusTest;3import com.consol.citrus.testng.CitrusParameters;4import org.springframework.test.context.ContextConfiguration;5import org.testng.annotations.Test;6@ContextConfiguration(classes = TestNGCitrusSpringSupport.class)7public class ExecutePLSQLActionTest extends TestNGCitrusSpringSupport {8 @Test(dataProvider = "testDataProvider")9 @CitrusParameters({"name", "message"})10 public void executePLSQLAction(String name, String message) {11 variable("name", name);12 variable("message", message);13 plsql().executePLSQL("CREATE OR REPLACE PROCEDURE PLSQL_ERROR_PROC AS BEGIN RAISE_APPLICATION_ERROR(-20000, 'Error in stored procedure'); END;");14 plsql().executePLSQL("BEGIN PLSQL_ERROR_PROC; END;").isIgnoreErrors(true);15 plsql().executePLSQL("BEGIN PLSQL_ERROR_PROC; END;").isIgnoreErrors(false);16 plsql().executePLSQL("BEGIN PLSQL_ERROR_PROC; END;").isIgnoreErrors(true);17 }18}19package com.consol.citrus.dsl.testng;20import com.consol.citrus.annotations.CitrusTest;21import com.consol.citrus.testng.CitrusParameters;22import org.springframework.test.context.ContextConfiguration;23import org.testng.annotations.Test;24@ContextConfiguration(classes = TestNGCitrusSpringSupport.class)25public class ExecutePLSQLActionTest extends TestNGCitrusSpringSupport {26 @Test(dataProvider = "testDataProvider")27 @CitrusParameters({"name", "message"})28 public void executePLSQLAction(String name, String message) {29 variable("name", name);30 variable("message", message);31 plsql().executePLSQL("CREATE OR REPLACE PROCEDURE PLSQL_ERROR_PROC AS BEGIN RAISE_APPLICATION_ERROR(-20000, 'Error in stored procedure'); END;");
isIgnoreErrors
Using AI Code Generation
1package com.consol.citrus.plsql;2import com.consol.citrus.dsl.testng.TestNGCitrusTestDesigner;3import org.springframework.beans.factory.annotation.Autowired;4import org.springframework.jdbc.core.JdbcTemplate;5import org.testng.annotations.Test;6public class ExecutePLSQLActionIT extends TestNGCitrusTestDesigner {7 private JdbcTemplate jdbcTemplate;8 public void executePLSQLActionIT() {9 variable("id", "1");10 variable("name", "Citrus");11 variable("price", "100");12 executePLSQL()13 .sqlResource("classpath:com/consol/citrus/plsql/create_product.sql")14 .ignoreErrors(true);15 executePLSQL()16 .sqlResource("classpath:com/consol/citrus/plsql/create_product.sql")17 .ignoreErrors(false);18 executePLSQL()19 .sqlResource("classpath:com/consol/citrus/plsql/create_product.sql")20 .ignoreErrors(true);21 executePLSQL()22 .sqlResource("classpath:com/consol/citrus/plsql/create_product.sql")23 .ignoreErrors(false);24 executePLSQL()25 .sqlResource("classpath:com/consol/citrus/plsql/create_product.sql")26 .ignoreErrors(true);27 executePLSQL()28 .sqlResource("classpath:com/consol/citrus/plsql/create_product.sql")29 .ignoreErrors(false);30 executePLSQL()31 .sqlResource("classpath:com/consol/citrus/plsql/create_product.sql")32 .ignoreErrors(true);33 executePLSQL()34 .sqlResource("classpath:com/consol/citrus/plsql/create_product.sql")35 .ignoreErrors(false);36 executePLSQL()37 .sqlResource("classpath:com/consol/citrus/plsql/create_product.sql")38 .ignoreErrors(true);39 executePLSQL()40 .sqlResource("classpath:com/consol/citrus/plsql/create_product.sql")41 .ignoreErrors(false);42 executePLSQL()43 .sqlResource("classpath:com/consol/citrus/plsql/create_product.sql")44 .ignoreErrors(true);45 executePLSQL()46 .sqlResource("classpath:com/consol/citrus/plsql/create_product.sql")47 .ignoreErrors(false);48 executePLSQL()
isIgnoreErrors
Using AI Code Generation
1package com.consol.citrus.samples;2import org.springframework.context.annotation.Bean;3import org.springframework.context.annotation.Configuration;4import org.springframework.context.annotation.Import;5import com.consol.citrus.dsl.endpoint.CitrusEndpoints;6import com.consol.citrus.dsl.runner.TestRunner;7import com.consol.citrus.dsl.testng.TestNGCitrusTestRunner;8import com.consol.citrus.jdbc.endpoint.JdbcEndpoint;9import com.consol.citrus.jdbc.message.JdbcMessage;10import com.consol.citrus.message.MessageType;11import com.consol.citrus.testng.CitrusParameters;12import org.testng.annotations.Test;13public class ExecutePLSQLActionTest extends TestNGCitrusTestRunner {14 @CitrusParameters({"plsqlEndpoint"})15 public void executePLSQLActionTest() {16 description("ExecutePLSQLAction sample test");17 variable("plsqlEndpoint", CitrusEndpoints.jdbc()18 .url("jdbc:oracle:thin:@localhost:1521:xe")19 .username("hr")20 .password("hr")21 .driver("oracle.jdbc.driver.OracleDriver")22 .build());23 echo("Create table");24 executePLSQL().statement("CREATE TABLE CITRUS_TEST (ID NUMBER, NAME VARCHAR2(50))");25 echo("Insert data");26 executePLSQL().statement("INSERT INTO CITRUS_TEST VALUES (1, 'Citrus')");27 echo("Select data");28 executePLSQL().statement("SELECT * FROM CITRUS_TEST");29 echo("Drop table");30 executePLSQL().statement("DROP TABLE CITRUS_TEST");31 echo("Ignore errors");32 executePLSQL().statement("DROP TABLE CITRUS_TEST").ignoreErrors(true);33 }34}35[INFO] --- maven-compiler-plugin:3.7.0:compile (default-compile) @ citrus-samples ---36[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ citrus-samples ---
isIgnoreErrors
Using AI Code Generation
1public void test() {2 variable("var1", "value1");3 sql(dataSource)4 .statement("update table1 set field1 = 'value1' where field2 = 'value2'")5 .ignoreErrors();6}7public void test() {8 variable("var1", "value1");9 sql(dataSource)10 .statement("update table1 set field1 = 'value1' where field2 = 'value2'")11 .ignoreErrors(true);12}13public void test() {14 variable("var1", "value1");15 sql(dataSource)16 .statement("update table1 set field1 = 'value1' where field2 = 'value2'")17 .ignoreErrors(false);18}19public void test() {20 variable("var1", "value1");21 sql(dataSource)22 .statement("update table1 set field1 = 'value1' where field2 = 'value2'")23 .ignoreErrors(true);24}25public void test() {26 variable("var1", "value1");27 sql(dataSource)28 .statement("update table1 set field1 = 'value1' where field2 = 'value2'")29 .ignoreErrors(false);30}31public void test() {32 variable("var1", "value1");33 sql(dataSource)34 .statement("update table1 set field1 = 'value1' where field2 = 'value2'")35 .ignoreErrors(true);36}37public void test() {38 variable("var1", "value1");
isIgnoreErrors
Using AI Code Generation
1public class 4 {2 public static void main(String[] args) {3 TestCase testCase = new TestCase();4 TestRunner runner = new TestRunner();5 runner.setTestCase(testCase);6 ExecutePLSQLAction executePLSQLAction = new ExecutePLSQLAction();7 executePLSQLAction.setName("executePLSQLAction");8 executePLSQLAction.setSql("CREATE OR REPLACE PROCEDURE TEST_PROCEDURE IS BEGIN DBMS_OUTPUT.PUT_LINE('Hello World!'); END;");9 executePLSQLAction.setIgnoreErrors(true);10 testCase.addAction(executePLSQLAction);11 executePLSQLAction = new ExecutePLSQLAction();12 executePLSQLAction.setName("executePLSQLAction");13 executePLSQLAction.setSql("CREATE OR REPLACE PROCEDURE TEST_PROCEDURE IS BEGIN DBMS_OUTPUT.PUT_LINE('Hello World!'); END;");14 testCase.addAction(executePLSQLAction);15 runner.run(testCase);16 }17}
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!