แตงกวา - ตะขอ

แตงกวา hookช่วยให้เราจัดการขั้นตอนการทำงานของโค้ดได้ดีขึ้นและช่วยลดความซ้ำซ้อนของโค้ด เราสามารถพูดได้ว่าเป็นขั้นตอนที่มองไม่เห็นซึ่งทำให้เราสามารถดำเนินการสถานการณ์หรือการทดสอบของเราได้

เพื่อให้เข้าใจแนวคิดนี้ได้ดีขึ้นเรามาดูตัวอย่างไฟล์คุณลักษณะและไฟล์ข้อกำหนดขั้นตอน

ส่วนที่ไฮไลต์ในคำสั่งที่ระบุทำหน้าที่ในการตั้งค่า webdriver และสิ้นสุดเซสชัน webdriver ดังนั้นจึงไม่เกี่ยวข้องกับสาระสำคัญของ“ คำแถลงที่ได้รับ” และเป็นเหมือนการตั้งค่าสำหรับการทดสอบ นอกจากนี้หากเราคิดกับผู้มุ่งหวังที่กว้างขึ้นในกรณีที่มีหลายสถานการณ์สำหรับคุณลักษณะนี้การตั้งค่าและการล้างข้อมูลบนเว็บนี้จะทำงานพร้อมกับคำสั่งที่กำหนด ตามเหตุผลแล้วการตั้งค่าและการล้างข้อมูลจะดำเนินการเพียงครั้งเดียวเท่านั้น

ดังนั้นเพื่อให้เกิดการเพิ่มประสิทธิภาพสามารถใช้ตะขอได้ บ่อยครั้งที่เราใช้ตะขอสองประเภท: ตะขอ "ก่อน" และตะขอ "หลัง" วิธีการ / ฟังก์ชั่น / ชิ้นส่วนของโค้ดที่กำหนดไว้ในก่อนและหลัง hooks รันเสมอแม้ว่าสถานการณ์จะผ่านหรือล้มเหลว

ตามชื่อที่แนะนำก่อนที่ hook จะดำเนินการได้ดีก่อนสถานการณ์การทดสอบอื่น ๆ และหลังจากที่ hook ถูกเรียกใช้งานหลังจากเรียกใช้สถานการณ์ทั้งหมด

Hooks ถูกกำหนดไว้ในไฟล์ข้อกำหนดขั้นตอนเท่านั้น

มาดูตัวอย่างก่อนและหลังแบบอัตโนมัติกัน

Step 1 - สร้างโครงการ Maven เป็น hookTest เพิ่มการพึ่งพาที่จำเป็นใน pom.xml

Step 2 - สร้างแพ็คเกจ Java ที่มีชื่อว่า hookTest ภายใต้ src/test/java

Step 3 - สร้างไฟล์ข้อกำหนดขั้นตอนที่ชื่อเป็น hookTest.java ภายใต้แพ็คเกจ

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 - สร้างไฟล์ฟีเจอร์ชื่อ“ hookTest.feature” ภายใต้แพ็คเกจ

Feature - เค้าโครงสถานการณ์

Scenario Outline - การทดสอบตะขอ

กำหนดให้ผู้ใช้ไปที่ Facebook

เมื่อฉันป้อนชื่อผู้ใช้เป็น "<username>" และรหัสผ่านเป็น "<password>"

จากนั้นการเข้าสู่ระบบจะไม่สำเร็จ

ตัวอย่าง

| username  | password  | 
| username1 | password1 |

Step 5 - สร้างไฟล์คลาสนักวิ่ง

  • สร้างคลาสรันเนอร์เป็น runTest.java ภายในแพ็คเกจ dataTable (ดูโครงร่างสถานการณ์ส่วนสำหรับขั้นตอนโดยละเอียด)

  • เขียนรหัสต่อไปนี้

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

@RunWith(Cucumber.class) 
@Cucumber.Options(format = {"pretty", "html:target/cucumber"}) 
 
public class runTest { }
  • บันทึกไฟล์

  • ทำการทดสอบโดยใช้ตัวเลือก -

    • เลือกไฟล์ runTest.java จาก package explorer

    • คลิกขวาและเลือกตัวเลือก Run as

    • เลือก JUnit test

ตอนนี้เมื่อเราเรียกใช้สิ่งนี้ต่อไปนี้จะเป็นลำดับของการดำเนินการ

  • ก่อนเชื่อมต่อ - ตั้งค่า Webdriver และข้อกำหนดเบื้องต้นอื่น ๆ เพื่อเรียกใช้การทดสอบ

  • ให้คำสั่ง

  • เมื่อคำสั่ง

  • แล้วคำสั่ง

  • After hook - ปิด webdriver และทำตามขั้นตอนการล้างข้อมูล

ติดแท็ก Hooks

นอกจากนี้เรายังสามารถระบุได้ว่าเราต้องการให้ hooks ก่อนและหลังดำเนินการด้วยแท็กเฉพาะหรือไม่ Example- @Before ('@ เว็บ') แนวคิดเดียวกันของแท็กตรรกะและ / หรือสามารถนำไปใช้กับ hooks ได้เช่นกันExample - @Before (@ dev, @ wip), @Before (@ dev, ~ @ wip)