Dưa chuột - Hướng dẫn nhanh

Để có được lợi thế tốt hơn của việc kiểm thử phần mềm, các tổ chức ngày nay đang tiến thêm một bước. Họ triển khai các kịch bản kiểm thử chấp nhận quan trọng trong khi quá trình phát triển đang diễn ra. Cách tiếp cận này thường được gọi làBehavior Driven Development (BDD).

Phát triển theo hướng hành vi mang đến cho chúng tôi cơ hội tạo các kịch bản thử nghiệm từ cả quan điểm của nhà phát triển và khách hàng. Vì vậy, ngay từ đầu, các nhà phát triển, quản lý dự án, QA, người kiểm tra chấp nhận của người dùng và chủ sở hữu sản phẩm (chủ cổ phần), tất cả đều tập hợp lại với nhau và phân tích xem nên thông qua kịch bản kiểm thử nào để gọi phần mềm / ứng dụng này thành công. Bằng cách này, họ đưa ra một tập hợp các kịch bản thử nghiệm. Tất cả các kịch bản kiểm tra này đều bằng ngôn ngữ tiếng Anh đơn giản, vì vậy nó cũng phục vụ mục đích của tài liệu.

Thí dụ

Nếu chúng tôi đang phát triển tính năng xác thực người dùng, thì sau đây có thể là một số tình huống thử nghiệm quan trọng, cần phải vượt qua để gọi là thành công.

  • Người dùng sẽ có thể đăng nhập với đúng tên người dùng và mật khẩu chính xác.

  • Người dùng sẽ không thể đăng nhập với tên người dùng không chính xác và mật khẩu chính xác.

  • Người dùng sẽ không thể đăng nhập với tên người dùng chính xác và mật khẩu không chính xác.

Làm thế nào nó hoạt động

Vào thời điểm mã đã sẵn sàng, các tập lệnh thử nghiệm cũng sẵn sàng. Mã phải vượt qua các tập lệnh kiểm tra được xác định trong BDD. Nếu nó không xảy ra, sẽ cần phải cấu trúc lại mã. Mã chỉ được đóng băng sau khi thực hiện thành công các tập lệnh thử nghiệm đã xác định.

Đó là một khái niệm rất đơn giản, nhưng chúng ta cần những gì để thực hiện khái niệm này. Câu trả lời là, Khung phát triển theo hướng hành vi (BDD). Cucumber là một trong những công cụ mã nguồn mở như vậy, hỗ trợ phát triển theo hướng hành vi. Nói chính xác hơn, Cucumber có thể được định nghĩa là một khung thử nghiệm, được điều khiển bằng văn bản tiếng Anh thuần túy. Nó phục vụ như tài liệu, kiểm tra tự động và hỗ trợ phát triển - tất cả trong một.

Vậy Cucumber có tác dụng gì? Nó có thể được mô tả trong các bước sau:

Cucumber đọc mã được viết bằng văn bản tiếng Anh thuần túy (Ngôn ngữ Gherkin - sẽ được giới thiệu sau trong hướng dẫn này) trong tệp tính năng (sẽ được giới thiệu sau).

Nó tìm thấy kết quả khớp chính xác của từng bước trong định nghĩa bước (tệp mã - chi tiết được cung cấp sau trong hướng dẫn).

Đoạn mã được thực thi có thể là các khung phần mềm khác nhau như Selenium, Ruby on Rails, v.v. Không phải mọi công cụ khung BDD đều hỗ trợ mọi công cụ.

Điều này đã trở thành lý do cho sự phổ biến của Cucumber so với các khuôn khổ khác, như JBehave, JDave, Easyb, Vân vân.

Cucumber hỗ trợ hơn một chục nền tảng phần mềm khác nhau như -

  • Viên ngọc trên tay vịn
  • Selenium
  • PicoContainer
  • Khung mùa xuân
  • Watir

Ưu điểm của dưa chuột so với các công cụ khác

  • Cucumber hỗ trợ các ngôn ngữ khác nhau như Java.net và Ruby.

  • Nó hoạt động như một cầu nối giữa ngôn ngữ kinh doanh và kỹ thuật. Chúng tôi có thể thực hiện điều này bằng cách tạo một trường hợp thử nghiệm bằng văn bản tiếng Anh thuần túy.

  • Nó cho phép viết kịch bản thử nghiệm mà không cần biết bất kỳ mã nào, nó cho phép cả những người không phải lập trình viên tham gia.

  • Nó phục vụ mục đích của khung kiểm tra end-to-end không giống như các công cụ khác.

  • Do cấu trúc tập lệnh thử nghiệm đơn giản, Cucumber cung cấp khả năng tái sử dụng mã.

Trong chương này, chúng ta sẽ thấy thiết lập môi trường cho Cucumber với Selenium WebDriver và Java, trên Windows Machine.

Điều kiện tiên quyết để thiết lập môi trường

Sau đây là các điều kiện tiên quyết cần thiết để thiết lập:

Java

Why we need- Java là một ngôn ngữ lập trình mạnh mẽ. Cucumber hỗ trợ nền tảng Java để thực thi.

How to install -

Step 1 - Tải xuống jdk và jre từ liên kết sau http://www.oracle.com/technetwork/java/javase/downloads/index.html

Step 2 - Chấp nhận thỏa thuận cấp phép.

Step 3 - Cài đặt JDK và JRE.

Step 4 - Đặt biến môi trường như trong ảnh chụp màn hình sau.

Nhật thực

Why we need- Eclipse là một Môi trường Phát triển Tích hợp (IDE). Nó chứa một không gian làm việc cơ sở và một hệ thống plug-in có thể mở rộng để tùy chỉnh môi trường.

How to install -

Step 1 - Đảm bảo rằng JAVA đã được cài đặt trên máy của bạn.

Step 2 - Tải xuống Eclipse từ https://eclipse.org/downloads/

Step 3 - Giải nén và cài đặt Eclipse.

Maven

Why we need- Maven là một công cụ tự động hóa xây dựng được sử dụng chủ yếu cho các dự án Java. Nó cung cấp một nền tảng chung để thực hiện các hoạt động như tạo mã nguồn, biên dịch mã, đóng gói mã vào lọ, v.v. Sau này, nếu bất kỳ phiên bản phần mềm nào bị thay đổi, Maven cung cấp một cách dễ dàng để sửa đổi dự án thử nghiệm cho phù hợp.

How to install -

Step 1 - Tải xuống Maven từ liên kết sau - https://maven.apache.org/download.cgi

Step 2 - Giải nén tập tin và ghi nhớ vị trí.

Step 3 - Tạo biến môi trường MAVEN_HOME như trong hình sau.

Step 4 - Chỉnh sửa biến Path và bao gồm Maven như thể hiện trong ảnh chụp màn hình sau.

Step 5 - Tải xuống plugin MAVEN từ Eclipse.

Step 6 - Mở Eclipse.

Step 7 - Đi tới Trợ giúp → Thị trường Eclipse → Tìm kiếm Maven → Tích hợp Maven cho Eclipse → CÀI ĐẶT.

Định cấu hình Cucumber với Maven

Step 1 - Tạo một dự án Maven.

  • Đi tới Tệp → Mới → Khác → Maven → Dự án Maven → Tiếp theo.

  • Cung cấp Id nhóm (Id nhóm sẽ xác định duy nhất dự án của bạn trên tất cả các dự án).

  • Cung cấp Id cấu phần (Id cấu phần là tên của lọ không có phiên bản. Bạn có thể chọn bất kỳ tên nào, được viết bằng chữ thường). Nhấp vào Kết thúc.

Step 2 - Mở pom.xml.

  • Đi tới trình khám phá gói ở phía bên trái của Eclipse.

  • Mở rộng dự án CucumberTest.

  • Định vị pom.xml tập tin.

  • Nhấp chuột phải và chọn tùy chọn, mở bằng “Trình chỉnh sửa văn bản”.

Step 3 - Thêm phụ thuộc cho selen: Điều này sẽ cho Maven biết tệp jar nào của Selenium sẽ được tải xuống từ kho lưu trữ trung tâm đến kho lưu trữ cục bộ.

  • Mở pom.xml đang ở chế độ chỉnh sửa, tạo thẻ phụ thuộc (<dependencies> </dependencies>), bên trong thẻ dự án.

  • Bên trong thẻ phụ thuộc, hãy tạo thẻ phụ thuộc (<dependency> </dependency>).

  • Cung cấp thông tin sau trong thẻ phụ thuộc.

<dependency> 
   <groupId>org.seleniumhq.selenium</groupId> 
   <artifactId>selenium-java</artifactId> 
   <version>2.47.1</version> 
</dependency>

Step 4 - Thêm phụ thuộc cho Cucumber-Java: Điều này sẽ cho biết Maven, những tệp Cucumber nào sẽ được tải xuống từ kho lưu trữ trung tâm đến kho lưu trữ cục bộ.

  • Tạo thêm một thẻ phụ thuộc.

  • Cung cấp thông tin sau trong thẻ phụ thuộc

<dependency> 
   <groupId>info.cukes</groupId>
   <artifactId>cucumber-java</artifactId> 
   <version>1.0.2</version> 
   <scope>test</scope> 
</dependency>

Step 5 - Thêm phụ thuộc cho Cucumber-JUnit: Điều này sẽ cho biết Maven, những tệp Cucumber JUnit nào sẽ được tải xuống từ kho lưu trữ trung tâm đến kho lưu trữ cục bộ.

  • Tạo thêm một thẻ phụ thuộc.

  • Cung cấp thông tin sau trong thẻ phụ thuộc

<dependency> 
   <groupId>info.cukes</groupId> 
   <artifactId>cucumber-junit</artifactId> 
   <version>1.0.2</version> 
   <scope>test</scope> 
</dependency>

Step 6 - Thêm phụ thuộc cho JUnit: Điều này sẽ cho biết Maven, những tệp JUnit nào sẽ được tải xuống từ kho lưu trữ trung tâm đến kho lưu trữ cục bộ.

  • Tạo thêm một thẻ phụ thuộc.

  • Cung cấp thông tin sau trong thẻ phụ thuộc.

<dependency> 
   <groupId>junit</groupId> 
   <artifactId>junit</artifactId> 
   <version>4.10</version> 
   <scope>test</scope> 
</dependency>

Step 7 - Xác minh mã nhị phân.

  • Một lần pom.xml được chỉnh sửa thành công, lưu nó.

  • Đi tới Dự án → Sạch sẽ - Quá trình này sẽ mất vài phút.

Bạn sẽ có thể thấy một kho lưu trữ Maven như được hiển thị trong ảnh chụp màn hình sau.

  • Tạo một tệp tính năng (sẽ được đề cập sau).

  • Tạo tệp định nghĩa bước (sẽ được đề cập sau).

  • Tạo một trình chạy JUnit để chạy thử nghiệm (sẽ được đề cập sau).

Cho đến nay, chúng ta đã hiểu về Dưa chuột và công dụng của nó. Nó thực thi các tập lệnh thử nghiệm, đã được xác định trong tệp tính năng (sẽ được đề cập trong các chương tiếp theo). Ngôn ngữ mà các tệp tính năng thực thi này được viết, được gọi làGherkin. Gherkin là một ngôn ngữ văn bản tiếng Anh đơn giản, giúp công cụ - Cucumber giải thích và thực thi các tập lệnh thử nghiệm.

Người ta có thể nghĩ rằng, người ta đã thảo luận nhiều lần rằng Cucumber hỗ trợ văn bản tiếng Anh đơn giản, vậy tại sao chúng ta cần một ngôn ngữ riêng - Gherkins. Câu trả lời nằm trong khái niệm Phát triển theo hướng hành vi.

Như đã thảo luận trước đó, chúng ta đã thấy rằng BDD kết hợp các triển vọng khác nhau trong khi tạo các tập lệnh thử nghiệm. Đó có thể là khách hàng tiềm năng phát triển, khách hàng tiềm năng kinh doanh, v.v. Điều đó nói rằng, chúng tôi sẽ cần những người từ cộng đồng khác nhau như nhà phát triển, người quản lý dự án, chủ sở hữu sản phẩm và người thử nghiệm trong khi phát triển các tập lệnh thử nghiệm. Vì những người này không thuộc cùng một thể loại, nên có nguy cơ không sử dụng ngôn ngữ chung để hình thành ý tưởng kịch bản thử nghiệm. Đây là điểm tiến hóa của Gherkins.

Gherkin cung cấp bộ từ khóa phổ biến trong văn bản tiếng Anh, những từ khóa này có thể được mọi người trong cộng đồng khác nhau sử dụng nhưng vẫn nhận được kết quả giống nhau dưới dạng tập lệnh thử nghiệm.

Thí dụ

Feature - Chức năng đăng nhập cho một trang mạng xã hội. Given Tôi là một người dùng trang mạng xã hội. When Tôi nhập tên người dùng là tên người dùng1. And Tôi nhập mật khẩu là mật khẩu1. Then Tôi sẽ được chuyển hướng đến trang chủ của trang web.

Tình huống được đề cập ở trên là một tính năng được gọi là đăng nhập người dùng. Tất cả các từ được tô đậm là từ khóa của Gherkin.

Ví dụ về một số từ khóa khác -

  • Background
  • But
  • *
  • Phác thảo kịch bản
  • Examples

Gherkin sẽ phân tích cú pháp từng bước được viết trong tệp định nghĩa bước (sẽ được đề cập sau). Vì vậy, các bước được đề cập trong tệp đặc trưng và tệp định nghĩa bước (sẽ được đề cập sau) phải khớp với nhau.

Bạn có thể tìm các lọ Gherkin trong thư mục Maven Dependency trong Trình khám phá gói. Nó được tải xuống cùng với các lọ Dưa chuột khác. Nó sẽ giống như ảnh chụp màn hình sau:

Một sự thật thú vị khác về Gherkin là, nó hỗ trợ không chỉ tiếng Anh mà còn nhiều ngôn ngữ bản địa khác như tiếng Pháp, Phần Lan, Indonesia, Hungary, Hindi, Urdu, Gujarati, v.v.

