Site icon saotuvi.com

Tìm hiểu về automation testing

Ngày nay vòng đời phát triển phần mềm thường chia thành nhiều giai đoạn ngắn, với sự thay đổi thường xuyên của mã nguồn để có được phản hồi sớm từ người dùng, vì vậy cần có phương pháp kiểm thử hiệu quả trước sự thay đổi thường xuyên đó.

Bên cạnh manual testing (kiểm thử thủ công), automation testing (kiểm thử tự động) là một phương pháp hứa hẹn, tuy nhiên cũng cần đánh đổi lại nhiều thứ để có thể áp dụng thành công. Trong bài hôm nay, chúng ta sẽ tìm hiểu automation testing là gì? Vai trò của automation testing trong vòng đời phát triển phần mềm, những kỹ năng cần thiết để trở thành automaion tester và nhiều nội dung khác.

1. Automation testing là gì?

1.1 Giới thiệu về automation testing

Trong kiểm thử phần mềm, kiểm thử tự động (Automation testing) là việc sử dụng phần mềm đặc biệt (tách biệt với phần mềm đang được kiểm thử) để kiểm soát việc thực hiện các bài kiểm tra và so kết quả thực tế với kết quả dự đoán từ trước. Nguồn wiki

Cùng với automation testing, chúng ta có manual testing (kiểm thử thủ công) sử dụng khả năng đánh giá của con người để xác định tính đúng đắn của các test case. Hiện nay tuỳ thuộc vào dự án và nhiều yếu tố khác về nhân sự, ngân sách mà cả hai loại hình kiểm thử này đều được áp dụng nhiều trong quá trình phát triển phần mềm.

1.2 Những dự án nào nên áp dụng automation testing

Nhìn chung automation testing sẽ phù hợp với những dự án mà quá trình manual testing quá tốn thời gian hoặc không thể thực hiện nếu làm một cách thủ công, có thể kể đến một vài đặc điểm của những dự án phù hợp để áp dụng automation testing:

1.3 Automation testing có thể thực hiện bởi ai? khi nào?

Automation testing có thể được thực hiện ở bất kỳ giai đoạn nào trong vòng đời phát triển phần mềm, và có thể được thực hiện bởi cả lập trình viên và tester.

Ngay trong giai đoạn đầu của dự án, các lập trình viên đã cần viết unit test để đảm bảo các đoạn mã nguồn nhỏ nhất trong chương trình của mình luôn hoạt động đúng.

Đến khi kết hợp các hệ thống con với nhau, thì cả lập trình viên và tester đều có thể viết API test để đảm bảo các thành phần trong phần mềm có thể tích hợp trơn tru với nhau.

Và đến khi hoàn thiện giao diện người dùng, tester có thể dùng automation testing để kiểm tra các tính năng của phần mềm dưới góc nhìn của người dùng cuối một cách tự động.

2. Ưu điểm của automation testing

3. Nhược điểm của automation testing

4. Automation testing hoạt động như thế nào

Nhìn chung, việc thực hiện automation testing sẽ trải qua những bước như sau:

1. Lựa chọn công cụ: Hiện nay có rất nhiều công cụ hỗ trợ choautomation testing, việc lựa chọn công cụ phụ thuộc vào nhiều yếu tố như loại kiểm thử cần thực thi là gì? khả năng sử dụng công cụ, ngôn ngữ lập trình của các thành viên hiện tại như thế nào? thời gian làm quen với công cụ mới có phù hợp với timeline dự án không?

2. Xác định các test case cần tự động hoá: Do không phải test case nào cũng phù hợp để thực hiện automation testing, vì vậy chúng ta cần có chiến lược phù hợp với tình hình dự án. Một số yếu tố cần cân nhắc tới như: test case đó có cần thực hiện lại nhiều lần không? Mức độ khả thi để thực hiện automation testing? chi phí để thực thi automation testing so với manual testing cho test case đó…

3. Lên kế hoạch, thiết kế và viết test script: Bước này chứa tất cả các hành động để có thể tạo được bộ test script hoành chỉnh đáp ứng được các yêu cầu đặt ra và đảm bảo timeline của dự án.

