- vừa được xem lúc

Thực hiện automation test với hệ thống có yêu cầu xác thực email

0 0 77

Người đăng: Tam Nguyen

Theo Viblo Asia

I. Yêu cầu:

Việc đăng ký, đăng nhập là một thủ tục rất quen thuộc trong các hệ thống. Trong khi đó, nhiều hệ thống yêu cầu xác thực email khi đăng ký tài khoản. Khi bạn thực hiện test hệ thống, chắc đã quá quen với việc đăng ký và xác thực này.

Tuy nhiên, số lượng email cá nhân là có hạn, vậy làm sao có đủ email để thực hiện test đi test lại chức năng này, chưa kể khi test các chức năng phía sau cần phải đăng nhập vào, có thể nói số lượng email phải sử dụng là rất lớn. Vì vậy chúng ta có các dịch vụ disposable email (nôm na là email sử dụng một lần), chắc hẳn nhiều bạn đã quen với các dịch vụ/hệ thống này, vậy nay mình xin liệt kê lại một vài website có hỗ trợ disposable email:

Các hệ thống disposable email phổ biến:

Vậy cách thức thực hiện như nào?

Thông thường, disposable email mình có thể tự nhập tên email, phía sau @ sẽ sử dụng domain của các hệ thống này. Ví dụ với qa.team, khi đăng ký chúng ta có thể sử dụng email _@.com để đăng ký, sau đó vào qa.team nhập tam.nguyen và có thể nhận các email bình thường.

Đối với hệ thống temporary email như https://temp-mail.org, hệ thống sẽ tự generate email cho chúng ta, chúng ta chỉ việc copy email đó để đăng ký và quay lại hệ thống để nhận mail.

Vậy thực hiện automation với hệ thống có yêu cầu email verification thì thế nào?

Tương tự như manual, chúng ta có thể thực hiện nó ngay trên tầng UI. Manual như nào thì chúng ta có thể thực hiện với automation như vậy. Mặc dù các hệ thống này có support API, tuy nhiên để gần với user behavior nhất thì trong bài viết này mình sẽ sử dụng Selenium Java để thực hiện automation ngay trên UI.

II. Sử dụng Selenium java để thưc hiện automate cho hệ thống yêu cầu email verification

Hãy cùng thử viết một project automation cho website https://playground.mailslurp.com/

1. Import các thư viện cần thiết

Đầu tiên, hãy cũng tạo một project demo cho yêu cầu này. Mình sử dụng Maven project và add các depedencies cần thiết vào: Ở đây chỉ là thư viện của Selenium, TestNG và WebDriverManager để quản lý webdriver

 <dependencies> <!-- TestNG --> <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>6.8.8</version> </dependency> <!-- Selenium Java --> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>3.141.59</version> </dependency> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-support</artifactId> <version>3.141.59</version> </dependency> <dependency> <groupId>io.github.bonigarcia</groupId> <artifactId>webdrivermanager</artifactId> <version>3.6.0</version> </dependency> </dependencies>

2. Các bước đăng ký có verify email cho website demo https://playground.mailslurp.com/

Các bước manual ở đây sẽ như sau:

1. Đăng ký

register

2. Đăng nhập

  • Điền email vừa đăng ký
  • Nhập password
  • Nhấn nút đăng nhập
  • Kiểm tra đăng nhập thành công

login

Tương tự như vậy, bắt tay vào viết 1 class để chạy nhé

2. Viết class test để thực hiện automate cho các step bên trên

Ở đây mình có một class sử dụng Java, Selenium và TestNG để automate các bước phía trên như sau:

