Testing with TestNG


Fail Fast Using TestListenerAdapter
Sometimes, we want to all suites stops immediately if one test fails, TestListenerAdapter can help on this. onTestFailure will be called when any test fails, it will set static boolean varible hasFailedTest to true.
public class MyTestNGListener extends TestListenerAdapter {
    private static boolean hasFailedTest;
    @Override
    public void beforeConfiguration(final ITestResult result) {
        if (hasFailedTest) {
            throw new SkipException("Skipping beforeConfiguration");
        }
        super.beforeConfiguration(result);
    }

    @Override
    public void onStart(final ITestContext testContext) {
        if (hasFailedTest) {
            throw new SkipException("Skipping onStart");
        }
        super.onStart(testContext);
    }

    @Override
    public void onTestStart(final ITestResult result) {
        if (hasFailedTest) {
            throw new SkipException("Skipping onTestStart");
        }
        super.onTestStart(result);
    }

    @Override
    public void onTestFailure(final ITestResult tr) {
        hasFailedTest = true;
    }
}

@Listeners({MyTestNGListener.class})
public abstract class BaseTest {}

@BeforeSuite + @BeforeClass
To test admin api which requires login first, we login in the @BeforeSuite and share the session in all test in the suite.
-- We use rest-assured to do end-2-end rest api testing.

To make the child class easier to use the sessionFilter, we use @BeforeClass to store it as instance variable.
public abstract class BaseTest {
  @BeforeSuite(alwaysRun = true)
  @Parameters({"adminBaseUrl", "clientBaseUrl", "username", "password"})
  public void setup(final String adminBaseUrl, final String username, final String password,
          final ITestContext context) {
      final SessionFilter sessionFilter = TestUtil.configureAdminRestAssured(adminBaseUrl, username, password);
      context.setAttribute(FILTER_NAME, sessionFilter);
  }

  protected RequestSpecification restRequestSpec, adminRequestSpec;
  protected SessionFilter sessionFilter;

  @BeforeClass(alwaysRun = true)
  @Parameters({"adminBaseUrl", "clientBaseUrl"})
  public void beforeClass(final String adminBaseUrl, final String clientBaseUrl, final ITestContext context) {
      restRequestSpec = new RequestSpecBuilder().setBaseUri(clientBaseUrl).setContentType(ContentType.JSON)
              .setRelaxedHTTPSValidation().build();

      adminRequestSpec = new RequestSpecBuilder().setBaseUri(adminBaseUrl).setContentType(ContentType.JSON)
              .setRelaxedHTTPSValidation().build();

      sessionFilter = (SessionFilter) context.getAttribute(FILTER_NAME);
  }
}

public static SessionFilter configureAdminRestAssured(final String baseUrl, final String username,
        final String password) {
    RestAssured.reset();
    RestAssured.enableLoggingOfRequestAndResponseIfValidationFails();
    RestAssured.config = config().logConfig(new LogConfig());
    RestAssured.config.getHttpClientConfig().reuseHttpClientInstance();
    RestAssured.config = config().sslConfig(sslConfig().allowAllHostnames());
    RestAssured.useRelaxedHTTPSValidation();
    
    final SessionFilter sessionFilter = new SessionFilter();
    final Map<string object> parameters = new HashMap<>();
    parameters.put("j_username", username);
    parameters.put("j_password", password);

    // if login successful, it will redirect it to index.html, check whether its status is 302,
    // the new location ends with index.html
    final ExtractableResponse<response> response =
            given().contentType(ContentType.URLENC).formParameters(parameters).filter(sessionFilter)
            .post(baseUrl + "/j_spring_security_check").then().statusCode(302).extract();
    assertThat(response.header("Location"), endsWith("index.html"));
    RestAssured.basePath = "/v1";
    return sessionFilter;
}


Post a Comment

Labels

Java (159) Lucene-Solr (110) All (58) Interview (58) J2SE (53) Algorithm (43) Soft Skills (36) Eclipse (34) Code Example (31) Linux (24) JavaScript (23) Spring (22) Windows (22) Web Development (20) Nutch2 (18) Tools (18) Bugs (17) Debug (15) Defects (14) Text Mining (14) J2EE (13) Network (13) PowerShell (11) Chrome (9) Design (9) How to (9) Learning code (9) Performance (9) UIMA (9) html (9) Dynamic Languages (8) Http Client (8) Maven (8) Security (8) Trouble Shooting (8) bat (8) blogger (8) Big Data (7) Continuous Integration (7) Google (7) Guava (7) JSON (7) Problem Solving (7) ANT (6) Coding Skills (6) Database (6) Scala (6) Shell (6) css (6) Algorithm Series (5) Cache (5) IDE (5) Lesson Learned (5) Programmer Skills (5) System Design (5) Tips (5) adsense (5) xml (5) AIX (4) Code Quality (4) GAE (4) Git (4) Good Programming Practices (4) Jackson (4) Memory Usage (4) Miscs (4) OpenNLP (4) Project Managment (4) Python (4) Spark (4) Testing (4) ads (4) regular-expression (4) Android (3) Apache Spark (3) Become a Better You (3) Concurrency (3) Eclipse RCP (3) English (3) Happy Hacking (3) IBM (3) J2SE Knowledge Series (3) JAX-RS (3) Jetty (3) Restful Web Service (3) Script (3) regex (3) seo (3) .Net (2) Android Studio (2) Apache (2) Apache Procrun (2) Architecture (2) Batch (2) Bit Operation (2) Build (2) Building Scalable Web Sites (2) C# (2) C/C++ (2) CSV (2) Career (2) Cassandra (2) Distributed (2) Fiddler (2) Firefox (2) Google Drive (2) Gson (2) Html Parser (2) Http (2) Image Tools (2) JQuery (2) Jersey (2) LDAP (2) Life (2) Logging (2) Software Issues (2) Storage (2) Text Search (2) xml parser (2) AOP (1) Application Design (1) AspectJ (1) Chrome DevTools (1) Cloud (1) Codility (1) Data Mining (1) Data Structure (1) ExceptionUtils (1) Exif (1) Feature Request (1) FindBugs (1) Greasemonkey (1) HTML5 (1) Httpd (1) I18N (1) IBM Java Thread Dump Analyzer (1) JDK Source Code (1) JDK8 (1) JMX (1) Lazy Developer (1) Mac (1) Machine Learning (1) Mobile (1) My Plan for 2010 (1) Netbeans (1) Notes (1) Operating System (1) Perl (1) Problems (1) Product Architecture (1) Programming Life (1) Quality (1) Redhat (1) Redis (1) Review (1) RxJava (1) Solutions logs (1) Team Management (1) Thread Dump Analyzer (1) Troubleshooting (1) Visualization (1) boilerpipe (1) htm (1) ongoing (1) procrun (1) rss (1)

Popular Posts