4. Thực thi test script: Test script được tạo ở bước trước đó sẽ được thực thi trên các môi trường khác nhau, từ đó, các thông số của phần mềm, cũng như kết quả của từng test case sẽ được tự động ghi nhận lại. Từ đó, chúng ta có được những báo cáo từ tổng quát đến chi tiết về chất lượng phần mềm đang được kiểm thử.

5. Bảo trì: Do trong suốt vòng đời phát triển và duy trì, phần mềm luôn có những thay đổi, vì vậy các test script cũng cần thay đổi theo để đảm bảo các thay đổi của phần mềm không gây ra lỗi, do đó chúng ta cần bảo trì các test script để đảm bảo automation testing sẽ vẫn chạy tốt qua mỗi lần phát hành.

5. Các loại Automation testing

5.1 Phân loại theo loại test

Functional testing và Non-functional testing

Có 2 loại chính, là kiểm thử chức năng và phi chức năng:

5.2 Phân loại theo giai đoạn kiểm thử

Test pyramid trong phát triển phần mềm

5.3 Phân loại theo cách test

Các loại kiểm thử trong phát triển phần mềm

6. Automation Frameworks

Các loại automation Frameworks

Automation Frameworks là tập các hướng dẫn hoặc các luật được sử dụng để tạo và thiết kế các test case. Một framework là sự kết hợp của các công cụ, thực hành được thiết kể để làm quá trình kiểm thử diễn ra hiệu quả hơn. Các hướng dẫn bao gồm tiêu chuẩn viết code, các phương pháp xử lý dữ liệu, lưu trữ kết quả kiểm thử, quy trình thực hiện kiểm thử …

6.1 Linear scripting (Record and playback)

Linear scripting là framework sử dụng công cụ để ghi nhận lại từng bước thực thi của tester với hệ thống khi tester thực hiện manual test, rồi framework sẽ tự động chuyển đổi từng bước ấy thành các đoạn script test tương ứng. Và khi cần, framework sẽ thực thi lại những đoạn script test trước đó để tái hiện lại hành động của tester.

Đây là framework đơn giản nhất, bởi tester có thể không cần biết code vẫn có thể thực hiện được. Trong quá trình kiểm thử, tester cần tạo các lần thực thi, rồi thao tác với phần mềm như người dùng cuối (lúc này công cụ sẽ tự động ghi nhận lại toàn bộ hành vi của tester trên phần mềm), rồi cần cấu hình để so sánh kết quả trên màn hình với kỳ vọng trong test case và lưu lại để sử dụng cho những lần sau.

Ưu điểm của framework này là tính đơn giản, nên nó phù hợp nhất với các nhóm tester nhỏ và người mới bắt đầu với automation testing. Tuy nhiên, nhược điểm là chúng ta lại không thể sử dụng lại những đoạn script trước đó, khó bảo trì, và không thể kiểm soát các phiên bản sau những lần thay đổi trong các bước thực thi.

6.2 Data-Driven Framework

Data-Driven framework là một framework sử dụng các giá trị đầu vào và đầu ra mong muốn được đọc từ nguồn dữ liệu bên ngoài để thực hiện quá trình kiểm thử.

Để sử dụng framework này, chúng ta cần tạo các script test mang tính khái quát cao nhất có thể, để không bị phụ thuộc vào dữ liệu đầu vào hay đầu ra của kịch bản kiểm thử. Sau đó, cần tạo dữ liệu là đầu vào, đầu ra mong muốn của từng kịch bản, các tập dữ liệu này có thể được lưu trữ trong các định dạng khác nhau như .xls, .xml, .csv hay database.

Framework này mang ưu điểm về sự tách bạch giữa script test, và data test, nên quá trình bảo trì script test sẽ dễ dàng hơn. Tuy nhiên quá trình bảo trình data test có thể phức tạp do có thể có quá nhiều trường thông tin cần điền để tiến hành kiểm thử. Quá trình tạo ra các script test cũng có thể phức tạo do cần đảm bảo tính khái quát và tách biệt với data test.

Data Driven framework phù hợp với những trường hợp kiểm thử không quá phức tạp về các bước thực thi nhưng lại phát sinh nhiều trường hợp do tập giá trị đầu vào và đầu ra là lớn.

6.3 Keyword-Driven Framework