A Featurecó thể được định nghĩa như một đơn vị hoặc chức năng độc lập của một dự án. Hãy lấy một ví dụ rất phổ biến về một trang mạng xã hội. Tính năng của sản phẩm / dự án này như thế nào? Một số tính năng cơ bản có thể được xác định là -

  • Tạo và xóa người dùng khỏi trang mạng xã hội.

  • Chức năng đăng nhập của người dùng cho trang mạng xã hội.

  • Chia sẻ ảnh hoặc video trên trang mạng xã hội.

  • Gửi yêu cầu kết bạn.

  • Logout.

Bây giờ, rõ ràng là mỗi chức năng độc lập của sản phẩm đang thử nghiệm có thể được gọi là một tính năng khi chúng ta nói về Cucumber. Cách tốt nhất sau này khi bạn bắt đầu thử nghiệm, đó là trước khi lấy các tập lệnh thử nghiệm, chúng ta nên xác định các tính năng sẽ được thử nghiệm.

Một tính năng thường chứa danh sách các tình huống sẽ được kiểm tra cho tính năng đó. Một tệp trong đó chúng tôi lưu trữ các tính năng, mô tả về các tính năng và kịch bản sẽ được kiểm tra được gọi làFeature File. Chúng ta sẽ xem thêm về các tập tin tính năng trong chương sau.

Từ khóa để đại diện cho một tính năng đang được thử nghiệm trong Gherkins là "Tính năng". Phương pháp hay nhất được đề xuất là viết một mô tả nhỏ về đối tượng địa lý bên dưới tiêu đề đối tượng địa lý trong tệp đối tượng địa lý. Điều này cũng sẽ đáp ứng nhu cầu của một tài liệu tốt.

Thí dụ

Feature - Chức năng đăng nhập cho một trang mạng xã hội.

Người dùng sẽ có thể đăng nhập vào trang mạng xã hội nếu tên người dùng và mật khẩu chính xác.

Người dùng sẽ được hiển thị thông báo lỗi nếu tên người dùng và mật khẩu không chính xác.

Người dùng sẽ được điều hướng đến trang chủ, nếu tên người dùng và mật khẩu chính xác.

Tệp tính năng

Tệp, trong đó các bài kiểm tra Cucumber được viết, được gọi là feature files. Chúng tôi khuyên rằng nên có một tệp tính năng riêng biệt, cho mỗi tính năng đang được thử nghiệm. Phần mở rộng của tệp tính năng cần phải là “.feature”.

Người ta có thể tạo bao nhiêu tệp tính năng nếu cần. Để có một cấu trúc có tổ chức, mỗi đối tượng phải có một tệp đặc trưng.

Ví dụ -

Sr.No Đặc tính Tên tệp tính năng
1 Đăng nhập người dùng userLogin.feature
2 Chia sẻ bài đăng sharePost.feature
3 Tạo tài khoản createAccount.feature
4 Xóa tài khoản deleteAccount.feature

Quy ước đặt tên được sử dụng cho tên đối tượng, tên tệp đối tượng tùy thuộc vào sự lựa chọn của từng cá nhân. Không có quy tắc cơ bản nào trong Cucumber về tên.

Một tệp tính năng đơn giản bao gồm các từ khóa / phần sau:

  • Feature - Tên của đối tượng địa lý đang thử nghiệm.

  • Description (tùy chọn) - Mô tả về tính năng đang thử nghiệm.

  • Scenario - Kịch bản thử nghiệm là gì.

  • Given - Điều kiện tiên quyết trước khi các bước kiểm tra được thực thi.

  • When - Điều kiện cụ thể cần phù hợp để thực hiện bước tiếp theo.

  • Then - Điều gì sẽ xảy ra nếu điều kiện được đề cập trong WHEN được thỏa mãn.

Thí dụ

Feature - Người dùng đăng nhập trên trang mạng xã hội.

Người dùng sẽ có thể đăng nhập vào trang mạng xã hội khi tên người dùng và mật khẩu chính xác.

Người dùng sẽ được hiển thị thông báo lỗi khi tên người dùng và mật khẩu không chính xác.

Người dùng sẽ được điều hướng đến trang chủ nếu tên người dùng và mật khẩu chính xác.

Outline - Chức năng đăng nhập cho một trang mạng xã hội.

Người dùng nhất định điều hướng đến Facebook. Khi tôi nhập Tên người dùng là "<tên người dùng>" và Mật khẩu là "<mật khẩu>". Sau đó, đăng nhập sẽ không thành công.

| username  | password  |
| username1 | password1 |

* AND từ khóa được sử dụng để hiển thị sự kết hợp giữa hai điều kiện. AND có thể được sử dụng với bất kỳ từ khóa nào khác như GIVEN, WHENTHEN.

Không có chi tiết logic nào được ghi trong tệp tính năng.

Định nghĩa các bước

Chúng tôi đã chuẩn bị sẵn tệp tính năng của mình với các kịch bản thử nghiệm được xác định. Tuy nhiên, đây không phải là công việc hoàn thành được thực hiện. Cucumber không thực sự biết đoạn mã nào sẽ được thực thi cho bất kỳ tình huống cụ thể nào được nêu trong một tệp tính năng.

Điều này cho thấy sự cần thiết của một tệp trung gian - Định nghĩa bước. Tệp định nghĩa các bước lưu trữ ánh xạ giữa mỗi bước của kịch bản được xác định trong tệp tính năng với một mã chức năng sẽ được thực thi.

Vì vậy, bây giờ khi Cucumber thực hiện một bước của kịch bản được đề cập trong tệp tính năng, nó sẽ quét tệp định nghĩa bước và tìm ra hàm nào sẽ được gọi.

Ví dụ về tệp định nghĩa bước

public void goToFacebook() { 
   driver = new FirefoxDriver(); 
   driver.navigate().to("https://www.facebook.com/"); 
} 
@When "^user logs in using Username as \"([^\"]*)\" and Password as \"([^\"]*)\"$" public void I_enter_Username_as_and_Password_as(String arg1, String arg2) { driver.findElement(By.id("email")).sendKeys(arg1); driver.findElement(By.id("pass")).sendKeys(arg2); driver.findElement(By.id("u_0_v")).click(); } @Then"^login should be unsuccessful$" 
public void validateRelogin() { 
   if(driver.getCurrentUrl().equalsIgnoreCase(
      "https://www.facebook.com/login.php?login_attempt=1&lwv=110")){ 
         System.out.println("Test Pass");
   } else { 
      System.out.println("Test Failed"); 
   } 
   driver.close(); 
}

Vì vậy, với mỗi chức năng, bất kỳ mã nào bạn muốn thực thi với mỗi bước kiểm tra (tức là GIVEN / THEN / WHEN), bạn có thể viết nó trong tệp Step Definition. Đảm bảo rằng mã / chức năng đã được xác định cho từng bước.

Hàm này có thể là các hàm Java, nơi chúng ta có thể sử dụng cả lệnh Java và Selenium để tự động hóa các bước kiểm tra của mình.

Scenariolà một trong những cấu trúc cốt lõi của Gherkin. Mọi kịch bản đều bắt đầu bằng từ khóa “Kịch bản:” (hoặc một kịch bản được bản địa hóa) và theo sau là tiêu đề kịch bản tùy chọn. Mỗi tính năng có thể có một hoặc nhiều kịch bản và mọi kịch bản đều bao gồm một hoặc nhiều bước. Một ví dụ rất đơn giản về kịch bản có thể là:

Scenario - Xác minh chức năng trợ giúp.

Cho phép người dùng điều hướng đến Facebook.

Khi người dùng nhấp vào Trợ giúp, sau đó trang Trợ giúp sẽ mở ra.

Hãy xem xét một trường hợp, trong đó chúng ta cần thực hiện một kịch bản thử nghiệm nhiều lần. Giả sử, chúng ta cần đảm bảo rằng chức năng đăng nhập đang hoạt động cho tất cả các loại chủ sở hữu đăng ký. Điều đó yêu cầu thực hiện kịch bản chức năng đăng nhập nhiều lần. Sao chép, dán các bước tương tự để chỉ thực thi lại mã, có vẻ không phải là một ý tưởng thông minh. Đối với điều này, Gherkin cung cấp thêm một cấu trúc, đó là phác thảo kịch bản.

Đề cương kịch bản tương tự như cấu trúc kịch bản; sự khác biệt duy nhất là cung cấp nhiều đầu vào. Như bạn có thể thấy trong ví dụ sau, trường hợp thử nghiệm vẫn giữ nguyên và không thể lặp lại. Ở phía dưới, chúng tôi đã cung cấp nhiều giá trị đầu vào cho các biến “Tên người dùng” và “Mật khẩu”. Trong khi chạy kiểm tra thực tế, Cucumber sẽ thay thế biến bằng các giá trị đầu vào được cung cấp và nó sẽ thực hiện kiểm tra. Khi pass-1 đã được thực thi, kiểm tra sẽ chạy lại lần lặp thứ hai với một giá trị đầu vào khác. Biến hoặc trình giữ chỗ như vậy có thể được biểu diễn bằng ”<>” trong khi đề cập với các câu lệnh gherkin.

Thí dụ

Scenario Outline- Chức năng đăng nhập cho một trang mạng xã hội. Người dùng nhất định điều hướng đến Facebook.

Khi người dùng đăng nhập bằng Tên người dùng là "<tên người dùng>" và Mật khẩu là "<mật khẩu>" thì việc đăng nhập sẽ thành công.

| username | password  | 
| user1    | password1 | 
| user2    | password2 |

Có một số mẹo và thủ thuật để xác định các tình huống Cucumber một cách thông minh.

  • Mỗi bước cần được xác định rõ ràng, để không tạo ra bất kỳ sự nhầm lẫn nào cho người đọc.

  • Không lặp lại kịch bản thử nghiệm, nếu cần sử dụng phác thảo kịch bản để thực hiện lặp lại.

  • Phát triển một bước thử nghiệm theo cách mà nó có thể được sử dụng trong nhiều tình huống và phác thảo kịch bản.

  • Trong chừng mực có thể, hãy giữ cho mỗi bước hoàn toàn độc lập. Ví dụ: “Cho biết người dùng đã đăng nhập”. Điều này có thể được chia thành hai bước

    • Cho người dùng nhập tên người dùng.
    • Nhấp vào đăng nhập.

Annotationlà một văn bản được xác định trước, mang một ý nghĩa cụ thể. Nó cho phép trình biên dịch / thông dịch viên biết, những gì nên làm khi thực thi. Cucumber có một số chú thích sau:

  • Given -

    • Nó mô tả điều kiện tiên quyết để kiểm tra được thực hiện.

    • Ví dụ - GIVEN Tôi là người dùng Facebook

  • When -

    • Nó xác định điểm kích hoạt cho bất kỳ thực thi kịch bản thử nghiệm nào.

    • Ví dụ - KHI tôi nhập "<tên người dùng>"

  • Then -

    • Sau đó, giữ kết quả mong đợi để thử nghiệm được thực hiện.

    • Ví dụ - THEN đăng nhập sẽ thành công.

  • And -

    • Nó cung cấp điều kiện AND logic giữa hai câu lệnh bất kỳ. AND có thể được sử dụng cùng với câu lệnh GIVEN, WHEN và THEN.

    • Ví dụ - KHI tôi nhập "<tên người dùng>" VÀ tôi nhập "<mật khẩu>" của mình

  • But -

    • Nó biểu thị điều kiện OR logic giữa hai câu lệnh bất kỳ. OR có thể được sử dụng cùng với câu lệnh GIVEN, WHEN và THEN.

    • Ví dụ - THEN đăng nhập sẽ thành công. NHƯNG không nên thiếu trang chủ.

  • Scenario -

    • Thông tin chi tiết về kịch bản trong bài kiểm tra cần được ghi lại sau từ khóa “Kịch bản:”

    • Ví dụ -

      Tình huống:

      GIVEN Tôi là người dùng Facebook

      KHI tôi nhập

      VÀ tôi nhập

      SAU ĐÓ đăng nhập sẽ thành công.

      NHƯNG không nên thiếu trang chủ.

  • Scenario Outline - (Sẽ được đề cập sau)

  • Examples - (Sẽ được đề cập sau)

  • Background -

    • Nền thường có hướng dẫn về những gì cần thiết lập trước khi chạy mỗi kịch bản. Tuy nhiên, nó được thực thi sau hook "Before" (sẽ được đề cập sau). Vì vậy, điều này là lý tưởng để được sử dụng cho mã khi chúng ta muốn thiết lập trình duyệt web hoặc chúng ta muốn thiết lập kết nối cơ sở dữ liệu.

      • Ví dụ -

        Lý lịch:

        Vào trang chủ Facebook.

Tình huống mẫu

Hãy tự động hóa một kịch bản để hiểu các chú thích tốt hơn.

Step 1

Tạo một Dự án thử nghiệm Maven có tên là AnnotationTest.

  • Đi tới Tệp → Mới → Khác → Maven → Dự án Maven → Tiếp theo.

  • Cung cấp Id nhóm (Id nhóm sẽ xác định duy nhất dự án của bạn trên tất cả các dự án).

  • Cung cấp Id cấu phần (Id cấu phần là tên của lọ không có phiên bản. Bạn có thể chọn bất kỳ tên nào ở dạng chữ thường).

  • Nhấp vào Kết thúc.

  • Mở pom.xml −

    • Đi tới trình khám phá gói ở phía bên trái của Eclipse.

    • Mở rộng dự án AnnotationTest.

    • Định vị tệp pom.xml.

    • Nhấp chuột phải và chọn tùy chọn, Mở bằng “Trình chỉnh sửa văn bản”.

  • Thêm phụ thuộc cho Selenium - Điều này sẽ cho biết Maven, những tệp jar Selenium nào sẽ được tải xuống từ kho lưu trữ trung tâm đến kho lưu trữ cục bộ.

    • Mở pom.xml đang ở chế độ chỉnh sửa, tạo thẻ phụ thuộc (<dependencies> </dependencies>), bên trong thẻ dự án.

    • Bên trong thẻ phụ thuộc, hãy tạo thẻ phụ thuộc (<dependency> </dependency>).

    • Cung cấp thông tin sau trong thẻ phụ thuộc.

