Dưa chuột - Thẻ

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 các 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ể nào (và cũng 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 kịch bản 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 một 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 kịch bản, chúng tôi 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 lôgic 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 lôgic 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.