Keyword-Driven framework là một kỹ thuật tạo kịch bản sử dụng các tệp dữ liệu chứa các từ khóa liên quan đến phần mềm cần được kiểm tra. Các từ khóa này mô tả tập hợp các hành động cần thực hiện để thực hiện một vài bước cụ thể.

Một bài kiểm tra dựa trên từ khóa bao gồm các từ khóa cấp cao, từ khoá cấp thấp, và các từ khóa chứa tham số, được tạo ra để mô tả hành động của một test case. Nó cũng được gọi là kiểm thử dựa trên bảng (table-driven testing) hoặc kiểm tra dựa trên từ hành động (action word based testing).

Để thực hiện Keyword-Driven framework, đầu tiên cần xác định một tập hợp các từ khóa rồi viết code để liên kết từng từ khoá với một hoặc hàm nào đó trong code đại diện cho hành động đó. Ở đây, mọi hành động như mở hoặc đóng trình duyệt, nhấp chuột, gõ phím, v.v. được mô tả bằng một từ khóa như openbrowser, click, TypeText … Cuối cùng, tester có thể viết các từ khoá thành những câu có nghĩa với người dùng cuối kèm theo tham số nếu cần và xác định đầu ra ngay trong chính câu mô tả đó.

Ưu điểm lớn nhất của framework này là tính tái sử dụng của script test rất cao, và tester hay Product owner có thể viết các test case dưới dạng ngôn ngữ tự nhiên theo một số quy tắc nhất định thay vì viết dưới dạng ngôn ngữ lập trình. Tuy nhiên đòi hỏi tester cần có nhiều kinh nghiệm để có thể phân tách các keyword cũng như các đối tượng, và các hàm một cách phù hợp để có thể tái sử dụng sau này.

6.4 Page Object Model Framework

Cách tổ chức File tương ứng với Page trong Page Object Model framework

Page Object Model (POM) là một design pattern được sử dụng phổ biến trong automation testing, ở đó, mỗi thành phần trên giao diện người dùng (nút bấm, ô nhập văn bản, menu …) được đại diện bởi một đối tượng trong script test. Trong mỗi đối tượng lại có các phương thức ứng với các hành vi của người dùng có thể tương tác với thành phần ấy. Một đối tượng (Object) lại có thể chứa nhiều đối tượng khác để mô phỏng lại cấu trúc của trang (Page).

Khi tạo test case, tester sẽ mô phỏng lại quá trình tương tác của người dùng với phần mềm thông qua việc khởi tạo các đối tượng một cách hợp lý, và gọi tới các phương thức đại diện cho hành vi của người dùng, và cuối cùng là so sánh các hiển thị trên giao diện với kỳ vọng đặt ra

Ưu điểm của framework này là tính tái sử dụng cao do các đối tượng thường lặp lại trên các màn hình khác nhau, dễ bảo trì do có sự tương ứng giữa code và các thành phần cần hiển thị cũng như thao tác của người dùng với từng thành phần. Tuy nhiên, tester sẽ gặp khó khăn khi phải tổ chức một cách khéo léo để có thể tái sử dụng lại được các test script, và số lượng test script sẽ tăng lên đáng kể.

6.5 Modular Framework

Framework này tổ chức các kịch bản kiểm thử thành các phần nhỏ hơn độc lập với nhau gọi là module để có thể tái sử dụng sau này.

Do trong quá trình kiểm thử, rất nhiều trường hợp chúng ta phải thực hiện nhiều lần một số các hành động nào đó ví dụ như việc đăng nhập vào hệ thống trước khi thực hiện kiểm thử, do vậy, khi đưa vào automation testing, chúng ta sẽ mong muốn những hành động này được thực thi chỉ qua một lần gọi hàm thay vì phải copy/paste hay viết lại các đoạn script đó từ đầu.

Modular framework mang đến khả năng tái sử dụng các đoạn script test cao, do đó tiết kiệm được thời gian bảo trì, chỉnh sau về sau. Tuy nhiên tester có thể gặp khó khăn trong việc xác định chính xác những tính năng, hành động nào có thể lặp đi lặp lại để đưa vào thành các module, và việc đưa đoạn script nào thành module có thể diễn ra ở giai đoạn sau, dẫn đến việc cần tái tổ chức lại mã nguồn, vì vậy các đoạn script test lúc này có thể chứa lỗi sau nhiều lần tái tổ chức.