<dependency> 
   <groupId>org.seleniumhq.selenium</groupId> 
   <artifactId>selenium-java</artifactId> 
   <version>2.47.1</version> 
</dependency>
  • Thêm phụ thuộc cho Cucumber-Java - Điều này sẽ cho biết Maven, tệp Cucumber nào sẽ được tải xuống từ kho lưu trữ trung tâm đến kho lưu trữ cục bộ.

    • Tạo thêm một thẻ phụ thuộc.

    • Cung cấp thông tin sau trong thẻ phụ thuộc.

<dependency> 
   <groupId>info.cukes</groupId> 
   <artifactId>cucumber-java</artifactId> 
   <version>1.0.2</version> 
   <scope>test</scope> 
</dependency>
  • Thêm phụ thuộc cho Cucumber-JUnit - Điều này sẽ cho biết Maven, những tệp Cucumber JUnit nào sẽ được tải xuống từ kho lưu trữ trung tâm đến kho lưu trữ cục bộ.

    • Tạo thêm một thẻ phụ thuộc.

    • Cung cấp thông tin sau trong thẻ phụ thuộc.

<dependency> 
   <groupId>info.cukes</groupId> 
   <artifactId>cucumber-junit</artifactId> 
   <version>1.0.2</version> 
   <scope>test</scope> 
</dependency>
  • Thêm phụ thuộc cho JUnit - Điều này sẽ cho biết Maven, tệp JUnit nào sẽ được tải xuống từ kho lưu trữ trung tâm đến kho lưu trữ cục bộ.

    • Tạo thêm một thẻ phụ thuộc.

    • Cung cấp thông tin sau trong thẻ phụ thuộc.

<dependency> 
   <groupId>junit</groupId> 
   <artifactId>junit</artifactId> 
   <version>4.10</version> 
   <scope>test</scope> 
</dependency>
  • Xác minh mã nhị phân.

    • Khi pom.xml được chỉnh sửa thành công, hãy lưu nó.

    • Đi tới Dự án → Sạch sẽ - Quá trình này sẽ mất vài phút.

Step 2

Tạo một gói có tên Annotation bên dưới src/test/java

  • Chọn dự án mới tạo.

  • Nhấp chuột phải và chọn 'Mới'.

  • Chọn tùy chọn là 'Gói'.

  • Đặt tên nó là 'Chú thích'.

  • Lưu nó.

Step 3

Tạo một tệp tính năng có tên annotation.feature.

  • Chọn và nhấp chuột phải vào đường viền gói.

  • Nhấp vào tệp 'Mới'.

  • Đặt tên cho tệp như outline.feature.

  • Viết văn bản sau vào tệp và lưu nó.

Feature: annotation 
#This is how background can be used to eliminate duplicate steps 

Background: 
   User navigates to Facebook Given 
   I am on Facebook login page 

#Scenario with AND 
Scenario: 
   When I enter username as "TOM"
   And I enter password as "JERRY" 
   Then Login should fail 

#Scenario with BUT 
Scenario: 
   When I enter username as "TOM" 
   And I enter password as "JERRY" 
   Then Login should fail 
   But Relogin option should be available

Step 4

Tạo tệp định nghĩa bước.

  • Chọn và nhấp chuột phải vào đường viền gói.

  • Nhấp vào tệp 'Mới'.

  • Đặt tên tệp là annotation.java

  • Viết văn bản sau vào tệp và lưu nó.

package Annotation; 

import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.firefox.FirefoxDriver; 

import cucumber.annotation.en.Given; 
import cucumber.annotation.en.Then; 
import cucumber.annotation.en.When; 

public class annotation { 
   WebDriver driver = null; 
   @Given("^I am on Facebook login page$") public void goToFacebook() { driver = new FirefoxDriver(); driver.navigate().to("https://www.facebook.com/"); } @When("^I enter username as \"(.*)\"$") 
   public void enterUsername(String arg1) {   
      driver.findElement(By.id("email")).sendKeys(arg1); 
   }
	
   @When ("^I enter password as \"(.*)\"$") public void enterPassword(String arg1) { driver.findElement(By.id("pass")).sendKeys(arg1); driver.findElement(By.id("u_0_v")).click(); } @Then("^Login should fail$") 
   public void checkFail() {  
      if(driver.getCurrentUrl().equalsIgnoreCase(
         "https://www.facebook.com/login.php?login_attempt=1&lwv=110")){ 
            System.out.println("Test1 Pass"); 
      } else { 
         System.out.println("Test1 Failed"); 
      } 
      driver.close(); 
   } 
	
   @Then("^Relogin option should be available$") 
   public void checkRelogin() { 
      if(driver.getCurrentUrl().equalsIgnoreCase(
         "https://www.facebook.com/login.php?login_attempt=1&lwv=110")){ 
            System.out.println("Test2 Pass"); 
      } else { 
         System.out.println("Test2 Failed"); 
      } 
      driver.close(); 
   }
}

Step 5

Tạo tệp lớp người chạy.

  • Chọn và nhấp chuột phải vào đường viền gói.

  • Nhấp vào tệp 'Mới'.

  • Đặt tên cho tệp, chẳng hạn như runTest.java

  • Viết văn bản sau vào tệp và lưu nó.

package Annotation; 

import org.junit.runner.RunWith; 
import cucumber.junit.Cucumber; 

@RunWith(Cucumber.class) 
@Cucumber.Options(format = {"pretty", "html:target/cucumber"})
 
public class runTest { 
}

Step 6

Chạy thử nghiệm bằng cách sử dụng tùy chọn -

  • Chọn tệp runTest.java từ trình khám phá gói.

  • Nhấp chuột phải và chọn tùy chọn ‘Run as’

  • Chọn thử nghiệm JUnit.

Bạn sẽ quan sát thấy những điều sau khi chạy tệp lớp này:

  • Facebook mở trong phiên bản trình duyệt web Firefox mới.

  • TOM sẽ được chuyển như một đầu vào cho trường tên người dùng.

  • JERRY sẽ được chuyển làm đầu vào cho trường mật khẩu.

  • Đăng nhập sẽ được nhấp vào.

  • Thông báo sẽ được hiển thị trên trình duyệt về việc đăng nhập không thành công.

  • Trong bảng điều khiển, bạn sẽ thấy "Test Pass" được in

  • Kết quả bước 1. đến 5. Sẽ được thực thi lại cho tên người dùng là "" và mật khẩu là "".

Scenario outlinevề cơ bản thay thế các từ khóa / biến bằng giá trị từ bảng. Mỗi hàng trong bảng được coi là một kịch bản.

Hãy tiếp tục với ví dụ tương tự về tính năng đăng nhập Facebook. Cho đến nay, chúng tôi đã thực hiện một tình huống: Sau khi cung cấp đúng tên người dùng, đăng nhập thành công. Bây giờ, giả sử chúng ta muốn kiểm tra xem đăng nhập có thành công cho cả ba loại đầu vào có thể có, đó là tên người dùng, địa chỉ email hoặc số điện thoại hay không. Để đạt được điều này, chúng ta sẽ cần viết ba kịch bản khác nhau, trong đó mỗi kịch bản sẽ khác nhau với loại đầu vào, đăng nhập thành công. Trong trường hợp này, các tình huống sẽ giống như sau.

Scenario:

Cho phép người dùng điều hướng đến Facebook

Khi tôi nhập đúng tên người dùng và mật khẩu

Sau đó, đăng nhập sẽ thành công

Scenario:

Cho phép người dùng điều hướng đến Facebook

Khi tôi nhập đúng địa chỉ email và mật khẩu

Sau đó, đăng nhập sẽ thành công

Scenario:

Cho phép người dùng điều hướng đến Facebook

Khi tôi nhập đúng số điện thoại và mật khẩu

Sau đó, đăng nhập sẽ thành công

Ở đây, nếu chúng ta quan sát kỹ, đối với ba trường hợp trên: các câu lệnh giống nhau, chỉ có tham số đầu vào (tên người dùng / địa chỉ email / số điện thoại) là thay đổi. Đó là lúc tầm quan trọng của phác thảo kịch bản trở thành bức tranh.

Khi chúng tôi xác định bất kỳ kịch bản nào với phác thảo kịch bản, chúng tôi có thể chỉ định một kịch bản thử nghiệm và ở cuối kịch bản, chúng tôi có thể cung cấp một số đầu vào. Kịch bản sẽ được thực thi nhiều lần với số lượng đầu vào được cung cấp.

Thí dụ

Hãy tạo một ví dụ về phác thảo kịch bản -

Step 1 - Tạo một Maven Test Project có tên là ScenarioOutlineTest

  • Đi tới Tệp → Mới → Khác → Maven → Dự án Maven → Tiếp theo.

  • Cung cấp Id nhóm (Id nhóm sẽ xác định duy nhất dự án của bạn trên tất cả các dự án).

  • Cung cấp Id cấu phần (Id cấu phần là tên của lọ không có phiên bản. Bạn có thể chọn bất kỳ tên nào ở dạng chữ thường).

  • Nhấp vào Kết thúc.

  • Mở pom.xml -

    • Đi tới trình khám phá gói ở phía bên trái của Eclipse.

    • Mở rộng dự án CucumberTest.

    • Định vị tệp pom.xml.

    • Nhấp chuột phải và chọn tùy chọn, Mở bằng “Trình chỉnh sửa văn bản”.

  • Thêm phụ thuộc cho Selenium - Điều này sẽ cho biết Maven, những tệp jar Selenium nào sẽ được tải xuống từ kho lưu trữ trung tâm đến kho lưu trữ cục bộ.

    • Mở pom.xml đang ở chế độ chỉnh sửa, tạo thẻ phụ thuộc (<dependencies> </dependencies>), bên trong thẻ dự án.

    • Bên trong thẻ phụ thuộc, hãy tạo thẻ phụ thuộc (<dependency> </dependency>).

    • Cung cấp thông tin sau trong thẻ phụ thuộc.

<dependency> 
   <groupId>org.seleniumhq.selenium</groupId> 
   <artifactId>selenium-java</artifactId> 
   <version>2.47.1</version> 
</dependency>
  • Thêm phụ thuộc cho Cucumber-Java: Điều này sẽ cho biết Maven, những tệp Cucumber nào sẽ được tải xuống từ kho lưu trữ trung tâm đến kho lưu trữ cục bộ.

    • Tạo thêm một thẻ phụ thuộc.

    • Cung cấp thông tin sau trong thẻ phụ thuộc.

<dependency> 
   <groupId>info.cukes</groupId> 
   <artifactId>cucumber-java</artifactId> 
   <version>1.0.2</version> 
   <scope>test</scope> 
</dependency>
  • Thêm phụ thuộc cho Cucumber-JUnit: Điều này sẽ cho biết Maven, những tệp Cucumber JUnit nào sẽ được tải xuống từ kho lưu trữ trung tâm đến kho lưu trữ cục bộ.

    • Tạo thêm một thẻ phụ thuộc.

    • Cung cấp thông tin sau trong thẻ phụ thuộc.

<dependency> 
   <groupId>info.cukes</groupId> 
   <artifactId>cucumber-junit</artifactId> 
   <version>1.0.2</version> 
   <scope>test</scope> 
</dependency>
  • Thêm phụ thuộc cho JUnit - Điều này sẽ cho biết Maven, tệp JUnit nào sẽ được tải xuống từ kho lưu trữ trung tâm đến kho lưu trữ cục bộ.

    • Tạo thêm một thẻ phụ thuộc.

    • Cung cấp thông tin sau trong thẻ phụ thuộc.

<dependency> 
   <groupId>junit</groupId> 
   <artifactId>junit</artifactId> 
   <version>4.10</version> 
   <scope>test</scope> 
</dependency>
  • Thêm phụ thuộc cho JUnit - Điều này sẽ cho biết Maven, tệp JUnit nào sẽ được tải xuống từ kho lưu trữ trung tâm đến kho lưu trữ cục bộ.

    • Tạo thêm một thẻ phụ thuộc.

    • Cung cấp thông tin sau trong thẻ phụ thuộc.

<dependency> 
   <groupId>junit</groupId> 
   <artifactId>junit</artifactId> 
   <version>4.10</version> 
   <scope>test</scope> 
</dependency>
  • Xác minh mã nhị phân.

    • Khi pom.xml được chỉnh sửa thành công, hãy lưu nó.

    • Đi tới Dự án → Sạch sẽ - Quá trình này sẽ mất vài phút.

Step 2 - Tạo một gói có tên "phác thảo" dưới src/test/java

Step 3 - Tạo một tệp tính năng có tên “outline.feature”

  • Chọn và nhấp chuột phải vào đường viền gói.

  • Nhấp vào tệp 'Mới'.

  • Đặt tên tệp chẳng hạn như “outline.feature”

    • Viết văn bản sau vào tệp và lưu nó.

      Feature - Đề cương kịch bản

      Scenario Outline - Chức năng đăng nhập cho một trang mạng xã hội.

      Cho phép người dùng điều hướng đến Facebook

      Khi tôi nhập Tên người dùng là "<tên người dùng>" và Mật khẩu là "<mật khẩu>"

      Sau đó đăng nhập sẽ không thành công

Example -

| username  | password  | 
| username1 | password1 | 
| username2 | password2 |

Note- Ở đây, chú thích ví dụ mô tả phạm vi đầu vào sẽ được cung cấp khi thực thi kịch bản. Kịch bản kiểm tra sẽ được thực hiện cho mỗi đầu vào được cung cấp. Vì vậy, trong ví dụ đã cho, kịch bản thử nghiệm sẽ được thực hiện ba lần.

Step 4 - Tạo tệp định nghĩa bước.

  • Chọn và nhấp chuột phải vào đường viền gói.

  • Nhấp vào tệp 'Mới'.

  • Đặt tên tệp là stepdefinition.java

  • Viết văn bản sau vào tệp và lưu nó.

