Một số câu hỏi phỏng vấn cho Automation Engineer

Friday, January 01, 2021
Edit this post


Đã có Một số câu hỏi phỏng vấn cho Manual Tester thì cũng nên có một số câu hỏi phỏng vấn cho Automation Engineer (hay còn gọi là Automation QA) mới cân bằng nhỉ? Các câu hỏi sẽ có cả ở mức lý thuyết high level lẫn technical low level. Phần trả lời cho các câu hỏi bên dưới chỉ dừng ở mức ý tưởng. Để hiểu rõ hơn, các bạn cần chủ động research và practice.


Dựa trên kinh nghiệm thực tế, ngày nay các công ty phần mềm chỉ dựa vào các câu hỏi dạng như bên dưới để sàng lọc ứng viên ở vòng đầu chứ chúng không còn đóng vai trò quyết định nữa. Ở những vòng sau họ ưa thích các hình thức live coding (ứng viên code trực tiếp theo một yêu cầu gì đó từ người phỏng vấn) hoặc home assignment (ứng viên được yêu cầu làm một bài code hoàn chỉnh, sau đó người phỏng vấn sẽ đặt các câu hỏi dựa trên những gì ứng viên đã làm) hơn vì những hình thức này cho phép nhà tuyển dụng đánh giá ứng viên được chính xác và toàn diện. Do đó, chỉ đọc lý thuyết suông là chưa đủ, chỗ nào chưa rõ, bạn nên đọc documentation và code thử để hiểu được vấn đề một cách rõ ràng nhất.


Automation test là gì?

Là quá trình sử dụng các công cụ phần mềm, hoặc ngôn ngữ và công cụ lập trình để tự động hóa các bước kiểm thử và xác thực kết quả được gọi là automation test. 

Tuy vậy, trong thực tế khi tuyển một Automation Engineer thì nhà tuyển dụng luôn đòi hỏi ứng viên phải biết sử dụng ngôn ngữ và công cụ lập trình để có thể develop hoặc maintain các test framework sẵn có. Có khá nhiều bạn tự xưng là Automation QA nhưng khi hỏi OOP là gì? Page Object Model là gì? Hay những dev skills cơ bản nhất như resolve Git conflicts thì lại không trả lời được. Một Automation Engineer đúng nghĩa có thể sở hữu những dev skills tương đương với một developer nhiều năm kinh nghiệm.

Trách nhiệm của một Automation Engineer?

Automation Engineer không chỉ làm công việc viết automation script. Họ trước hết vẫn phải là một QA Tester đúng nghĩa. Đó là phải có sự am hiểu về mặt nghiệp vụ (business) của hệ thống. Có thể hiểu ít nhất mức độ quan trọng của việc kiểm thử, biết cách viết test case, log defect. Thực tế công việc thì người Automation Engineer sẽ kiêm luôn công việc của một Manual QA, và khi đã feature nào đã được hoàn tất, họ sẽ bắt tay vào việc implement các test case liên quan tới feature đó thành automation.

Trên thực tế, từ một QA thuần manual để chuyển sang Automation QA thực sự không phải là việc dễ dàng vì có dính tới code, và cũng đòi hỏi nhiều mindset, kỹ năng của một developer. Vì vậy, bạn cũng đừng ngạc nhiên khi thấy có nhiều Developer chuyển sang làm Automation QA nhưng từ Manual QA mà chuyển sang Automation thành công lại khá hiếm. Đó là bởi vì developer đã có sẵn dev skills và coding mindset, là những thứ cần rất nhiều thời gian + năng khiếu mới có được. Khi đó, chỉ cần học hỏi thêm mindset và kỹ năng cơ bản của một Manual QA là đã có thể bắt đầu con đường của một Automation QA được rồi.

Tuy nhiên, một full-stack QA không chỉ cần có Manual và Automation skills mà còn cần phải có ít nhiều kỹ năng của một DevOps để có thể tự deploy và maintain những gì mình đã xây dựng. Và cuối cùng là khả năng ngoại ngữ + giao tiếp để có thể deliver những gì mình đã và đang làm tới khách hàng.

Automation test framework là gì?

Có thể hiểu đơn giản đó là một application project được dựng lên để tự động hóa việc kiểm thử một ứng dụng nào đó. Như vậy, bản thân framework cũng chính là một ứng dụng. Nó cũng phải được thiết kế hoàn chỉnh, được apply những design pattern, và cũng phải dựa trên những định nghĩa, quy tắc cơ bản nhất của ngôn ngữ lập trình được sử dụng để phát triển nên framework đó. Framework có thể được deploy như một ứng dụng hoàn chỉnh, hoặc cũng có thể được đóng gói thành các thư viện để được nhúng vào các project khác.