public class DisposableEmail { private WebDriver driver; private String email, password, emailContent, confirmationCode; private JavascriptExecutor jsExecutor; /** * Hàm này chạy trước mọi method khác * Gán và khởi tạo Chrome driver * Khai báo hàm jsExecutor để sử dụng javascript executor * gán giá trị random cho email tránh trùng lặp dữ liệu * gán giá trị cho password */ @BeforeClass public void beforeTest(){ //Sử dụng thư viện WebDriverManager để phát hiện phiên bản chrome đang dùng, từ dó tự động download phiên bản webdriver tương ứng WebDriverManager.chromedriver().setup(); //Khởi tạo driver driver = new ChromeDriver(); //Phóng to màn hình chrome để script có thể chạy ổn định hơn driver.manage().window().maximize(); //Set implicitwait, bạn nào chưa hiểu về wait thì google thêm nhé driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); //Khởi tạo jvavascript executor jsExecutor = (JavascriptExecutor) driver; //Gán giá trị cho email và password. Ở đây email mình sử dụng thêm randomNumber để tránh trùng email khi chạy nhiều lần email = "tam.nguyen" + randomNumber() + "@mailsac.com"; password = "12345678"; } /** * Đăng ký tài khoản và xác minh địa chỉ email */ @Test(priority = 1) public void registerAccount(){ //Truy cập vào website demo driver.get("https://playground.mailslurp.com/"); //Click vào register account link driver.findElement(By.xpath("//a[text()='Create account']")).click(); //Điền vào email textbox - email là biến đã được gán số random ở trên, email sẽ có dạng _@.com driver.findElement(By.xpath("//input[@name='email']")).sendKeys(email); //Điền vào password textbox = 12345678 driver.findElement(By.xpath("//input[@name='password']")).sendKeys(password); //Click vào nút "Create account" driver.findElement(By.xpath("//button[text()='Create Account']")).click(); //Sử dụng javascript executor để mở một tab mới và truy cập website mailsac.com jsExecutor.executeScript("window.open('http://mailsac.com','_blank');"); //Lấy các tabs hiện tại đang có và switch qua tab có index = 1, lúc này mailsac.com đang ở tab thứ 2 nên sẽ có index = 1 ArrayList<String> tabs = new ArrayList<String>(driver.getWindowHandles()); //Switch qua tab mailsac.com vừa mở driver.switchTo().window(tabs.get(1)); //Điền email mới đăng ký vào textbox driver.findElement(By.xpath("//input[@placeholder='anything']")).sendKeys(email); //Nhập vào nút "Check the email" để truy cập mailbox driver.findElement(By.xpath("//button[@class='btn btn-primary']")).click(); //Click vào mail để mở nội dung email driver.findElement(By.xpath("//td[@class='col-xs-5 ng-binding']")).click(); //lấy text của nội dung email và gán cho biến "emailContent" emailContent = driver.findElement(By.xpath("//div[@class='ng-binding ng-scope']")).getText(); //Sử dụng regex để xác định dãy số có 6 chữ số trong email content Pattern date = Pattern.compile("[0-9]{6}"); Matcher matcher = date.matcher(emailContent); matcher.find(); //Gán giá trị số có 6 chữ số (confirmation code) cho biến confirmationCode confirmationCode =emailContent.substring(matcher.start(), matcher.end()); //Switch về lại tab playground.mailslurp.com (index = 0) driver.switchTo().window(tabs.get(0)); //Điền confirmation code driver.findElement(By.xpath("//input[@name='code']")).sendKeys(confirmationCode); //Click to Confirm button driver.findElement(By.xpath("//button[text()='Confirm']")).click(); } /** * Đăng nhập vào hệ thống bằng email vừa mới đăng ký ở bước trên */ @Test(priority = 2) public void loginToSystem(){ //Truy cập lại website driver.get("https://playground.mailslurp.com/"); //Điền email vừa đăng ký driver.findElement(By.xpath("//input[@name='username']")).sendKeys(email); //Điền password driver.findElement(By.xpath("//input[@name='password']")).sendKeys(password); //Click sign in button driver.findElement(By.xpath("//button[text()='Sign In']")).click(); //Kiểm tra đăng nhập thành công //Kiểm tra màn hình welcome xuất hiện Assert.assertTrue(driver.findElement(By.xpath("//h1")).getText().equals("Welcome")); } @AfterClass public void afterTest(){ driver.quit(); } /** * Hàm sinh ra random number * @return randomNumber để gán vào email, tránh bị trùng lặp email khi chạy nhiều lần */ public int randomNumber(){ Random random = new Random(); int randomNumber = random.nextInt(); return randomNumber; }
}

Ở phía trên, hầu hết các câu lệnh đã được giải thích trong comment, hầu hết là thực hiện các bước y như manual. Nếu các bạn có câu hỏi nào có thể google hoặc để lại comment nhé

Ở đây mình chỉ tạo một class viết step by step, mọi người tự áp dụng vào framework của mình nhé

Referencies: https://github.com/npmtam/Automation-Testing-Articles/issues/2

Bình luận

Bài viết tương tự

- vừa được xem lúc

Xử lý Table, Frame và Dynamic Element của Web trong Selenium Script – Selenium Tutorial #18

Table, Frame và Dynamic Element là các phần thiết yếu không thể thiếu của bất kỳ web project nào. Chúng ta hãy cùng nhau tìm hiểu cách xử lý chúng trong tập lệnh selenium nhé.

0 0 100

- vừa được xem lúc

Những Selenium Exception thường gặp và cách xử lý chúng – Selenium Tutorial #19

Bắt một exception - ngoại lệ trong mã tự động hóa là rất phổ biến. ‘Ngoại lệ’ biểu thị trường hợp đặc biệt hoặc không phổ biến.

0 0 30

- vừa được xem lúc

Giới thiệu về SelectorsHub - thế hệ mới của XPath & Selectors tools

1/ Giới thiệu:. Locators đóng một vai trò rất quan trọng trong các automation script.

0 0 54

- vừa được xem lúc

Tự học JMeter A - Z (P1)

Series này được viết ra để tổng hợp các kiến thức mình tự học được về JMeter. Hope you enjoy it. . Download Java JDK.

0 0 615

- vừa được xem lúc

Automation test mà không cần code

Chào các bạn, lần này mình sẽ viết 1 chủ đề mà nhiều bạn Manual test quan tâm đó chính là làm thế nào để có thể thực hiện Automation test mà không cần code, hoặc code gà như mình vẫn có thể thực hiện

0 0 50

- vừa được xem lúc

Tìm hiểu về Automation Web Testing với Selenium & Cucumber

Selenium là gì. . . Selenium chỉ tập chung vào việc tự động hóa các ứng dụng dựa trên Web.

0 0 292