package Outline;
 
import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.firefox.FirefoxDriver; 

import cucumber.annotation.en.Given; 
import cucumber.annotation.en.Then; 
import cucumber.annotation.en.When; 

public class stepdefinition { 
   WebDriver driver = null; 
	
   @Given("^user navigates to facebook$") 
   public void goToFacebook() { 
      driver = new FirefoxDriver(); 
      driver.navigate().to("https://www.facebook.com/"); 
   } 
	
   @When("^I enter Username as \"([^\"]*)\" and Password as \"([^\"]*)\"$") public void I_enter_Username_as_and_Password_as(String arg1, String arg2) { driver.findElement(By.id("email")).sendKeys(arg1); driver.findElement(By.id("pass")).sendKeys(arg2); driver.findElement(By.id("u_0_v")).click(); } @Then("^login should be unsuccessful$") 
   public void validateRelogin() { 
      if(driver.getCurrentUrl().equalsIgnoreCase(
      "https://www.facebook.com/login.php?login_attempt=1&lwv=110")){
         System.out.println("Test Pass"); 
      } else { 
         System.out.println("Test Failed"); 
      } 
      driver.close(); 
   }    
}

Note- Trong đoạn mã trên, chúng ta phải xác định một hàm có hai đối số đầu vào: một tên người dùng và một đối số khác sẽ dành cho mật khẩu. Vì vậy, đối với mỗi bộ đầu vào được cung cấp trong thẻ ví dụ, Bộ GIVEN, WHEN và THEN sẽ được thực thi.

Step 5 - Tạo tệp lớp á hậu.

  • Chọn và nhấp chuột phải vào đường viền gói.

  • Nhấp vào tệp 'Mới'.

  • Đặt tên tệp chẳng hạn như runTest.java

  • Viết văn bản sau vào tệp và lưu nó.

package Outline; 

import org.junit.runner.RunWith; 
import cucumber.junit.Cucumber; 

@RunWith(Cucumber.class) 
@Cucumber.Options(format = {"pretty", "html:target/cucumber"})

public class runTest { }
  • Chạy thử nghiệm bằng cách sử dụng tùy chọn -

    • Lựa chọn runTest.java tệp từ trình khám phá gói.

    • Nhấp chuột phải và chọn tùy chọn ‘Run as’.

    • Chọn thử nghiệm JUnit.

Bạn sẽ quan sát thấy những điều sau đây khi bạn chạy tệp lớp này

  • Facebook mở trong phiên bản trình duyệt web Firefox mới.

  • Tên người dùng1 và mật khẩu1 sẽ được chuyển làm đầu vào cho trường tên người dùng và mật khẩu.

  • Đăng nhập sẽ được nhấp vào.

  • Thông báo sẽ được hiển thị trên trình duyệt về việc đăng nhập không thành công.

  • Trong bảng điều khiển, bạn sẽ thấy “Test Pass” được in.

  • Kết quả bước 1 đến 5 sẽ được thực hiện lại cho tên người dùng2 và mật khẩu2.

Tóm lại, khi kịch bản không thay đổi nhưng chỉ giá trị dữ liệu bị thay đổi, bạn nên sử dụng bảng dữ liệu phác thảo kịch bản.

Nó trông đơn giản khi chúng ta chỉ có một, hai hoặc có thể là năm tình huống trong một tệp tính năng. Tuy nhiên, trong cuộc sống thực thì điều đó không xảy ra. Đối với mỗi tính năng đang được thử nghiệm, chúng tôi có thể có 10, 20 hoặc có thể có nhiều tình huống hơn trong một tệp tính năng duy nhất. Chúng có thể đại diện cho mục đích khác nhau (Kiểm tra khói / Kiểm tra hồi quy), triển vọng khác nhau (Nhà phát triển / QA / BA), trạng thái khác nhau (Sẵn sàng thực hiện / Đang tiến hành), v.v. Làm thế nào để quản lý việc thực thi cho một khối lượng lớn như vậy?

Đối với điều này, Cucumber đã cung cấp một cách để tổ chức thực thi kịch bản của bạn bằng cách sử dụng các thẻ trong tệp tính năng. Chúng ta có thể xác định từng tình huống bằng một thẻ hữu ích. Sau đó, trong tệp chạy, chúng ta có thể quyết định thẻ cụ thể (và tương tự như (các) kịch bản) mà chúng ta muốn Cucumber thực thi. Thẻ bắt đầu bằng “@”. Sau “@”, bạn có thể có bất kỳ văn bản liên quan nào để xác định thẻ của mình. Hãy hiểu điều này với một ví dụ.

Giả sử, có hai hoặc nhiều tình huống trong một tệp tính năng. Chúng tôi chỉ muốn thực hiện một kịch bản như một phần của thử nghiệm khói. Vì vậy, điều đầu tiên là xác định kịch bản đó và thứ hai là gắn thẻ nó bằng văn bản “@SmokeTest” ở đầu kịch bản. Hãy cùng nhìn sâu vào nó -

Step 1 - Tạo một dự án Maven có tên là cucumberTag.

Step 2- Tạo một gói có tên cucumberTag Dưới src/test/java

Step 3- Tạo một tệp tính năng có tên cucumberTag.feature.

Viết văn bản sau vào tệp và lưu nó. Tệp tính năng này chứa hai tình huống trong đó chỉ một tình huống được đánh dấu làSmokeTest nhãn.

Feature - Thẻ dưa chuột

Scenario Outline - Chức năng đăng nhập cho một trang mạng xã hội.

Cho phép người dùng điều hướng đến Facebook

Khi tôi nhập Tên người dùng là "<tên người dùng>" và Mật khẩu là "<mật khẩu>"

Sau đó đăng nhập sẽ không thành công

Ví dụ

| username  | password  | 
| username1 | password1 | 
| username2 | password2 |

#following kịch bản đã được gắn thẻ là SmokeTest và điều này sẽ được thực thi. @SmokeTest

Scenario:

Cho phép người dùng điều hướng đến Facebook

Khi tôi nhập Tên người dùng là "<>" và Mật khẩu là "<>"

Sau đó, người dùng sẽ được chuyển hướng để thử đăng nhập lại

Step 4 - Tạo tệp định nghĩa bước.

  • Chọn và nhấp chuột phải vào đường viền gói.

  • Nhấp vào tệp 'Mới'.

  • Đặt tên cho tệp như cucumberTag.java

  • Viết văn bản sau vào tệp và lưu nó.

package cucumberTag;
 
import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.firefox.FirefoxDriver; 

import cucumber.annotation.en.Given; 
import cucumber.annotation.en.Then; 
import cucumber.annotation.en.When; 

public class cucumberTag { 
   WebDriver driver = null; 
	
   @Given("^user navigates to facebook$") public void goToFacebook() { driver = new FirefoxDriver(); driver.navigate().to("https://www.facebook.com/"); } @When("^I enter Username as \"([^\"]*)\" and Password as \"([^\"]*)\"$") 
   public void I_enter_Username_as_and_Password_as(String arg1, String arg2) {
      driver.findElement(By.id("email")).sendKeys(arg1);
      driver.findElement(By.id("pass")).sendKeys(arg2);
      driver.findElement(By.id("u_0_v")).click(); 
   } 
	
   @Then("^login should be unsuccessful$") public void validateRelogin() { if(driver.getCurrentUrl().equalsIgnoreCase( "https://www.facebook.com/login.php?login_attempt=1&lwv=110")){ System.out.println("Test Pass"); } else { System.out.println("Test Failed"); } driver.close(); } @Then("^User should be redirected to login retry$") 
   public void loginRetry() { 
      if(driver.getCurrentUrl().equalsIgnoreCase(
         "https://www.facebook.com/login.php?login_attempt=1&lwv=110")){ 
            System.out.println("Test Pass"); 
      } else { 
         System.out.println("Test Failed"); 
      } 
      driver.close(); 
   } 
}

Step 5 - Tạo tệp lớp á hậu.

  • Tạo một lớp người chạy có tên là runTest.java bên trong gói.

  • Viết đoạn mã sau.

  • Lưu các tập tin.

package cucumberTag; 

import org.junit.runner.RunWith; 
import cucumber.junit.Cucumber; 

@RunWith(Cucumber.class) 
@Cucumber.Options(format = {"pretty", "html:target/cucumber"}) 

public class runTest { }
  • Chạy tùy chọn kiểm tra.

  • Nhấp chuột phải và chọn tùy chọn ‘Run as’.

  • Chọn thử nghiệm JUnit.

Bạn sẽ quan sát những điều sau đây, khi bạn chạy tệp lớp này.

  • Facebook mở trong phiên bản trình duyệt web Firefox mới.

  • Không có giá trị nào sẽ được cung cấp cho tên người dùng và trường mật khẩu.

  • Đăng nhập sẽ được nhấp vào.

  • Trang thử lại đăng nhập sẽ được tải.

Không có giới hạn trong việc xác định các thẻ trong tệp tính năng. Dựa trên nhu cầu của bạn, bạn có thể lấy ra các thẻ được sử dụng và các kịch bản sẽ được thực thi.

Chủ yếu có hai loại thẻ -

  • Default tag- Thẻ mặc định có ý nghĩa xác định trước của chúng. Ví dụ @ Dev, @ Bỏ qua

  • Custom tag - Thẻ tùy chỉnh cung cấp cho bạn sự linh hoạt hoàn toàn để chọn văn bản thích hợp để xác định thẻ của bạn.

Thẻ cũng có thể được xác định ở cấp độ tính năng. Khi bạn xác định thẻ ở cấp tính năng, nó đảm bảo rằng tất cả các tình huống trong tệp tính năng đó sẽ kế thừa thẻ đó. Tùy thuộc vào bản chất của tình huống, chúng ta có thể sử dụng nhiều hơn một thẻ cho một tính năng. Bất cứ khi nào Cucumber tìm thấy một lệnh gọi thích hợp, một kịch bản cụ thể sẽ được thực thi.

Dưa chuột cũng cung cấp một cách để đảo ngược lựa chọn các thẻ. Hãy xem xét rằng trong số 25 tình huống đã xác định, 10 tình huống được đánh dấu là thử nghiệm khói. Chúng tôi được yêu cầu chỉ thực hiện các kịch bản kiểm tra hồi quy.

Đối với điều này, chúng ta có thể sử dụng “~” trong lớp Á hậu JUnit để loại trừ kịch bản thử nghiệm khói. Nó sẽ giống như sau.

@RunWith(Cucumber.class) 
@Cucumber.Options(format = {"pretty", "html:target/cucumber"}, 
   tags = {"~@SmokeTest"})
	
public class runTest { }

Trong khi xác định nhiều thẻ, chúng ta cũng có thể xác định logic hoặc / và logic và hoạt động.

  • Định nghĩa logic hoặc trong lớp người chạy - @dev,@wip - Nó nói rằng các kịch bản khớp với bất kỳ thẻ nào trong số này cần được thực thi.

  • Định nghĩa logic hoặc trong lớp người chạy - [@dev,~@wip] − Nó nói rằng các kịch bản khớp với cả hai thẻ này cần được thực thi.

Trong khi làm việc về tự động hóa, chúng tôi có thể gặp phải nhiều tình huống khác nhau. Mỗi kịch bản mang một ý nghĩa và nhu cầu khác nhau.

Ngay từ đầu, chúng tôi đã lấy một ví dụ về chức năng đăng nhập cho một trang mạng xã hội, nơi chúng tôi chỉ có hai tham số đầu vào được chuyển. Hãy nghĩ về một số khả năng khác. Còn chức năng “Đăng ký người dùng mới” thì sao? Thông thường, thông số đầu vào có thể là gì khi đăng ký người dùng mới cho một trang mạng xã hội? Một cái gì đó như sau -

  • Tên tài khoản
  • Địa chỉ email
  • Password
  • Nhập lại mật khẩu
  • Birthdate
  • Gender
  • Số điện thoại

Feature - Đăng ký người dùng mới.

Xác minh rằng đăng ký người dùng mới không thành công sau khi chuyển các đầu vào không chính xác.

Vì tôi đang ở trên một trang đăng ký người dùng mới.

Khi tôi nhập tên người dùng và địa chỉ e-mail làm địa chỉ email và mật khẩu, và nhập lại mật khẩu là và Ngày sinh là và Giới tính là và số điện thoại thì đăng ký người dùng sẽ không thành công.

Thoạt nhìn có vẻ hơi lộn xộn. Vì vậy, có cách nào tốt hơn để quản lý khối lượng đầu vào như vậy không? Câu trả lời có thể là "Bảng dữ liệu". Bảng dữ liệu là một tập hợp dữ liệu đầu vào được cung cấp cho một thẻ. Thẻ này có thể là GIVEN, WHEN hoặc THEN.

Hãy viết kịch bản trên với sự trợ giúp của bảng dữ liệu và nó sẽ giống như sau:

Vì tôi đang ở trang đăng ký người dùng mới

Khi tôi nhập dữ liệu hợp lệ trên trang

| Fields                 | Values              |
| First Name             | Tom                 |
| Last Name              | Kenny               |
| Email Address          | [email protected] |
| Re-enter Email Address | [email protected] |
| Password               | Password1           |
| Birthdate              | 01                  |

Sau đó, đăng ký người dùng sẽ thành công.

Thí dụ

Hãy tự động hóa một ví dụ về bảng dữ liệu.

