Testing REST APIs with Playwright in Java

HOME

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.example</groupId>
  <artifactId>Playwright_API_Demo</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>Playwright_API_Demo</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <playwright.version>1.57.0</playwright.version>
    <testng.version>7.11.0</testng.version>
    <maven.compiler.plugin.version>3.15.0</maven.compiler.plugin.version>
    <maven.compiler.source.version>17</maven.compiler.source.version>
    <maven.compiler.target.version>17</maven.compiler.target.version>
    <maven.surefire.plugin.version>3.5.4</maven.surefire.plugin.version>
  </properties>

  <dependencies>

    <!-- Playwright -->
    <dependency>
      <groupId>com.microsoft.playwright</groupId>
      <artifactId>playwright</artifactId>
      <version>${playwright.version}</version>
    </dependency>

    <!-- TestNG -->
    <dependency>
      <groupId>org.testng</groupId>
      <artifactId>testng</artifactId>
      <version>${testng.version}</version>
      <scope>test</scope>
    </dependency>

  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>${maven.compiler.plugin.version}</version>
        <configuration>
          <source>${maven.compiler.source.version}</source>
          <target>${maven.compiler.target.version}</target>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>${maven.surefire.plugin.version}</version>
        <configuration>
          <suiteXmlFiles>
            <suiteXmlFile>testng.xml</suiteXmlFile>
          </suiteXmlFiles>
        </configuration>
        <dependencies>
        </dependencies>
      </plugin>
    </plugins>
  </build>
</project>

 @BeforeMethod
    void setUp() {
        createPlaywright();
        createAPIRequestContext();
    }

 void createPlaywright() {
        playwright = Playwright.create();
    }

void createAPIRequestContext() {
        Map<String, String> headers = new HashMap<>();
        headers.put("Accept", "application/json");

        request = playwright.request().newContext(new APIRequest.NewContextOptions()
                .setBaseURL("https://jsonplaceholder.typicode.com")
                .setExtraHTTPHeaders(headers));
    }

  @AfterMethod
    void tearDown() {
        if (request != null) {
            request.dispose();
        }
        if (playwright != null) {
            playwright.close();
        }
    }

 @Test
    public void getUserById() {
        APIResponse response = request.get("/posts/1");
        System.out.println("GET Response :" + response.text());
        Assert.assertEquals(response.status(), 200, "Expected 200 for GET /posts/1");

        Gson gson = new Gson();
        JsonObject jsonResponse = gson.fromJson(response.text(), JsonObject.class);
        Assert.assertEquals(jsonResponse.get("userId").getAsInt(), 1, "Expected userId=1 in response body");
        Assert.assertEquals(jsonResponse.get("id").getAsInt(), 1, "Expected id=1 in response body");
    }

POST Request

{
    "title": "architect",
    "body": "post test",
    "userId": 100
}

 @Test
    public void createUser() {
        Map<String, Object> payload = new HashMap<>();
        payload.put("title", "architect");
        payload.put("body", "post test");
        payload.put("userId", 100);

        APIResponse response = request.post("/posts", RequestOptions.create().setData(payload));
        System.out.println("POST Response :" + response.text());
        Assert.assertEquals(response.status(), 201, "Expected 201 for POST /users");

        Gson gson = new Gson();
        JsonObject body = gson.fromJson(response.text(), JsonObject.class);
        Assert.assertEquals(body.get("title").getAsString(), "architect");
        Assert.assertEquals(body.get("body").getAsString(), "post test");
        Assert.assertEquals(body.get("userId").getAsInt(), 100);
        Assert.assertNotNull(body.get("id"), "Expected id in create response");
    }

{
    "id": 1, 
    "title": "business manager",
    "body": "Implementing DataWareHouse Migration Project",
    "userId": 50
}
 @Test
    public void updateUser() {

        APIResponse response = request.get("/posts/1");
        System.out.println("GET Response before PUT Request:" + response.text());
        Assert.assertEquals(response.status(), 200, "Expected 200 for GET /posts/1");


        Map<String, Object> payload = new HashMap<>();
        payload.put("id", 1);
        payload.put("title", "business manager");
        payload.put("body", "Implementing DataWareHouse Migration Project");
        payload.put("userId", 50);

        APIResponse response1 = request.put("/posts/1", RequestOptions.create().setData(payload));
        System.out.println("PUT Response :" + response1.text());
        Assert.assertEquals(response1.status(), 200, "Expected 200 for PUT /posts/1");

        Gson gson = new Gson();
        JsonObject body = gson.fromJson(response1.text(), JsonObject.class);
        Assert.assertEquals(body.get("title").getAsString(), "business manager");
        Assert.assertEquals(body.get("body").getAsString(), "Implementing DataWareHouse Migration Project");
        Assert.assertEquals(body.get("userId").getAsInt(), 50);
        Assert.assertNotNull(body.get("id"), "Expected id in create response");

    }

   @Test
    public void deleteUser() {
        APIResponse response = request.delete("/posts/1");
        System.out.println("DELETE Response :" + response.text());
        Assert.assertEquals(response.status(), 200, "Expected 200 for DELETE /posts/1");
    }

mvn clean test

Leave a comment