REST-terjamin: Tips Berguna

Pada artikel ini, saya telah mengumpulkan beberapa tips tentang penggunaan REST -ured, salah satu perpustakaan Java yang paling umum untuk mengotomatisasi pengujian REST-API.

Semua contoh sangat penting, dikumpulkan dari praktik saya melakukan tinjauan kode di lebih dari 50 proyek dengan tes otomatis.

Ambil titik akhir ke tempat yang terpisah


Tampaknya ini sudah jelas. Tapi tidak, cukup sering Anda harus melihat kode dengan titik akhir yang dikodekan dalam permintaan.

Yang terbaik adalah menempatkan titik akhir ke dalam konstanta statis kelas akhir. Pada saat yang sama, "antarmuka konstan" antipattern harus dihindari - ini adalah praktik yang buruk.

Jangan lupa bahwa REST -ured memungkinkan Anda membuat parameter jalur, misalnya:

public final class EndPoints { public static final String users = "/users/{id}"; ... } given().pathParams("id", someId).get(EndPoints.users)...; //   given().get(EndPoints.users, someId).... 

Juga, jika dalam banyak kueri Anda menggunakan jalur dasar yang sama, itu akan menjadi praktik yang baik untuk memasukkannya ke konstanta hotel dan meneruskannya ke basePath, misalnya:

 //   url  http://host:port/appname/rest/someEndpoints private static final basePath = "/appname/rest/"; .. //       , //      : RestAssured.basePath = basePath; //     : given().basePath(basePath)... //    ,     

Hal yang sama berlaku untuk host dan port aplikasi yang diuji.

ContentType / Terima


Header ini digunakan di hampir semua permintaan HTTP. Penulis REST-terjamin, menyadari hal ini, memungkinkan untuk menginstalnya dengan memanggil metode khusus:

 //   : given().header("content-type", "application/json").header("accept", "application/json")...; //   : given().contentType(ContentType.JSON).accept(ContentType.JSON)...; 

Merupakan praktik yang baik untuk menetapkan tajuk ini dalam spesifikasi atau secara global. Ini akan meningkatkan keterbacaan kode Anda.

StatusCode, dll.


REST -ured menyediakan sintaks yang mudah untuk memeriksa setiap komponen respons HTTP, tetapi dalam praktiknya Anda terus menemukan kode yang sama:

 //   : Response response = given()...when().get(someEndpoint); Assert.assertEquals(200, response.then().extract().statusCode()); //   : given()...when().get(someEndpoint).then().statusCode(200); 

Gunakan spesifikasi


Duplikasi kode buruk. Gunakan spesifikasi untuk mengurangi duplikasi. Di REST-terjamin, Anda dapat membuat spesifikasi untuk permintaan dan tanggapan. Dalam spesifikasi permintaan, kami mengeluarkan semua yang dapat digandakan dalam permintaan.

 RequestSpecification requestSpec = new RequestSpecBuilder() .setBaseUri("http://localhost") .setPort(8080) .setAccept(ContentType.JSON) .setContentType(ContentType.ANY) ... .log(LogDetail.ALL) .build(); //       : RestAssured.requestSpecification = requestSpec; //   : given().spec(requestSpec)...when().get(someEndpoint); 

Dalam spesifikasi respons, kami melakukan semua pemeriksaan yang digandakan dari permintaan ke permintaan.

 ResponseSpecification responseSpec = new ResponseSpecBuilder() .expectStatusCode(200) .expectBody(containsString("success")) .build(); //       : RestAssured.responseSpecification = responseSpec; //   : given()...when().get(someEndpoint).then().spec(responseSpec)...; 

Anda dapat membuat beberapa spesifikasi untuk berbagai jenis permintaan / tanggapan dan menggunakannya dalam situasi yang tepat.

Jangan menulis kruk Anda untuk mengubah objek


Anda tidak boleh mengonversi POJO Anda ke JSON menggunakan Jackson ObjectMapper, dan kemudian mentransfer string yang dihasilkan ke badan permintaan. REST-yakin melakukan pekerjaan yang bagus untuk ini. Untuk ini, Jackson atau Gson yang sama digunakan, tergantung pada apa yang ada di classpath. JAXB digunakan untuk mengkonversi ke XML. Format asli ditentukan secara otomatis oleh nilai Content-Type.

 given().contentType(ContentType.JSON).body(somePojo) .when().post(EndPoints.add) .then() .statusCode(201); //        : SomePojo pojo = given(). .when().get(EndPoints.get) .then().extract().body().as(SomePojo.class); 

Selain itu, REST -ured melakukan pekerjaan yang baik untuk mengkonversi HashMap ke JSON dan sebaliknya.

Manfaatkan kekuatan Groovy


Pustaka yang dijamin REST sendiri ditulis dalam Groovy dan memungkinkan Anda untuk menerapkan berbagai metode dari Groovy ke respons JSON / XML yang diterima. Sebagai contoh:

 //  find, findAll         ,  collect       . //  it         Map<String, ?> map = get(EndPoints.anyendpoint).path("rootelement.find { it.title =~ 'anythingRegExp'}"); //     ,     Map<String, ?> map = get(EndPoints.anyendpoint).path("rootelement.findAll { element -> element.title.length() > 4 }"); //     sum, max, min     ,        String expensiveCar = get(EndPoints.cars).path("cars.find { it.title == 'Toyota Motor Corporation'}.models.max { it.averagePrice }.title"); 

Menggunakan metode dari Groovy dapat sangat mengurangi jumlah kode yang Anda tulis untuk menemukan nilai yang diperlukan dari jawabannya.

Itu saja, jika Anda memiliki lebih banyak tips dan contoh, tulis di komentar.

Source: https://habr.com/ru/post/id421005/


All Articles