Step 1 - Tạo một Maven Test Project có tên là “DataTableTest”.

  • Đi tới Tệp → Mới → Khác → Maven → Dự án Maven → Tiếp theo.

  • Cung cấp group Id (Id nhóm sẽ xác định dự án của bạn duy nhất trên tất cả các dự án).

  • Cung cấp artifact Id (Id tạo tác là tên của bình không có phiên bản. Bạn có thể chọn bất kỳ tên nào ở dạng chữ thường).

  • Nhấp vào Kết thúc.

  • Mở pom.xml -

    • Đi tới trình khám phá gói ở phía bên trái của Eclipse.

    • Mở rộng dự án CucumberTest.

    • Định vị tệp pom.xml.

    • Nhấp chuột phải và chọn tùy chọn, Mở bằng “Trình chỉnh sửa văn bản”.

  • Thêm phụ thuộc cho Selenium: Điều này sẽ cho biết Maven, những tệp jar Selenium nào sẽ được tải xuống từ kho lưu trữ trung tâm đến kho lưu trữ cục bộ.

    • Mở pom.xml đang ở chế độ chỉnh sửa, tạo thẻ phụ thuộc (<dependencies> </dependencies>), bên trong thẻ dự án.

    • Bên trong thẻ phụ thuộc, hãy tạo thẻ phụ thuộc. (<dependency> </dependency>).

    • Cung cấp thông tin sau trong thẻ phụ thuộc.

<dependency> 
   <groupId>org.seleniumhq.selenium</groupId> 
   <artifactId>selenium-java</artifactId> 
   <version>2.47.1</version> 
</dependency>
  • Thêm phụ thuộc cho Cucumber-Java - Điều này sẽ cho biết Maven, tệp Cucumber nào sẽ được tải xuống từ kho lưu trữ trung tâm đến kho lưu trữ cục bộ.

    • Tạo thêm một thẻ phụ thuộc.

    • Cung cấp thông tin sau trong thẻ phụ thuộc.

<dependency> 
   <groupId>info.cukes</groupId> 
   <artifactId>cucumber-java</artifactId> 
   <version>1.0.2</version> 
   <scope>test</scope> 
</dependency>
  • Thêm phụ thuộc cho Cucumber-JUnit - Điều này sẽ cho biết Maven, những tệp Cucumber JUnit nào sẽ được tải xuống từ kho lưu trữ trung tâm đến kho lưu trữ cục bộ.

    • Tạo thêm một thẻ phụ thuộc.

    • Cung cấp thông tin sau trong thẻ phụ thuộc.

<dependency> 
   <groupId>info.cukes</groupId> 
   <artifactId>cucumber-junit</artifactId> 
   <version>1.0.2</version> 
   <scope>test</scope> 
</dependency>
  • Thêm phụ thuộc cho JUnit - Điều này sẽ cho biết Maven, tệp JUnit nào sẽ được tải xuống từ kho lưu trữ trung tâm đến kho lưu trữ cục bộ.

    • Tạo thêm một thẻ phụ thuộc.

    • Cung cấp thông tin sau trong thẻ phụ thuộc

<dependency> 
   <groupId>junit</groupId> 
   <artifactId>junit</artifactId> 
   <version>4.10</version> 
   <scope>test</scope> 
</dependency>
  • Xác minh mã nhị phân.

    • Khi pom.xml được chỉnh sửa thành công, hãy lưu nó.

    • Đi tới Dự án → Sạch sẽ - Quá trình này sẽ mất vài phút.

Step 2 - Tạo một gói có tên dataTable Dưới src/test/java

Step 3 - Tạo tập tin Tính năng.

  • Tạo một tệp tính năng, có tên là dataTable.feature bên trong gói dataTable (xem phác thảo kịch bản phần để biết các bước chi tiết hơn).

  • Viết đoạn văn bản sau.

    Feature - Bảng dữ liệu

    Xác minh rằng đăng ký người dùng mới không thành công sau khi chuyển đầu vào không chính xác.

    Scenario:

    Vì tôi đang ở trang đăng ký người dùng mới

    Khi tôi nhập dữ liệu không hợp lệ trên trang

| Fields                 | Values              |
| First Name             | Tom                 |
| Last Name              | Kenny               |
| Email Address          | [email protected] |
| Re-enter Email Address | [email protected] |
| Password               | Password1           |
| Birthdate              | 01                  |

Sau đó, đăng ký người dùng sẽ không thành công

  • Lưu các tập tin.

Step 4 - Tạo tệp định nghĩa bước.

  • Tạo tệp định nghĩa bước có tên là 'dataTable.java' bên trong gói dataTable (xem phác thảo kịch bản phần để biết các bước chi tiết hơn).

  • Viết đoạn mã sau.

package dataTable; 

import java.util.List; 

import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.firefox.FirefoxDriver; 
import org.openqa.selenium.support.ui.Select;

import cucumber.annotation.en.Given; 
import cucumber.annotation.en.Then; 
import cucumber.annotation.en.When; 
import cucumber.table.DataTable; 

public class stepdefinition { 
   WebDriver driver = null;
	
   @Given("^I am on new user registration page$") public void goToFacebook() { //Intiate web browser instance. driver = new FirefoxDriver(); driver.navigate().to("https://www.facebook.com/"); } @When("^I enter invalid data on the page$") 
   public void enterData(DataTable table){ 
      //Initialize data table 
      List<list> data = table.raw();
      System.out.println(data.get(1).get(1)); 
      
      //Enter data
      driver.findElement(By.name("firstname")).sendKeys(data.get(1).get(1));
      driver.findElement(By.name("lastname")).sendKeys(data.get(2).get(1));
      driver.findElement(By.name("reg_email__")).sendKeys(data.get(3).get(1));     
      driver.findElement(By.name("reg_email_confirmation__")).
         sendKeys(data.get(4).get(1)); 
      driver.findElement(By.name("reg_passwd__")).sendKeys(data.get(5).get(1)); 
      
      Select dropdownB = new Select(driver.findElement(By.name("birthday_day"))); 
      dropdownB.selectByValue("15"); 
		
      Select dropdownM = new Select(driver.findElement(By.name("birthday_month")));
      dropdownM.selectByValue("6"); 
		
      Select dropdownY = new Select(driver.findElement(By.name("birthday_year")));
      dropdownY.selectByValue("1990"); 
		
      driver.findElement(By.className("_58mt")).click(); 
      // Click submit button driver.findElement(By.name("websubmit")).click(); 
   } 
	
   @Then("^User registration should be unsuccessful$") 
   public void User_registration_should_be_unsuccessful() {
      if(driver.getCurrentUrl().equalsIgnoreCase("https://www.facebook.com/")){
         System.out.println("Test Pass"); 
      } else { 
         System.out.println("Test Failed"); 
      } 
      driver.close(); 
   } 
}
  • Lưu các tập tin.

Step 5 - Tạo tệp lớp á hậu.

  • Tạo lớp chạy có tên là runTest.java bên trong gói.

  • Viết đoạn mã sau.

package dataTable; 

import org.junit.runner.RunWith; 
import cucumber.junit.Cucumber; 

@RunWith(Cucumber.class) 
@Cucumber.Options(format = {"pretty", "html:target/cucumber"})
 
public class runTest { }
  • Lưu các tập tin.

  • Chạy thử nghiệm bằng cách sử dụng tùy chọn

    • Chọn tệp runTest.java từ trình khám phá gói.

    • Nhấp chuột phải và chọn tùy chọn, Chạy dưới dạng.

    • Chọn thử nghiệm JUnit.

Bạn có thể quan sát những điều sau khi thực hiện thành công.

  • Trang web Facebook được tải.

  • Dữ liệu sẽ được nhập trên trang đăng ký.

  • Nút gửi sẽ được nhấp vào.

  • Chúng ta sẽ thấy rằng trang chủ sẽ không được hiển thị và "Test Pass" sẽ được viết trên bảng điều khiển.

Commentvề cơ bản là một đoạn mã dành cho mục đích tài liệu chứ không phải để thực thi. Có thể là tệp định nghĩa bước hoặc tệp tính năng, để làm cho nó dễ đọc và dễ hiểu hơn. Vì vậy, điều quan trọng là sử dụng / đặt bình luận ở những vị trí thích hợp trong tệp. Điều này cũng hữu ích trong khi gỡ lỗi mã. Các tệp tính năng của dưa chuột có thể có nhận xét ở bất kỳ đâu Để đưa ra nhận xét, chúng ta chỉ cần bắt đầu câu lệnh bằng dấu “#”.

Các ngôn ngữ lập trình khác nhau có các tiêu chuẩn khác nhau để xác định các bình luận. Hãy xem Cucumber xử lý nó như thế nào nhé.

  • Tệp định nghĩa bước - Nếu bạn đang sử dụng Java làm nền tảng, hãy đánh dấu nhận xét của bạn bằng “//”.

  • Tệp tính năng - Trong trường hợp tệp tính năng, chúng tôi chỉ cần đặt # trước khi bắt đầu nhận xét của bạn.

Thí dụ

Văn bản được đánh dấu trong chương trình đề cập đến các nhận xét trong mã.

Feature: annotation 

#This is how background can be used to eliminate duplicate steps 
Background: 
User navigates to Facebook 
Given I am on Facebook login page 

#Scenario with AND 
Scenario: 
When I enter username as "TOM" 
And I enter password as "JERRY" 
Then Login should fail 

#Scenario with BUT 
Scenario: 
When I enter username as "TOM" 
And I enter password as "JERRY" 
Then Login should fail 
But Relogin option should be available

Quả dưa chuột hookcho phép chúng tôi quản lý quy trình làm việc mã tốt hơn và giúp chúng tôi giảm bớt sự dư thừa mã. Chúng tôi có thể nói rằng đó là một bước không nhìn thấy được, cho phép chúng tôi thực hiện các kịch bản hoặc thử nghiệm của mình.

Để hiểu rõ hơn khái niệm này, chúng ta hãy lấy một ví dụ về tệp đặc trưng và tệp định nghĩa bước.

Phần được đánh dấu trong câu lệnh đã cho thực sự thực hiện công việc thiết lập webdriver và kết thúc phiên webdriver. Vì vậy, nó thực sự không liên quan đến bản chất của “Câu lệnh đưa ra”, và nó giống như một thiết lập cho bài kiểm tra hơn. Ngoài ra, nếu chúng ta nghĩ với một triển vọng rộng hơn, thì trong trường hợp có nhiều tình huống cho tính năng này, thiết lập và dọn dẹp webdriver này sẽ chạy với mỗi câu lệnh nhất định. Về mặt logic, việc thiết lập và dọn dẹp chỉ được thực thi một lần.

Vì vậy, để mang lại sự tối ưu hóa, móc có thể được sử dụng. Thông thường, chúng tôi sử dụng hai loại móc: móc “Trước” và móc “Sau”. Phương thức / chức năng / đoạn mã, được xác định trong móc Trước và Sau, luôn chạy, ngay cả khi kịch bản được thông qua hoặc thất bại.

Như tên cho thấy, trước khi hook được thực thi tốt trước bất kỳ tình huống thử nghiệm nào khác và sau khi hook được thực thi sau khi thực hiện tất cả các kịch bản.

Các móc chỉ được định nghĩa trong tệp định nghĩa bước.

Hãy tự động hóa một ví dụ về trước và sau hook.

Step 1 - Tạo dự án Maven dưới dạng hookTest, thêm phụ thuộc cần thiết trong pom.xml.

Step 2 - Tạo một gói Java có tên là hookTest dưới src/test/java

Step 3 - Tạo một tệp định nghĩa bước có tên là hookTest.java dưới gói.

package hookTest; 

import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.firefox.FirefoxDriver; 

import cucumber.annotation.en.Given; 
import cucumber.annotation.en.Then; 
import cucumber.annotation.en.When; 

public class hookTest {
   WebDriver driver = null; 
	
   @Before public void setUp(){ 
      driver = new FirefoxDriver(); 
   } 
	
   @Given("^user navigates to facebook$") 
   public void goToFacebook() { 
      driver.navigate().to("https://www.facebook.com/");
   } 
	
   @When("^I enter Username as \"([^\"]*)\" and Password as \"([^\"]*)\"$") public void I_enter_Username_as_and_Password_as(String arg1, String arg2) { driver.findElement(By.id("email")).sendKeys(arg1); driver.findElement(By.id("pass")).sendKeys(arg2); driver.findElement(By.id("u_0_v")).click(); } @Then("^login should be unsuccessful$") 
   public void validateRelogin() { 
      if(driver.getCurrentUrl().equalsIgnoreCase(
         "https://www.facebook.com/login.php?login_attempt=1&lwv=110")){ 
            System.out.println("Test Pass"); 
      } else { 
         System.out.println("Test Failed"); 
      } 
      driver.close(); 
   } 
	
   @After public void cleanUp(){ 
      driver.close(); 
   } 
}

Step 4 - Tạo một tệp tính năng có tên “hookTest.feature” trong gói.

Feature - Đề cương tình huống.

Scenario Outline - Kiểm tra móc

Cho phép người dùng điều hướng đến Facebook

Khi tôi nhập Tên người dùng là "<tên người dùng>" và Mật khẩu là "<mật khẩu>"

Sau đó đăng nhập sẽ không thành công

Ví dụ

| username  | password  | 
| username1 | password1 |

Step 5 - Tạo tệp lớp á hậu.

  • Tạo lớp chạy dưới dạng runTest.java bên trong gói dataTable (xem phác thảo kịch bản phần để biết các bước chi tiết hơn).

  • Viết đoạn mã sau.

package hookTest; 

import org.junit.runner.RunWith; 
import cucumber.junit.Cucumber; 

@RunWith(Cucumber.class) 
@Cucumber.Options(format = {"pretty", "html:target/cucumber"})  

public class runTest { }
  • Lưu các tập tin.

  • Chạy thử nghiệm bằng cách sử dụng tùy chọn -

    • Chọn tệp runTest.java từ trình khám phá gói.

    • Nhấp chuột phải và chọn tùy chọn, Chạy dưới dạng.

    • Chọn thử nghiệm JUnit.

Vì vậy, bây giờ khi chúng ta chạy nó, sau đây sẽ là trình tự thực hiện.

  • Trước khi hook - Thiết lập webdriver và các điều kiện tiên quyết khác để chạy thử nghiệm.

  • Tuyên bố đưa ra

  • Khi tuyên bố

  • Sau đó tuyên bố