7. Học gì để trở thành Automation tester?

7.1 Căn bản về kiểm thử phần mềm

Một số kiến thức căn bản trong vòng đời phát triển phần mềm

Dù bạn là tester thực hiện automation test hay manual test thì kiến thức về kiểm thử phần mềm vẫn là nền móng căn bản chung để có thể xử lý được công việc. Vì suy cho cùng, muốn thực hiện được kiểm thử thì đều xuất phát từ việc tester cần nghĩ ra được các test case sao cho bao phủ nhiều nhất các trường hợp có thể xảy ra, còn việc dùng sử dụng automation testing hay manual testing thì chỉ là công cụ để có thể thực hiện hoá các test case đó mà thôi.

Một số kiến thức căn bản về kiểm thử phần mềm có thể kể đến như:

7.2 Ngôn ngữ lập trình

Có 2 cách để có thể ra lệnh cho máy tính thực thi giúp tester những test case thay vì họ phải tự làm bằng tay:

  1. Sử dụng các công cụ ghi lại từng thao tác người dùng rồi cấu hình để có thể kiểm tra kết quả trên màn hình với kỳ vọng. Với cách này, tester không cần sử dụng ngôn ngữ lập trình, mà chỉ cần nắm rõ các chức năng mà công cụ cung cấp để có thể tạo được các trường hợp cho automation testing. Một số công cụ nằm trong loại này có thể kể đến như Katalon, Selinum IDE, UI.Vision RPA …
  2. Sử dụng ngôn ngữ lập trình để tạo ra các kịch bản cho automation testing. Với cách này, tester cần sử dụng được ít nhất một ngôn ngữ lập trình để có thể bắt đầu. Khi sử dụng cách này, tester có thể kiểm thử những trường hợp từ đơn giản đến phức tạp mà không bị phụ thuộc quá nhiều vào công cụ như cách 1.

Một cách tiếp cận thường thấy của các tester khi muốn bắt đầu với automation testing là họ sẽ có xu hướng phải thật thành thạo manual testing trước rồi mới bắt đầu học các kiến thức của automation testing. Trên thực tế, việc học một ngôn ngữ lập trình hay làm quen với các công cụ automation testing hoàn toàn có thể song song với quá trình học và làm manual testing.

Các bạn có thể lựa chọn một trong số các ngôn ngữ phổ biến được sử dụng trong automation testing như Python, Java, Javascript, Ruby, C# để bắt đầu hành trình chuyển sang automation tester.

7.3 Automation testing trên web hoặc mobile

Ứng dụng trên web và mobile

Sau khi sử dụng được một trong số các ngôn ngữ lập trình, bạn cần lựa chọn cho mình một công cụ hay framework để có thể viết những dòng mã lệnh đầu tiên cho automation testing của mình. Có thể kể đến các công cụ và ngôn ngữ sử dụng đi kèm khi chúng ta kiểm thử web, mobile như:

Như vậy có rất nhiều công cụ hỗ trợ chúng ta trong việc thực hiện automation testing. Việc lựa chọn công cụ nào thực sự không phải là việc đơn giản, cần xem xét đến nhiều yếu tố như thị trường đang sử dụng nhiều công cụ nào? Thời gian tiếp cận có nhanh không? Cộng đồng hỗ trợ có mạnh không? Mức độ bao phủ của công cụ ….

7.4 Kiểm thử API

API testing

Hiện nay, hầu hết các ứng dụng trên web, mobile hay desktop đều có kết nối tới máy chủ để có thể đồng bộ, lưu trữ, xử lý dữ liệu. Các ứng dụng này hầu hết sử dụng API (Application Programming Interface) để có thể giao tiếp với máy chủ. Khi kiểm thử API, tester đang kiểm tra các tính năng mà máy chủ cung cấp cho các ứng dụng của mình, và ở đây, tester có thêm một góc nhìn khác về phần mềm bên cạnh góc nhìn của người dùng cuối như kiểm thử chức năng trên giao diện.

Để có thể kiểm thử được API, tester cần có kiến thức về HTTP và một số giao thức API đang được sử dụng phổ biến như REST, gRPC, GraphQL, SOAP … Việc kiểm thử API có thể diễn ra trên 1 API đơn lẻ hoặc theo một luồng thực thi tuần tự các API theo một thứ tự nào đó để mô phỏng lại hành vi của người dùng cuối.