4 tính chất cơ bản của Lập trình hướng đối tượng OOP (Object-Oriented Programming)?

Phần lớn các automation framework hiện nay được xây dựng dựa trên Selenium kết hợp với một ngôn ngữ lập trình hướng đối tượng (phổ biến nhất có lẽ là Java và C#). Vậy nên dĩ nhiên các câu hỏi phỏng vấn sẽ ít nhiều liên quan tới OOP.

4 tính chất cơ bản của OOP thì có lẽ ai cũng biết, đó là:
- Encapsulation (tính đóng gói).
- Abstraction (tính trừu tượng).
- Inheritance (tính kế thừa).
- Polymorphism (tính đa hình).

Nhưng để hiểu và giải thích được cặn kẽ cả 4 tính chất này thì bạn cần ít nhất 1-2 tiếng đồng hồ để thử practice và nghiền ngẫm qua các ví dụ đầy rẫy trên mạng.

Sự khác biệt giữa Interface và Abstract class?


- Trong Java, chúng ta chỉ có thể extend (kế thừa) một class cha duy nhất nhưng lại có thể implements nhiều interface khác nhau.
- Abstract class có thể chứa các abstract lẫn non-abstract methods, trong khi interface chỉ có thể chứa các abstract methods.
- Khi một class A kế thừa một abstract class hoặc implement một interface, tất các các abstract methods bắt buộc phải được override ở class A.
...


Selenium là gì?


Selenium là một framework được tạo ra để phục vụ cho việc automation test các ứng dụng web.

Appium là gì?


Appium is an open source automation tool for running scripts and testing native applications, mobile-web applications and hybrid applications on Android or iOS using a webdriver.

Nói một cách đơn giản, chúng ta sẽ cần đến Appium khi perform automation testing trên các mobile platforms như Android hay iOS.

Cucumber là gì?

Cucumber is a software tool that supports behavior-driven development. Central to the Cucumber BDD approach is its ordinary language parser called Gherkin. It allows expected software behaviors to be specified in a logical language that customers can understand.

Cucumber là một công cụ phần mềm hỗ trợ BDD (behavior-driven development). Ngôn ngữ được sử dụng trong Cucumber là Gherkin.


Sự khác biệt giữa Git và GitHub?

Simply put, Git is a version control system that lets you manage and keep track of your source code history. GitHub is a cloud-based hosting service that lets you manage Git repositories.

Yeah, một câu hỏi tưởng chừng đơn giản nhưng cũng có thể khiến nhiều người sa lưới. Nói một cách đơn giản, Git là một hệ thống quản lý version cho phép bạn quản lý và theo dõi lịch sử của source code. Trong khi đó, GitHub là một dịch vụ cloud hosting cho phép bạn quản lý các Git repo khác nhau.

Page Object Model là gì?


Page Object Model or POM  is a design pattern or a framework that we use in Selenium using which one can create an object repository of the different web elements across the application. To simplify, in the Page Object Model framework, we create a class file for each web page. This class file consists of different web elements present on the web page. Moreover, the test scripts then use these elements to perform different actions.

Page Object Model là một design pattern hoặc một framework mà chúng ta sử dụng trong Selenium. Nói một cách đơn giản, với mỗi trang ứng dụng cần test (ví dụ như trang Login) thì chúng ta sẽ tạo một class file tương ứng. Class này sẽ chứa các element locators tương ứng cho trang cần test (nút Login, Username field, Password field,...) và cả các keyword/action tương ứng (clickLoginButton, inputUsername,...).

Browser Factory là gì?


From our experience with frameworks we know that maintaining and passing around a WebDriver object across different tests is a delicate process. Also, the complexity increases when we have to maintain only one instance of a WebDriver through out the test run. To overcome the problem on instantiation of WebDriver and maintaining the instance of browser we can use create a small class called Browser Factory or WebDriver Factory.

Có thể hiểu Browser Factory như một design pattern giúp khởi tạo và duy trì browser instance, giúp hỗ trợ run test trên các browser khác nhau (Chrome, Firefox...) một cách đơn giản và dễ dàng hơn trong suốt quá trình chạy test. Nên thực hành để hiểu rõ câu hỏi này.

Data Driven là gì?

Về mặt định nghĩa, các bạn có thể tự tìm hiểu. Nhưng về mặt technical, một biểu hiện của Data Driven đó là với cùng một test method, bạn có thể run nó nhiều lần, với mỗi lần là 1 bộ data khác nhau, tương ứng với các test case khác nhau. Data Driven hầu như đều được hỗ trợ bởi các testing framework cơ bản như TestNG, JUnit, NUnit, Xunit, v.v...


Sự khác biệt giữa BDD và TDD?


Nói một cách đơn giản:

- Với BDD (Behavior-driven development), chúng ta sẽ viết trước các kịch bản và từng bước (step) bằng ngôn ngữ rất "con người" (human) rồi sau đó mới implement cụ thể các step/action/keyword đó. Cách tiếp cận này giúp cho những người không chuyên về code như PO, Manual Tester có thể thiết kế các kịch bản để kiểm thử một chức năng nào đó, phần lập trình cụ thể sẽ được đảm nhận bởi automation team hoặc developers.

Ví dụ:
When I login into our system with valid credentials
Then I should be able to see the welcome message
Then I should be able to see the logout link

Trong đó, "I login into our system with valid credentials", "I should be able to see the welcome message", "I should be able to see the logout link" là các step cụ thể được viết bởi PO, manual tester, các step này sẽ được map với các method cụ thể được lập trình bên dưới bởi automation team/developers.

- TDD (Test-driven development) là một cách tiếp cận trong đó các unit test sẽ được thiết kế và phát triển dựa trên requirments trước khi chương trình thật sự được hoàn thiện. Điều chúng ta mong đợi là chương trình được viết ra sau đó sẽ pass tất cả các unit test, nếu có test case nào fail, đó có thể là vì chương trình hoạt động chưa đúng như yêu cầu, cần phải được check lại.

Các kiểu chờ đợi (wait) trong Selenium?


Theo documentation từ Selenium, chúng ta có 3 kiểu wait là:
1) Implicit Wait: Chỉ cấu hình 1 lần duy nhất và apply cho tất cả các element trong trang. Ví dụ chúng ta cấu hình Implicit Wait có timeout là 10 giây thì mỗi khi tìm một element nào đó,chương trình sẽ đợi tối đa 10 giây trước khi quăng ra exception.

