Cucumber Spring Integration

1. Khái quát chung

Cucumber là một khung thử nghiệm rất mạnh được viết bằng ngôn ngữ lập trình Ruby, tuân theo phương pháp BDD (phát triển theo hướng hành vi). Nó cho phép các nhà phát triển viết các trường hợp sử dụng cấp cao ở dạng văn bản thuần túy có thể được xác minh bởi các bên liên quan phi kỹ thuật và biến chúng thành các bài kiểm tra có thể thực thi, được viết bằng ngôn ngữ gọi là Gherkin.

Chúng tôi đã thảo luận về những điều này trong một bài báo khác.

Và Tích hợp Cucumber-Spring nhằm mục đích giúp quá trình tự động hóa thử nghiệm dễ dàng hơn. Khi chúng tôi đã tích hợp các bài kiểm tra Cucumber với Spring, chúng tôi sẽ có thể thực thi chúng cùng với bản dựng Maven.

2. Sự phụ thuộc của Maven

Hãy bắt đầu sử dụng tích hợp Cucumber-Spring bằng cách xác định các phụ thuộc Maven - bắt đầu với phụ thuộc Cucumber-JVM:

 io.cucumber cucumber-java 6.8.0 test 

Chúng tôi có thể tìm thấy phiên bản mới nhất của Cucumber JVM tại đây.

Tiếp theo, chúng tôi sẽ thêm phụ thuộc thử nghiệm JUnit và Cucumber:

 io.cucumber cucumber-junit 6.8.0 test 

Bạn có thể tìm thấy phiên bản mới nhất của Cucumber JUnit tại đây.

Và cuối cùng, sự phụ thuộc của Spring và Cucumber:

 io.cucumber cucumber-spring 6.8.0 test 

Một lần nữa, chúng ta có thể xem phiên bản Cucumber Spring mới nhất tại đây.

3. Cấu hình

Bây giờ chúng ta sẽ xem xét cách chúng ta có thể tích hợp Cucumber trong một ứng dụng Spring.

Đầu tiên, chúng ta sẽ tạo một ứng dụng Spring Boot - mà chúng ta sẽ theo dõi bài viết về ứng dụng Spring-Boot. Sau đó, chúng tôi sẽ tạo một dịch vụ Spring REST và viết thử nghiệm Cucumber cho nó.

3.1. Bộ điều khiển REST

Đầu tiên, hãy tạo một bộ điều khiển đơn giản:

@RestController public class VersionController { @GetMapping("/version") public String getVersion() { return "1.0"; } }

3.2. Định nghĩa bước dưa chuột

Tất cả những gì chúng ta cần để chạy các bài kiểm tra Cucumber của mình với JUnit là tạo một lớp trống duy nhất với chú thích @RunWith (Cucumber.class) :

@RunWith(Cucumber.class) @CucumberOptions(features = "src/test/resources") public class CucumberIntegrationTest { }

Chúng tôi có thể thấy chú thích @CucumberOptions nơi chúng tôi chỉ định vị trí của tệp Gherkin còn được gọi là tệp tính năng. Tại thời điểm này, Cucumber nhận ra ngôn ngữ Gherkin; bạn có thể đọc thêm về Gherkin trong bài viết được đề cập trong phần giới thiệu.

Vì vậy, bây giờ, hãy tạo một tệp tính năng Cucumber:

Feature: the version can be retrieved Scenario: client makes call to GET /version When the client calls /version Then the client receives status code of 200 And the client receives server version 1.0

Kịch bản là thực hiện cuộc gọi GET tới url / phiên bản dịch vụ REST và xác minh phản hồi.

Tiếp theo, chúng ta cần tạo một cái gọi là mã keo. Đây là các phương thức liên kết một bước Gherkin với mã Java.

Chúng ta có các tùy chọn ở đây - chúng ta có thể sử dụng Biểu thức dưa chuột hoặc biểu thức chính quy bên trong các chú thích. Trong trường hợp của chúng tôi, chúng tôi sẽ bám vào các biểu thức chính quy:

@When("^the client calls /version$") public void the_client_issues_GET_version() throws Throwable{ executeGet("//localhost:8080/version"); } @Then("^the client receives status code of (\\d+)$") public void the_client_receives_status_code_of(int statusCode) throws Throwable { HttpStatus currentStatusCode = latestResponse.getTheResponse().getStatusCode(); assertThat("status code is incorrect : "+ latestResponse.getBody(), currentStatusCode.value(), is(statusCode)); } @And("^the client receives server version (.+)$") public void the_client_receives_server_version_body(String version) throws Throwable { assertThat(latestResponse.getBody(), is(version)); }

Vì vậy, bây giờ chúng ta hãy tích hợp các bài kiểm tra Cucumber với Bối cảnh ứng dụng mùa xuân. Cho rằng, chúng tôi sẽ tạo ra một lớp mới và chú thích nó với @SpringBootTest@CucumberContextConfiguration :

@CucumberContextConfiguration @SpringBootTest public class SpringIntegrationTest { // executeGet implementation }

Bây giờ tất cả các định nghĩa Cucumber có thể đi vào một lớp Java riêng biệt mở rộng SpringIntegrationTest :

public class StepDefs extends SpringIntegrationTest { @When("^the client calls /version$") public void the_client_issues_GET_version() throws Throwable { executeGet("//localhost:8080/version"); } }

Tất cả chúng tôi đã sẵn sàng để chạy thử nghiệm ngay bây giờ.

Cuối cùng, chúng ta có thể chạy nhanh thông qua dòng lệnh, chỉ cần chạy mvn clean install -Pintegration - Maven sẽ thực hiện các bài kiểm tra tích hợp và hiển thị kết quả trong bảng điều khiển.

3 Scenarios ([32m3 passed[0m) 9 Steps ([32m9 passed[0m) 0m1.054s Tests run: 12, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 9.283 sec - in com.baeldung.CucumberTest 2016-07-30 06:28:20.142 INFO 732 --- [Thread-2] AnnotationConfigEmbeddedWebApplicationContext : Closing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext: startup date [Sat Jul 30 06:28:12 CDT 2016]; root of context hierarchy Results : Tests run: 12, Failures: 0, Errors: 0, Skipped: 0 

4. Kết luận

Sau khi đã định cấu hình Cucumber với Spring, sẽ rất hữu ích khi sử dụng các thành phần được cấu hình Spring trong thử nghiệm BDD. Đây là hướng dẫn đơn giản để tích hợp thử nghiệm Cucumber trong ứng dụng Spring-Boot.

Như thường lệ, tất cả các mẫu mã hiển thị trong hướng dẫn này đều có sẵn trên GitHub.