Lợi ích lớn nhất mà kiểm thử API đem lại chính là cung cấp cho tester một cơ chế để có thể kiểm thử sớm tính năng của hệ thống mà không cần đợi đến khi hoàn thiện giao diện người dùng, từ đó làm giảm thời gian phát hành sản phẩm. Ngoài ra, automation testing cho API sẽ dễ dàng, nhanh chóng và dễ bảo trì hơn so với automation testing trên giao diện người dùng.

7.5 Kiểm thử hiệu năng và kiểm thử bảo mật

Một số loại trong non-functional testing

Khi tester kiểm thử API hay giao diện người dùng thì đó là kiểm thử các tính năng của phần mềm, ngoài ra, chúng ta còn cần phải kiểm thử các khía cạnh phi chức năng để đảm bảo trải nhiệm và bảo mật cho người dùng. Đó là kiểm thử hiệu năng và kiểm thử bảo mật.

Để có thể thực hiện được kiểm thử hiệu năng, tester cần giả lập số lượng người dùng lớn và tương tác với hệ thống, đồng thời quá trình kiểm thử cần ghi nhận cả các thông số của hệ thống như RAM, CPU, thông lượng, thời gian phản hồi, tỷ lệ lỗi … Hiện nay có nhiều công cụ giúp tester thực hiện kiểm thử hiệu năng dễ dàng như: Apache JMeter, LoadNinja, Webload …

Để có thể thực hiện được kiểm thử hiệu năng, tester cần hiểu về ý nghĩa của các thông số trong hệ thống, ngoài ra tuỳ thuộc vào công cụ đang sử dụng thì tester cũng cần học để có thể sử dụng các tính năng mà công cụ đó đem lại.

Kiểm thử bảo mật đòi hỏi nhiều kỹ năng, hiểu về các thuật ngữ, và cần hiểu sâu về hệ thống hơn so với kiểm thử hiệu năng, và cũng cần sử dụng các công cụ để trợ giúp như Astra Security, Wireshark, OpenVAS…

8. Tổng kết

Automation testing được sử dụng rộng rãi trong quá trình phát triển phần mềm hiện nay (nhất là trong các nhóm thực hành Agile) bởi những lợi ích mà nó đem lại như giúp quá trình kiểm thử hồi quy diễn ra nhanh chóng, tái sử dụng được công việc đã làm trước đó, tích hợp tự động và có thể chạy liên tục và bất cứ khi nào có thay đổi trong mã nguồn.

Tuy nhiên để có thể áp dụng một cách hiệu quả thì không phải là dễ dàng bởi nó đòi hỏi tester cần có nhiều kỹ năng, kiến thức không chỉ về nền tảng của kiểm thử phần mềm, mà còn về kỹ năng lập trình, hiểu biết về hệ thống, và cả các kiến thức về bảo mật.

Automation testing có thể được áp dụng trong cả kiểm thử chức năng và phi chức năng, hay trong tất cả các giai đoạn kiểm thử, từ unit testing cho tới API testing và cả UI testing, hay trên các môi trường khác nhau như web, mobile, desktop. Ở mỗi loại automation testing, chúng ta có nhiều công cụ khác nhau để hỗ trợ quá trình kiểm thử diễn ra được dễ dàng và nhanh chóng.

9. Tài liệu tham khảo

Different Types of Testing in Software | BrowserStack

Looking for different types of software testing? Read this detailed guide to learn the different types of testing such as unit, UI, usability, system, etc.

BrowserStackKalpesh Doshi

What is Automation Testing? Test Tutorial

This tutorial covers automation testing definition, Test cases, Testing process, Tool selection, Test execution, Framework for automation, Benefits, and more.

Guru99Thomas Hamilton

Automation Testing for Agile Teams | Agile Test Automation Methodology

Modern software requires modern software testing approaches. Learn how to implement test automation in agile teams to utilize advantages of this methodology.

katalon.comTest Authoring

What Is Automation Testing? Ultimate Guide & Best Practices

Automation testing is a software testing technique that utilizes specialized automation testing tools to automatically run a suite of test cases.

KatalonContent Team

https://www.softwaretestinghelp.com/automation-testing-tutorial-2/

Exit mobile version