2) Explicit Wait: Áp dụng cho một element cụ thể, cho phép cấu hình timeout và điều kiện yêu cầu (expected condition). Ví dụ nếu sau 15 giây mà nút login không xuất hiện thì sẽ quăng ra exception.

3) Fluent Wait: Tương tự như Explicit Wait nhưng ngoài timeout và expected condition thì FluentWait còn cho phép cấu hình polling time, hay còn gọi là interval time, là khoảng cách giữa mỗi lần kiểm tra lại expected condition. Ví dụ, tôi set timeout=10 giây, pollingTime=0.5 giây, expectedCondition=element should be clickable và apply cho nút login thì trong vòng tối đa 10 giây, cứ mỗi 0.5 giây, chương trình sẽ check xem nút login đã có thể click được hay chưa.

Bài viết tạm dừng ở đây. Những câu hỏi phỏng vấn là vô chừng. Tôi sẽ tiếp tục bổ sung thêm những câu hỏi khác trong tương lai.

.
Xin vui lòng chờ đợi
Dữ liệu bài viết đang được tải về

BÌNH LUẬN

Cảm ơn bạn đã đọc bài viết của Cuộc Sống Tối Giản. Đây là một blog cá nhân, được lập ra nhằm mục đích lưu trữ và chia sẻ mọi thứ hay ho theo chủ quan của chủ sở hữu. Có lẽ vì vậy mà bạn sẽ thấy blog này hơi (rất) tạp nham. Mọi chủ đề đều có thể được tìm thấy ở đây, từ tâm sự cá nhân, kinh nghiệm sống, phim ảnh, âm nhạc, lập trình... Phần lớn các bài đăng trong blog này đều được tự viết, trừ các bài có tag "Sponsored" là được tài trợ, quảng cáo, hoặc sưu tầm. Để ủng hộ blog, bạn có thể share những bài viết hay tới bạn bè, người thân, hoặc có thể follow Kênh YouTube của chúng tôi. Nếu cần liên hệ giải đáp thắc mắc hoặc đặt quảng cáo, vui lòng gửi mail theo địa chỉ songtoigianvn@gmail.com. Một lần nữa xin được cảm ơn rất nhiều!!!
© Copyright by CUỘC SỐNG TỐI GIẢN
Loading...