  • Sau khi hook - Đóng webdriver và thực hiện quá trình dọn dẹp.

Móc gắn thẻ

Chúng tôi cũng có thể chỉ ra nếu chúng tôi muốn các hook trước và sau chỉ được thực thi với một thẻ cụ thể. Example- @Before ('@ Web'). Khái niệm tương tự về thẻ logic và / hoặc cũng có thể được áp dụng với hook.Example - @Before (@ dev, @ wip), @Before (@ dev, ~ @ wip)

Dưa chuột có thể được sử dụng để kiểm tra hầu hết mọi hệ thống máy tính. Cho đến nay, chúng ta đã thấy cách chạy thử nghiệm bằng Eclipse IDE. Có một cách nữa để chúng ta có thể chạy thử nghiệm Cucumber đó là thông qua giao diện dòng lệnh. Vậy lợi ích của việc làm đó là gì?

Chạy bất kỳ khung thử nghiệm nào từ Terminal đều có lợi thế riêng của nó, chẳng hạn như ghi đè các cấu hình chạy được đề cập trong mã.

Để thực hiện kiểm tra Cucumber với dấu nhắc lệnh, hãy sử dụng các bước sau sau khi cấu hình hệ thống.

Step 1- Tạo một Maven Test Project có tên commandLine.

  • Đi tới Tệp → Mới → Khác → Maven → Dự án Maven → Tiếp theo.

  • Cung cấp Id nhóm (Id nhóm sẽ xác định duy nhất dự án của bạn trên tất cả các dự án).

  • Cung cấp Id cấu phần (Id cấu phần là tên của lọ không có phiên bản. Bạn có thể chọn bất kỳ tên nào ở dạng chữ thường).

  • Nhấp vào Kết thúc.

  • Mở pom.xml -

    • Đi tới trình khám phá gói ở phía bên trái của Eclipse.

    • Mở rộng dự án CucumberTest.

    • Định vị pom.xml tập tin.

    • Nhấp chuột phải và chọn tùy chọn, Mở bằng “Trình chỉnh sửa văn bản”.

  • Thêm phụ thuộc cho Selenium - Điều này sẽ cho biết Maven, những tệp jar Selenium nào sẽ được tải xuống từ kho lưu trữ trung tâm đến kho lưu trữ cục bộ.

    • Mở pom.xml đang ở chế độ chỉnh sửa, tạo thẻ phụ thuộc (<dependencies> </dependencies>), bên trong thẻ dự án.

    • Bên trong thẻ phụ thuộc, hãy tạo thẻ phụ thuộc. (<dependency> </dependency>).

    • Cung cấp thông tin sau trong thẻ phụ thuộc.

<dependency> 
   <groupId>org.seleniumhq.selenium</groupId> 
   <artifactId>selenium-java</artifactId> 
   <version>2.47.1</version> 
</dependency>
  • Thêm phụ thuộc cho Cucumber-Java - Điều này sẽ cho biết Maven, tệp Cucumber nào sẽ được tải xuống từ kho lưu trữ trung tâm đến kho lưu trữ cục bộ.

    • Tạo thêm một thẻ phụ thuộc.

    • Cung cấp thông tin sau trong thẻ phụ thuộc.

<dependency> 
   <groupId>info.cukes</groupId> 
   <artifactId>cucumber-java</artifactId> 
   <version>1.0.2</version> 
   <scope>test</scope> 
</dependency>
  • Thêm phụ thuộc cho Cucumber-JUnit - Điều này sẽ cho biết Maven, những tệp Cucumber JUnit nào sẽ được tải xuống từ kho lưu trữ trung tâm đến kho lưu trữ cục bộ.

    • Tạo thêm một thẻ phụ thuộc.

    • Cung cấp thông tin sau trong thẻ phụ thuộc.

<dependency> 
   <groupId>info.cukes</groupId> 
   <artifactId>cucumber-junit</artifactId> 
   <version>1.0.2</version> 
   <scope>test</scope> 
</dependency>
  • Thêm phụ thuộc cho JUnit - Điều này sẽ cho biết Maven, tệp JUnit nào sẽ được tải xuống từ kho lưu trữ trung tâm đến kho lưu trữ cục bộ.

    • Tạo thêm một thẻ phụ thuộc.

    • Cung cấp thông tin sau trong thẻ phụ thuộc.

<dependency> 
   <groupId>junit</groupId> 
   <artifactId>junit</artifactId> 
   <version>4.10</version> 
   <scope>test</scope> 
</dependency>
  • Xác minh mã nhị phân.

    • Khi pom.xml được chỉnh sửa thành công, hãy lưu nó.

    • Đi tới Dự án → Sạch sẽ - Sẽ mất vài phút.

Step 2 - Tạo một gói có tên “phác thảo” trong src / test / java

Step 3 - Tạo một tập tin tính năng có tên là “commandLine.feature”.

  • Chọn và nhấp chuột phải vào đường viền gói.

  • Nhấp vào tệp 'Mới'.

  • Đặt tên cho tệp như “commandLine.feature”

  • Viết văn bản bên dưới trong tệp và lưu nó.

    Feature - Đề cương kịch bản

    Scenario Outline - Chức năng đăng nhập cho một trang mạng xã hội.

    Cho phép người dùng điều hướng đến Facebook

    Khi tôi nhập Tên người dùng là "<tên người dùng>" và Mật khẩu là "<mật khẩu>"

    Sau đó đăng nhập sẽ không thành công

Ví dụ

| username  | password  | 
| username1 | password1 | 
| username2 | password2 |

Note- Ở đây, chú thích ví dụ mô tả phạm vi đầu vào sẽ được cung cấp khi thực thi kịch bản. Kịch bản kiểm tra sẽ được thực hiện cho mỗi đầu vào được cung cấp. Vì vậy, trong ví dụ đã cho, kịch bản thử nghiệm sẽ được thực hiện ba lần.

Step 4 - Tạo tệp định nghĩa bước.

  • Chọn và nhấp chuột phải vào đường viền gói.

  • Nhấp vào tệp 'Mới'.

  • Đặt tên tệp là commandLine.java

  • Viết văn bản sau vào tệp và lưu nó.

package Outline; 

import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.firefox.FirefoxDriver; 

import cucumber.annotation.en.Given; 
import cucumber.annotation.en.Then; i
import cucumber.annotation.en.When; 

public class stepdefinition { 
   WebDriver driver = null;
	
   @Given("^user navigates to facebook$") public void goToFacebook() { driver = new FirefoxDriver(); driver.navigate().to("https://www.facebook.com/"); } @When("^I enter Username as \"([^\"]*)\" and Password as \"([^\"]*)\"$") 
   public void I_enter_Username_as_and_Password_as(String arg1, String arg2) {
      driver.findElement(By.id("email")).sendKeys(arg1);
      driver.findElement(By.id("pass")).sendKeys(arg2);
      driver.findElement(By.id("u_0_v")).click(); 
   } 
	
   @Then("^login should be unsuccessful$") 
   public void validateRelogin() { 
      if(driver.getCurrentUrl().equalsIgnoreCase(
         "https://www.facebook.com/login.php?login_attempt=1&lwv=110")){ 
            System.out.println("Test Pass"); 
      } else { 
         System.out.println("Test Failed"); 
      } 
      driver.close(); 
   } 
}

Note- Trong mã, chúng ta phải xác định một hàm có hai đối số đầu vào: một tên người dùng và một đối số sẽ dành cho mật khẩu. Vì vậy, đối với mỗi tập hợp đầu vào được cung cấp trong thẻ ví dụ, tập hợp GIVEN, WHEN và THEN sẽ được thực thi.

Step 5 - Tạo tệp lớp á hậu.

  • Chọn và nhấp chuột phải vào đường viền gói.

  • Nhấp vào tệp 'Mới'.

  • Đặt tên cho tệp như, runTest.java

  • Viết văn bản sau vào tệp và lưu nó.

package Outline; 

import org.junit.runner.RunWith; 
import cucumber.junit.Cucumber; 

@RunWith(Cucumber.class) 
@Cucumber.Options(format = {"pretty", "html:target/cucumber"}) 

public class runTest { }
  • Mở dấu nhắc lệnh.

  • Đi tới thư mục chứa gói “commandLine” này. e: \ Workspace \ LoginTest \ src> cd test \ java

  • Chạy kiểm tra lệnh mvn: Bạn sẽ thấy rằng tất cả các kịch bản, được mô tả trong tệp tính năng đã được thực thi (nếu không có bất kỳ lỗi nào). Cuối cùng, ở phía dưới, bạn sẽ tìm thấy thông tin sau.

Kết quả

This describes the total test run, along with failure if any.

Lệnh trước đó chạy mọi thứ như đã đề cập trong lớp JUnit Runner. Tuy nhiên, nếu chúng ta muốn ghi đè các cấu hình được đề cập trong Runner, sau đây là một số ví dụ để làm điều đó.

  • Bây giờ chạy lệnh mvn test - Dcucumber.options = "- help" trên dấu nhắc lệnh. Chạy điều này sẽ in tất cả các tùy chọn có sẵn.

  • Để chỉ chạy các thẻ cụ thể, hãy chạy lệnh mvn test -Dcucumber.options = "- tags @SmokeTest" trên dấu nhắc lệnh. Nó sẽ chỉ chạy các thẻ được đánh dấu bằng @SmokeTest.

  • Để thay đổi định dạng của kết quả, hãy chạy lệnh E: \ Workspace \ LoginTest> mvn test -Dcucumber.options = "- plugin junit: target / Cucumber-junit-report.xml" trên dấu nhắc lệnh. Nó sẽ thay đổi báo cáo định dạng cho trình tạo báo cáo JUnit.

Điều quan trọng là phải hiểu Junit là gì, trước khi chúng ta bắt đầu thảo luận về Cucumber JUnit Runner. JUnitlà một khung kiểm tra đơn vị mã nguồn mở cho ngôn ngữ lập trình Java. JUnit đóng vai trò quan trọng trong quá trình phát triển theo hướng thử nghiệm và là một trong số họ các khuôn khổ kiểm thử đơn vị, được gọi chung là xUnit có nguồn gốc từ SUnit.

Lợi ích của việc sử dụng JUnit

  • Đơn vị có một Graphical User Interface (GUI), giúp bạn có thể viết và kiểm tra mã nguồn một cách nhanh chóng và dễ dàng.

  • JUnit cho phép nhà phát triển xây dựng từng bước các bộ thử nghiệm để đo lường tiến độ và phát hiện các tác dụng phụ không mong muốn.

  • Thử nghiệm có thể được chạy liên tục.

  • JUnit hiển thị tiến trình kiểm tra trong một thanh thường có màu xanh lá cây nhưng chuyển sang màu đỏ khi kiểm tra không thành công.

Bây giờ, chúng ta đã thấy những lợi ích của việc sử dụng JUnit, nhưng lý do chúng ta đang thảo luận về nó ngay bây giờ là khuôn khổ Cucumber. Mặt khác, Cucumber đang cung cấp một cách để những người không chuyên về kỹ thuật xác định các trường hợp thử nghiệm cho một sản phẩm, mặt khác, kỳ vọng của chúng tôi là thực hiện trơn tru và kịp thời các trường hợp thử nghiệm đó.

JUnit đóng vai trò là cầu nối giữa hai điều này. Vì vậy, luồng thực thi sẽ giống như sau:

  • Các bên liên quan ghi ra tệp đặc trưng.

  • Tệp định nghĩa bước sẽ được tạo tương ứng.

  • Chỉ định lớp Á hậu JUnit để chạy một loạt các trường hợp thử nghiệm.

  • Khi chúng ta chạy lớp Á hậu JUnit -

    • Nó sẽ phân tích cú pháp tệp tính năng Gherkin.

    • Nó sẽ thực thi các chức năng được viết trong tệp định nghĩa bước theo các câu lệnh tệp đặc trưng.

    • JUnit sẽ kết hợp kết quả trường hợp thử nghiệm.

    • Nó sẽ xây dựng báo cáo thử nghiệm ở định dạng được chỉ định (có thể là html / JSON).

Điểm quan trọng ở đây là cấu hình JUnit như thế nào để thực hiện tất cả những điều này? Sau đây là các bước -

Step 1 - Cài đặt Java.

  • Tải xuống jdk và jre từ liên kết http://www.oracle.com/technetwork/java/javase/downloads/index.html

  • Chấp nhận thỏa thuận cấp phép.

  • Cài đặt JDK và JRE.

  • Đặt biến môi trường như thể hiện trong ảnh chụp màn hình sau.

Step 2 - Cài đặt Eclipse.

  • Why we need- Eclipse là một Môi trường Phát triển Tích hợp (IDE). Nó chứa một không gian làm việc cơ sở và một hệ thống plug-in có thể mở rộng để tùy chỉnh môi trường.

  • How to install -

    • Đảm bảo rằng JAVA đã được cài đặt trên máy của bạn.

    • Tải xuống Eclipse từ http://www.eclipse.org/downloads

    • Giải nén và Eclipse được cài đặt.

Step 3 - Cài đặt Maven.

  • Why we need- Maven là một công cụ tự động hóa xây dựng được sử dụng chủ yếu cho các dự án Java. Nó cung cấp một nền tảng chung để thực hiện các hoạt động như tạo mã nguồn, biên dịch mã, đóng gói mã vào lọ, v.v. Ngoài ra, sau này nếu bất kỳ phiên bản phần mềm nào bị thay đổi, Maven cung cấp một cách dễ dàng để sửa đổi dự án thử nghiệm cho phù hợp.

  • How to install -

    • Tải xuống Maven - https://maven.apache.org/download.cgi

    • Giải nén tệp và ghi nhớ vị trí.

    • Tạo biến môi trường MAVEN_HOME như thể hiện trong ảnh chụp màn hình sau.

  • Chỉnh sửa biến Path và bao gồm Maven như được hiển thị trong ảnh chụp màn hình sau.

  • Tải xuống plugin MAVEN từ Eclipse.

    • Mở Eclipse.

    • Phải Trợ giúp → Thị trường Eclipse → Tìm kiếm maven → Tích hợp Maven cho Eclipse → CÀI ĐẶT.

Step 4 - Cách cấu hình Cucumber với Maven

  • Tạo một dự án Maven trong Eclipse.

    • Đi tới Tệp → Mới → Khác → Maven → Dự án Maven → Tiếp theo.

    • Cung cấp Id nhóm (Id nhóm sẽ xác định duy nhất dự án của bạn trên tất cả các dự án).

    • Cung cấp Id cấu phần (Id cấu phần là tên của lọ không có phiên bản. Bạn có thể chọn bất kỳ tên nào ở dạng chữ thường).

    • Nhấp vào Kết thúc.

  • Mở pom.xml

    • Đi tới trình khám phá gói ở phía bên trái của Eclipse.

    • Mở rộng dự án CucumberTest.

    • Định vị tệp pom.xml.

    • Nhấp chuột phải và chọn tùy chọn, Mở bằng “Trình chỉnh sửa văn bản”.

  • Thêm phụ thuộc cho Selenium - Điều này sẽ cho biết Maven, những tệp jar Selenium nào sẽ được tải xuống từ kho lưu trữ trung tâm đến kho lưu trữ cục bộ.

    • Mở pom.xml đang ở chế độ chỉnh sửa, tạo thẻ phụ thuộc (<dependencies> </dependencies>), bên trong thẻ dự án.

    • Bên trong thẻ phụ thuộc, hãy tạo thẻ phụ thuộc. (<dependency> </dependency>).

    • Cung cấp thông tin sau trong thẻ phụ thuộc.

<dependency> 
   <groupId>org.seleniumhq.selenium</groupId> 
   <artifactId>selenium-java</artifactId> 
   <version>2.47.1</version> 
</dependency>
  • Thêm phụ thuộc cho Cucumber-Java - Điều này sẽ cho biết Maven, tệp Cucumber nào sẽ được tải xuống từ kho lưu trữ trung tâm đến kho lưu trữ cục bộ.

    • Tạo thêm một thẻ phụ thuộc.

    • Cung cấp thông tin sau trong thẻ phụ thuộc.

<dependency> 
   <groupId>info.cukes</groupId> 
   <artifactId>cucumber-java</artifactId> 
   <version>1.0.2</version> 
   <scope>test</scope> 
</dependency>
  • Thêm phụ thuộc cho Cucumber-JUnit: Điều này sẽ cho biết Maven, những tệp Cucumber JUnit nào sẽ được tải xuống từ kho lưu trữ trung tâm đến kho lưu trữ cục bộ.

    • Tạo thêm một thẻ phụ thuộc.

    • Cung cấp thông tin sau trong thẻ phụ thuộc.

<dependency> 
   <groupId>info.cukes</groupId> 
   <artifactId>cucumber-junit</artifactId> 
   <version>1.0.2</version> 
   <scope>test</scope> 
</dependency>
  • Thêm phụ thuộc cho JUnit - Điều này sẽ cho biết Maven, tệp JUnit nào sẽ được tải xuống từ kho lưu trữ trung tâm đến kho lưu trữ cục bộ.

    • Tạo thêm một thẻ phụ thuộc.

    • Cung cấp thông tin sau trong thẻ phụ thuộc.

<dependency> 
   <groupId>junit</groupId> 
   <artifactId>junit</artifactId> 
   <version>4.10</version> 
   <scope>test</scope> 
</dependency>
  • Xác minh mã nhị phân

    • Một lần pom.xml được chỉnh sửa thành công, lưu nó.

    • Đi tới Dự án → Sạch sẽ - Quá trình này sẽ mất vài phút.

    • Sau đó, bạn sẽ có thể thấy một kho lưu trữ Maven như ảnh chụp màn hình sau.

Step 5 - Tạo tập tin tính năng (sẽ được đề cập sau).

Step 6 - Tạo tệp định nghĩa bước (sẽ được đề cập sau).

Step 7 - Tạo trình chạy Junit để chạy thử nghiệm (sẽ được đề cập sau).

Chúng tôi thực hiện kiểm tra để hiểu tính ổn định của sản phẩm, vì vậy, dù là kiểm tra thủ công hay kiểm tra tự động, điều rất quan trọng là phải tạo ra một báo cáo ngắn gọn có thể mô tả tính ổn định của sản phẩm. Do đó, trong khi chúng tôi đang tự động hóa kịch bản thử nghiệm của mình với Cucumber, điều cần thiết là phải biết, chúng tôi có thể tạo báo cáo thử nghiệm Cucumber tốt hơn như thế nào. Như chúng ta biết rằng Cucumber là một khung công tác BDD, nó không có cơ chế báo cáo ưa thích.

Để đạt được điều này, chúng ta cần tích hợp Cucumber với công cụ mã nguồn mở khác như Ant / Junit. Ở đây, chúng tôi sẽ lấy thêm các ví dụ về JUnit vì nó cung cấp hỗ trợ cho ngôn ngữ Java.

Hãy xem xét chi tiết của các định dạng báo cáo khác nhau, có sẵn và dễ sử dụng -

Định dạng Khá (Báo cáo HTML)

Pretty Format tạo báo cáo thử nghiệm Cucumber ở định dạng HTML, tức là một tệp HTML. Đây là định dạng báo cáo dễ đọc nhất. Nó tạo báo cáo theo cách giống như một tệp tính năng, vì vậy việc truy tìm cũng được thực hiện dễ dàng. Ngoài ra, bạn có thể chỉ định vị trí bạn muốn đặt báo cáo này sau khi thực hiện thử nghiệm. Nó có thể là -

  • Local Directory - Chúng tôi có thể chỉ định thư mục đích cho báo cáo dưới dạng bất kỳ thư mục cục bộ nào của máy nơi thử nghiệm sẽ chạy.

  • Server Directory- Ngoài ra, chúng tôi có điều khoản chỉ định một thư mục đích là bất kỳ thư mục nào trên máy chủ, có thể truy cập công khai. Điều này thường hữu ích khi chúng tôi muốn khách hàng / các bên liên quan của mình xem kết quả kiểm tra tại bất kỳ thời điểm nào.

Thí dụ

Hãy tự động hóa một ví dụ về một định dạng đẹp.

Step 1 - Tạo một dự án Maven có tên cucumberReport trong Eclipse.

Step 2 - Tạo một gói có tên CucumberReport Dưới src/test/java

Step 3 - Tạo một tệp tính năng có tên cucumberReport.feature

Viết văn bản sau vào tệp và lưu nó.

Feature - Báo cáo dưa chuột

# Đây là để kiểm tra kết quả thử nghiệm cho trường hợp vượt qua thử nghiệm

Scenario: Chức năng đăng nhập tồn tại

Vì tôi đã mở trình duyệt

Khi tôi mở trang web Facebook

Sau đó, nút Đăng nhập sẽ tồn tại

# Đây là để kiểm tra kết quả thử nghiệm cho Trường hợp thử nghiệm không thành công

Scenario: Quên mật khẩu tồn tại

Vì tôi đã mở trình duyệt

Khi tôi mở trang web Facebook

Sau đó liên kết Quên mật khẩu sẽ tồn tại

Note- Ở đây kịch bản đầu tiên sẽ vượt qua, ngược lại kịch bản thứ hai sẽ thất bại. Để chúng tôi có thể chứng kiến ​​báo cáo đạt và không đạt như thế nào.

Step 4 - Tạo tệp định nghĩa bước.

  • Chọn và nhấp chuột phải vào đường viền gói.

  • Nhấp vào tệp 'Mới'.

  • Đặt tên tệp là cucumberReport.java

  • Viết văn bản sau vào tệp và lưu nó.

package CucumberReport; 

import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.firefox.FirefoxDriver; 

import cucumber.annotation.en.Given; 
import cucumber.annotation.en.Then; 
import cucumber.annotation.en.When; 

public class cucumberReport { 
   WebDriver driver = null;
	
   @Given("^I have open the browser$") 
   public void openBrowser() { 
      driver = new FirefoxDriver();
   } 
	
   @When("^I open Facebook website$") public void goToFacebook() { driver.navigate().to("https://www.facebook.com/"); } @Then("^Login button should exits$") 
   public void loginButton() { 
      if(driver.findElement(By.id("u_0_v")).isEnabled()) { 
         System.out.println("Test 1 Pass"); 
      } else { 
         System.out.println("Test 1 Fail");
      }
   } 
	
   @Then("^Forgot password link should exist$") 
   public void forgotPWD() { 
      if(driver.findElement(By.id("")).isEnabled()) { 
         System.out.println("Test 1 Pass"); 
      } else {
         System.out.println("Test 1 Fail");
      } 
   } 
}

Step 5 - Tạo tệp lớp á hậu.

  • Tạo một lớp người chạy có tên runTest.java bên trong gói.

  • Viết đoạn mã sau. Lưu các tập tin.

package CucumberReport; 

import org.junit.runner.RunWith; 
import cucumber.junit.Cucumber; 

@RunWith(Cucumber.class) 
@Cucumber.Options( 
   format = {"pretty", "html:target/Destination"} ) 
//Specifying pretty as a format option ensure that HTML report will be generated. 
//When we specify html:target/Destination - It will generate the HTML report 

inside the Destination folder, in the target folder of the maven project.
 
public class runTest { }
  • Chạy thử nghiệm bằng tùy chọn

    • Lựa chọn runTest.java tệp từ trình khám phá gói.

    • Nhấp chuột phải và chọn tùy chọn, Run as.

    • Chọn thử nghiệm JUnit.

Bạn sẽ quan sát thấy những điều sau đây khi bạn chạy tệp lớp này.

Cả hai kịch bản sẽ được thực hiện từng cái một.

Một thư mục có tên Đích sẽ được tạo bên trong thư mục đích.

Báo cáo sẽ có tên là “Index.html”.

Mở Index.html bằng trình duyệt web.

Bạn sẽ thấy báo cáo được đề cập trong hình ảnh sau:

Nó làm nổi bật chính xác màu sắc của kịch bản thất bại. Hơn nữa, bạn sẽ thấy điểm nổi bật cho bước thất bại trong kịch bản đó. Điều này làm cho việc gỡ lỗi rất dễ dàng.

Báo cáo JSON

Bây giờ chúng ta đã thấy báo cáo HTML dễ dàng như thế nào. Tuy nhiên, nếu chúng tôi muốn chuyển thông tin báo cáo này cho bất kỳ ứng dụng nào khác, đó là một điều khó khăn trong trường hợp báo cáo HTML. Ở đây cần có một định dạng báo cáo khác. Ký hiệu đối tượng tập lệnh JSON-Java là một định dạng khác để tạo báo cáo thử nghiệm Cucumber. JSON là một đối tượng chứa nhiều thông tin được lưu trữ dưới dạng văn bản. Báo cáo JSON mang lại một giá trị khác cho bảng. Báo cáo JSON cũng có thể được sử dụng như một khối lượng thông tin được chuyển giữa các máy chủ khác nhau. Hơn nữa, nó có thể được sử dụng để hiển thị dưới dạng một trang web. Tóm lại, các báo cáo JSON có thể được sử dụng bởi ứng dụng khác.

What is payload information?Khi dữ liệu được gửi qua Internet, mỗi đơn vị được truyền bao gồm cả thông tin tiêu đề và dữ liệu thực tế được gửi. Tiêu đề xác định nguồn và đích của gói, trong khi dữ liệu thực tế được gọi là tải trọng. Để tạo báo cáo JSON, chúng tôi chỉ cần thực hiện thay đổi trong tệp trình chạy.

  • Thay đổi tùy chọn định dạng trong tệp Á hậu như sau.

package CucumberReport; 

import org.junit.runner.RunWith; 
import cucumber.junit.Cucumber; 

@RunWith(Cucumber.class) 
@Cucumber.Options( format={"json:target/Destination/cucumber.json"}) 

//When we specify json:target/Destination/cucumber.json - It will generate the JSON  
report inside the Destination folder, in the target folder of the maven project.

public class runTest {}
  • Chạy thử nghiệm bằng cách sử dụng tùy chọn -

    • Lựa chọn runTest.java tệp từ trình khám phá gói.

    • Nhấp chuột phải và chọn tùy chọn Run as.

    • Chọn thử nghiệm JUnit.

  • Bạn sẽ quan sát thấy những điều sau đây khi bạn chạy tệp lớp này.

    • Cả hai kịch bản sẽ được thực hiện từng cái một.

  • Báo cáo sẽ có tên là cucumber.json (như được cung cấp trong lớp người chạy).

  • Mở cucumber.json tập tin bằng trình soạn thảo văn bản.

  • Bạn sẽ thấy báo cáo được đề cập trong ảnh chụp màn hình sau sau khi đặt ngắt dòng -

Note - JSON khó đọc hơn so với định dạng báo cáo HTML.

Rất có thể bài kiểm tra của bạn bị trượt do không rõ lý do. Xác định nguyên nhân hư hỏng và khắc phục nó là rất quan trọng. Quá trình này được gọi làdebugging. Sau đây là một số mẹo và thủ thuật, giúp gỡ lỗi Cucumber dễ dàng hơn một chút.

Tùy chọn gỡ lỗi có sẵn với Eclipse. Đặt điểm ngắt. Nhấp vào tệp và gỡ lỗi bằng các bước sau:

Step 1 - Đặt các điểm ngắt thủ công trong tệp định nghĩa bước Ruby.

Thí dụ

require 'ruby-debug' 
Then /^the process should exit cleanly$/ do 
breakpoint 
assert @exited_cleanly, "Process did not exit cleanly: #{@stdout}" 
end

Step 2 - Chúng ta cũng có thể xác định một bước gỡ lỗi riêng biệt như sau trong tệp định nghĩa bước.

Then /^I debug$/ do 
breakpoint 
0 
end

Step 3 - Webratlà công cụ mặc định để kiểm tra dưa chuột với Rails. Nó cho phép bạn thực hiện những việc như nhấp vào liên kết, nhập và gửi biểu mẫu, v.v.

Chẳng hạn, sẽ có lúc bạn cố gắng bấm vào một thứ gì đó và nó không ở đó. Bạn sẽ nhận được một khối lớn HTML được ném trở lại và tìm ra ý nghĩa chính xác của điều đó có thể là một lực cản thực sự.

save_and_open_page

Webrat cung cấp một phương thức save_and_open_page để nắm bắt HTML hiện tại, lưu nó và sau đó sẽ mở nó trong trình duyệt cho bạn. Cực kỳ hữu ích.

When /^I follow "(.*)"$/ do |link| 
save_and_open_page 
click_link(link) 
end

Để chạy thử nghiệm Cucumber với Java, sau đây là các bước.

Step 1 - Cài đặt Java -

  • Tải xuống jdk và jre từ

    http://www.oracle.com/technetwork/java/javase/downloads/index.html

  • Chấp nhận thỏa thuận cấp phép.

  • Cài đặt JDK và JRE.

  • Đặt biến môi trường như trong hình sau.

Step 2 - Cài đặt Eclipse IDE -

  • Đảm bảo rằng JAVA đã được cài đặt trên máy của bạn.

  • Tải xuống Eclipse từ https://eclipse.org/downloads/

  • Giải nén và cài đặt Eclipse.

Step 3 - Cài đặt Maven -

  • Tải xuống Maven -https://maven.apache.org/download.cgi

  • Giải nén tệp và ghi nhớ vị trí.

  • Tạo biến môi trường MAVEN_HOME như trong hình sau.

  • Chỉnh sửa biến Path và bao gồm Maven.

  • Tải xuống plugin MAVEN từ Eclipse

    • Mở Eclipse.

    • Phải trợ giúp → Thị trường Eclipse → Tìm kiếm maven → Tích hợp Maven cho Eclipse → CÀI ĐẶT

Step 4 - Cấu hình Cucumber với Maven.

  • Tạo một dự án Maven.

    • Đi tới Tệp → Mới → Khác → Maven → Dự án Maven → Tiếp theo.

    • Cung cấp Id nhóm (Id nhóm sẽ xác định duy nhất dự án của bạn trên tất cả các dự án).

    • Cung cấp Id cấu phần (Id cấu phần là tên của lọ không có phiên bản. Bạn có thể chọn bất kỳ tên nào ở dạng chữ thường).

    • Nhấp vào Kết thúc.

Step 5 - Mở pom.xml -

  • Đi tới trình khám phá gói ở phía bên trái của Eclipse.

  • Mở rộng dự án CucumberTest.

  • Định vị tệp pom.xml.

  • Nhấp chuột phải và chọn tùy chọn, Mở bằng “Trình chỉnh sửa văn bản”.

Step 6 - Thêm phụ thuộc cho Selenium - Điều này sẽ cho biết Maven, các tệp jar Selenium nào sẽ được tải xuống từ kho lưu trữ trung tâm đến kho lưu trữ cục bộ.

  • Mở pom.xml đang ở chế độ chỉnh sửa, tạo thẻ phụ thuộc (<dependencies> </dependencies>), bên trong thẻ dự án.

  • Bên trong thẻ phụ thuộc, hãy tạo thẻ phụ thuộc. (<dependency> </dependency>)

  • Cung cấp thông tin sau trong thẻ phụ thuộc.

<dependency> 
   <groupId>org.seleniumhq.selenium</groupId> 
   <artifactId>selenium-java</artifactId> 
   <version>2.47.1</version> 
</dependency>

Step 7 - Thêm phụ thuộc cho Cucumber-Java - Điều này sẽ cho biết Maven, những tệp Cucumber nào sẽ được tải xuống từ kho lưu trữ trung tâm đến kho lưu trữ cục bộ.

  • Tạo thêm một thẻ phụ thuộc.

  • Cung cấp thông tin sau trong thẻ phụ thuộc.

<dependency> 
   <groupId>info.cukes</groupId> 
   <artifactId>cucumber-java</artifactId> 
   <version>1.0.2</version> 
   <scope>test</scope> 
</dependency>

Step 8 - Thêm phụ thuộc cho Cucumber-JUnit - Điều này sẽ cho biết Maven, những tệp Cucumber JUnit nào sẽ được tải xuống từ kho lưu trữ trung tâm đến kho lưu trữ cục bộ.

  • Tạo thêm một thẻ phụ thuộc.

  • Cung cấp thông tin sau trong thẻ phụ thuộc.

<dependency> 
   <groupId>info.cukes</groupId> 
   <artifactId>cucumber-junit</artifactId> 
   <version>1.0.2</version> 
   <scope>test</scope> 
</dependency>

Step 9- Thêm phụ thuộc cho JUnit - Điều này sẽ cho biết Maven, những tệp JUnit nào sẽ được tải xuống từ kho lưu trữ trung tâm đến kho lưu trữ cục bộ.

  • Tạo thêm một thẻ phụ thuộc.

  • Cung cấp thông tin sau trong thẻ phụ thuộc.

<dependency> 
   <groupId>junit</groupId> 
   <artifactId>junit</artifactId> 
   <version>4.10</version> 
   <scope>test</scope> 
</dependency>

Step 10 - Xác minh mã nhị phân.

  • Khi pom.xml được chỉnh sửa thành công, hãy lưu nó.

  • Đi tới Dự án → Sạch sẽ - Quá trình này sẽ mất vài phút.

  • Bạn sẽ có thể thấy một kho lưu trữ Maven.

Step 11 - Tạo một gói dưới src/test/java đặt tên là cucumberJava.

Step 12 - Tạo tệp tính năng

  • Chọn và nhấp chuột phải vào đường viền gói.

  • Nhấp vào tệp 'Mới'.

  • Đặt tên cho tệp như cucumberJava.feature.

  • Viết văn bản sau vào tệp và lưu nó.

    Feature: CucumberJava

    Scenario: Chức năng đăng nhập tồn tại

    Vì tôi đã mở trình duyệt

    Khi tôi mở trang web Facebook

    Sau đó, nút Đăng nhập sẽ thoát

Step 13 - Tạo tệp định nghĩa bước -

  • Chọn và nhấp chuột phải vào đường viền gói.

  • Nhấp vào tệp 'Mới'.

  • Đặt cho tên tệp một cái tên chẳng hạn như annotation.java.

  • Viết văn bản sau vào tệp và lưu nó.

package CucumberJava; 
import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.firefox.FirefoxDriver; 

import cucumber.annotation.en.Given; 
import cucumber.annotation.en.Then; 
import cucumber.annotation.en.When; 

public class cucumberJava { 
   WebDriver driver = null; 
   @Given("^I have open the browser$") public void openBrowser() { driver = new FirefoxDriver(); } @When("^I open Facebook website$") 
   public void goToFacebook() { 
      driver.navigate().to("https://www.facebook.com/"); 
   } 
   @Then("^Login button should exits$") 
   public void loginButton() { 
      if(driver.findElement(By.id("u_0_v")).isEnabled()) { 
         System.out.println("Test 1 Pass"); 
      } else { 
         System.out.println("Test 1 Fail"); 
      } 
      driver.close(); 
   } 
}

Step 14 - Tạo tệp lớp á hậu.

  • Chọn và nhấp chuột phải vào đường viền gói.

  • Nhấp vào tệp 'Mới'.

  • Đặt tên tệp là runTest.java.

  • Viết văn bản sau vào tệp và lưu nó.

package cucumberJava; 
import org.junit.runner.RunWith; 
import cucumber.junit.Cucumber; 

@RunWith(Cucumber.class) 
@Cucumber.Options(format = {"pretty", "html:target/cucumber"}) 
public class runTest { 
}

Step 15 - Chạy thử nghiệm bằng cách sử dụng tùy chọn -

  • Chọn tệp runTest.java từ trình khám phá gói.

  • Nhấp chuột phải và chọn tùy chọn, Run as.

  • Chọn thử nghiệm JUnit.

Bạn sẽ quan sát thấy những điều sau đây khi thực hiện:

  • Một phiên bản của trình duyệt web Firefox sẽ mở ra.

  • Nó sẽ mở trang đăng nhập Facebook trên trình duyệt.

  • Nó sẽ phát hiện nút đăng nhập.

  • Trình duyệt sẽ đóng.

  • Trong cửa sổ JUnit, bạn sẽ thấy một kịch bản có dấu tick màu xanh lá cây, cho biết việc thực thi thử nghiệm thành công.

Ngôn ngữ Ruby có những ưu điểm sau:

  • Nó rất dễ hiểu.

  • Nó là một ngôn ngữ hướng đối tượng.

  • Nó là một thư viện lớp mạnh mẽ.

  • Nó có hỗ trợ trực tuyến lớn.

Sau đây là quy trình từng bước về cách Cucumber hoạt động với Ruby.

Step 1 - Cài đặt Ruby.

  • Truy cập trang tải xuống RubyInstaller.

  • Tải xuống phiên bản phù hợp nhất cho hệ điều hành của bạn (tức là 32 hoặc 64 bit).

  • Chạy exe đã tải xuống.

  • Trong khi cài đặt, đánh dấu vào tùy chọn “Thêm Ruby…” và “Liên kết…”, như trong hình sau.

Step 2 - Tải xuống và giải nén Dev kit.

  • Truy cập trang tải xuống RubyInstaller.

  • Tải xuống phiên bản Devkit phù hợp nhất với hệ điều hành của bạn (tức là 32 hoặc 64 bit).

  • Giải nén devkit tại thư mục c: \ Ruby \ Devkit.

  • Mở dấu nhắc lệnh.

  • Bên trong bộ công cụ phát triển Ruby, hãy chạy lệnh sau.

C:\Ruby\devkit> ruby dk.rb init 
C:\Ruby\devkit> ruby dk.rb install

Step 3 - Cài đặt Cucumber và đá quý Ruby khác.

  • Để cài đặt Cucumber, trước tiên hãy cập nhật thiết lập đá quý hiện tại

C:\Users\Admin> gem update –system
  • Tiếp theo, cài đặt các đá quý bạn cần để thử nghiệm web Cucumber.

C:\Users\Admin> gem install --no-ri --no-rdoc rspec 
C:\Users\Admin> gem install --no-ri --no-rdoc win32console 
C:\Users\Admin> gem install --no-ri --no-rdoc watir-webdriver 
C:\Users\Admin> gem install --no-ri --no-rdoc cucumber
  • Chạy dưa chuột

C:\Users\Admin\Documents>cucumber –init 
C:\Users\Admin\Documents>cucumber

Step 4 - Cài đặt IDE - KOMODO.

  • Đi đến trang http://www.activestate.com/komodo-ide/downloads

  • Tải xuống trình cài đặt dùng thử miễn phí.

  • Bấm đúp vào exe đã tải xuống.

  • Làm theo các bước cài đặt.

  • Kết thúc cài đặt và mở IDE.

Step 5 - Cài đặt Watir - Đi tới dấu nhắc lệnh và chạy lệnh sau, "gem install watir"

Step 6 - Cài đặt rspec - Đi tới dấu nhắc lệnh và chạy lệnh sau, "gem install rspec"

Step 7 - Tạo tệp đặc trưng.

  • Mở trình chỉnh sửa KOMODO.

  • Nhấp vào biểu tượng tệp mới.

  • Viết đoạn văn bản sau.

    Feature: Người dùng phải có thể tìm kiếm nội dung bằng Google.

    Scenario: Tìm kiếm một thuật ngữ.

    Vì tôi đã nhập "watir" vào truy vấn.

    Khi tôi nhấp vào "search"

    Sau đó, tôi sẽ thấy một số kết quả

  • Nhấp chuột save biểu tượng.

  • Đặt tên là CucumberRuby.feature.

  • Chọn bất kỳ thư mục nào, ví dụ: “e:\WithRuby”

  • Lưu các tập tin.

Step 8 - Tạo tệp định nghĩa bước.

  • Mở trình chỉnh sửa KOMODO.

  • Nhấp vào biểu tượng tệp 'Mới'.

  • Viết đoạn mã sau.

require "watir-webdriver" 
require "rspec/expectations" 

Given /^I have entered "([^"]*)" into the query$/ do |term| 
@browser ||= Watir::Browser.new :firefox 
@browser.goto "google.com" 
@browser.text_field(:name => "q").set term 
end 

When /^I click "([^"]*)"$/ do |button_name| @browser.button.click end Then /^I should see some results$/ do 
@browser.div(:id => "resultStats").wait_until_present 
@browser.div(:id => "resultStats").should exist 
@browser.close 
End
  • Nhấp vào biểu tượng lưu.

  • Đặt tên là CucumberRuby.rb

  • Chọn bất kỳ thư mục nào, ví dụ: “e:\WithRuby”

  • Lưu các tập tin.

Step 9 - Tạo tệp thử nghiệm.

  • Mở trình chỉnh sửa KOMODO.

  • Nhấp vào biểu tượng tệp 'Mới'.

  • Viết đoạn mã sau.

require "rubygems" 
require "test/unit" 
require "watir-webdriver" 

class GoogleSearch < Test::Unit::TestCase 
def setup 
@browser ||= Watir::Browser.new :firefox 
end 

def teardown 
@browser.close 
end 

def test_search 
@browser.goto "google.com" 
@browser.text_field(:name => "q").set "watir" 
@browser.button.click 
@browser.div(:id => "resultStats").wait_until_present assert 
@browser.title == "watir - Google Search" 
end 
end
  • Nhấp vào Lưu biểu tượng.

  • Đặt tên tệp là test.rb và chọn bất kỳ thư mục nào, ví dụ: “e: \ WithRuby”

  • Lưu các tập tin.

Step 10 - Chạy tệp tính năng.

  • Đi tới dấu nhắc lệnh.

  • Đi tới thư mục e:\WithRuby

  • Chạy lệnh sau.

e:\With Ruby>ruby test.rb

Bạn sẽ quan sát thấy những điều sau đây khi thực hiện:

  • Một phiên bản trình duyệt web sẽ mở ra.

  • Trang web Google.com sẽ được tải.

  • Tìm kiếm văn bản watir sẽ được nhập.

  • Nút tìm kiếm sẽ được đặt.

  • Kết quả tìm kiếm sẽ được hiển thị trên trang web.

  • Phiên bản trình duyệt sẽ bị đóng.