Giới thiệu về ReportPortal.io và kết hợp với Katalon Studio (Part-1)

ReportPortal.io có gì hot so với các bạn đồng trang lứa?

AI-powered Test Automation Dashboard

Để giải thích ngắn gọn, ReportPortal.io là một ứng dụng hỗ trợ phân tích kết quả khi chạy Test Automation và áp dụng nền tảng AI. Với các bạn đang làm Test Automation thì thường sẽ gặp khó khăn trong việc quản lý kết quả sau mỗi lần chạy automation cũng như phân tích kết quả đó. Vì vậy, ReportPortal.io ra đời như là một giải pháp để các bạn có thể cảm thấy cuộc sống dễ dàng hơn với những công việc trên. Ngoài ra thì nó còn có kèm theo những tính năng rất hữu ích mà mình sẽ đề cập trong bài viết này ❤

Các tính năng cơ bản

Cung cấp cơ chế hiển thị kết quả khi chạy test automation theo thời gian thực

ReportPortal cung cấp khả năng cập nhật cũng như hiển thị kết quả test và thông tin chi tiết về logs liên tục trong quá trình chạy test automation. Hãy tưởng tượng bạn cần phải chạy một bộ test suite có 200 test scripts và ngay ở những scripts đầu tiên nó đã bị failed do những tác nhân phía môi trường test (Database server không hoạt động, network bị mất kết nối, etc.) , lúc này bạn có thể mở ReportPortal Dashboard lên và biết ngay là hiện tại môi trường đang có gặp những vấn đề nào và cần phải làm gì để giảm thiểu thời gian bị lãng phí.

Quản lý mọi kết quả của những lần chạy test automation và hỗ trợ những thông số để đánh giá chất lượng test script

ReportPortal.io sẽ quản lý toàn bộ test result và hỗ trợ những thông số để giúp cho mọi thành viên trong dự án có thể xem xét và đánh giá về mức độ hữu ích mà test automation mang lại cho dự án. Hãy tưởng tượng cách ReportPortal.io cho các bạn biết mức độ ổn định của 1 test script, thời gian chạy trung bình của 1 test suite, số lượng bugs mà test automation phát hiện được, etc.

Sử dụng AI để phân tích kết quả sau khi chạy của 1 test script

Bạn nào làm nhiều automation thường sẽ bị tình trạng chạy 1 bộ test suite và sau đó ngồi phân tích từng test script bị failed để coi thử rằng liệu nó có bug ở application hay là do những nguyên nhân khác khiến test script bị failed và rồi sau đó phải chạy lại những script đó lần nữa. Đó là 1 quá trình đau khổ và có thể khiến bạn tốn thời gian tới 1 ngày trời. Và từ những điều đó thì ReportPortal.io đã sử dụng AI để tự động phân tích kết quả sau mỗi lần chạy test suite dùm các bạn, nhờ vậy các bạn có thể giảm thiểu thời gian phân tích kết quả đi khá là nhiều, giờ đây thì các bạn sẽ dễ dàng biết được những script nào bị failed là do lỗi môi trường, test script không còn tương thích với version hiện tại của hệ thống.

Hướng dẫn cài đặt ReportPortal.io

Hiện tại thì ReportPortal đã có sẵn file docker-compose.yml, cho nên các bạn cứ theo hướng dẫn bài viết ở trang chủ để có thể cài đặt ReportPortal.io trên máy của mình, ngoài ra bạn nào chưa biết về docker thì có thể tham khảo bài viết dưới đây để nắm rõ nhưng lệnh cơ bản để tiến hành cài đặt ReportPortal.io:

Hướng dẫn các lệnh cơ bản với docker

Ngoài ra thì mình có 1 vài lưu ý nhỏ cho đồng đạo nào đang xài windows mà muốn cài đặt ReportPortal.io:

  • Hiện tại thì docker image cho mongoDB trên Windows đang bị lỗi cho nên nếu các bạn sử dụng file mặc định docker-compose.yml của ReportPortal.io thì các bạn phải xóa value dưới đây ra khỏi file docker-compose:
    volumes:
    – ‘./data/mongo:/data/db’
  • Nếu không sử dụng external volumes cho mongoDB trong ReportPortal.io thì các bạn sẽ không giữ lại được data mỗi khi các bạn restart máy hoặc restart docker
  • Bạn nào sử dụng Windows thì có giải pháp hơi lòng vòng đó là sử dụng virtualbox, cài 1 image Ubuntu và sau đó cài đặt docker và cài đặt ReportPortal.io trong image đó

Hiện tại các bạn có thể làm theo hướng dẫn bài viết này của tụi mình để cài đặt ReportPortal.io trên máy mình.

Part 1 : Tích hợp ReportPortal.io vào Katalon Studio

Đọc tới đây thì chắc các bạn cũng hình dung được ReportPortal.io nó vi diệu như thế nào rồi, giờ tới lúc mình cùng tìm hiểu xem làm sao để “xài” nó, tức làm thế nào để tích hợp nó vào các test framework hoặc các công cụ kiểm thử tự động (automation testing tools).

Ở phần 1 này, mình sẽ giới thiệu cách tích hợp ReportPortal vào Katalon Studio – một công cụ kiểm thử tự động của công ty KMS Technology.

Khâu chuẩn bị

  • Tải và cài đặt Katalon Studio phiên bản mới nhất (chỉ cần giải nén và chạy file .exe). Ngoài lề chỗ này là dạo gần đây không biết vì sao Katalon Studio ra version liên tục như gà đẻ trứng 😦 nên cứ update version mệt mỏi luôn.
  • Làm theo hướng dẫn để dựng lên một server ReportPortal.io của riêng bạn.

P/S :  chuẩn bị thêm tinh thần viết code Groovy nữa nha <(“).

Khâu phân tích và chiêm nghiệm

Đối chiếu các khái niệm của ReportPortal vào Katalon Studio
Launch

Như đã định nghĩa trong tài liệu của ReportPortal.io, launch là một đối tượng lưu dữ liệu của một lần thực thi.

Trong Katalon Studio, khi bạn thực thi (nói trắng ra là bấm nút Run trên IDE ấy) một test suite thì một launch được tạo trên ReportPortal, khi bạn chạy nhiều test suite cùng lúc (dùng tính năng suite collection trong Katalon) thì tương đương nhiều launch sẽ được tạo.

Trên thực tế, một launch được thiết kế để chứa nhiều suite nhưng do cơ chế hoạt động của Katalon khá vi diệu nên một launch sẽ tương ứng với một suite.

Test Item

Một launch tập họp nhiều test item, một test item có thể là một test case, test step hoặc test suite, v.v… nó là gì tùy bạn quyết định. Bản thân một test item có thể chứa nhiều test item bên trong nó, khi đó các test item ở bên trong được gọi là test item con (child test item) và test item chứa các con là test item cha (parent test item).

Ở trên một launch đã tương ứng với một suite, nên theo tính chất bắc cầu thì các test case của một suite được xem là test item của launch và bắc thêm cái cầu nữa thì  các test step của test case sẽ là child của test item đó.

Issue

Trong quá trình thực thi, việc test script bị fail là điều không thể tránh khỏi (cuộc sống mà!), lúc đó mình sẽ ra lệnh ReportPortal đánh các test script đó một “thẹo” (nhiều test step bị fail tương ứng với nhiều thẹo). Mặc định, ReportPortal có sẵn 5 loại thẹo (nhưng bạn có thể chế thêm) :

  • To Investigate  :  đây là những lỗi lạ xảy ra trong quá trình thực thi và đang đợi bạn chẩn đoán.
  • Product bug : lỗi của app (thấy là submit liền tay).
  • Automation bug : lỗi của automation scripts, ví dụ : scripts cũ như chưa từng được cũ.
  • System issue : lỗi hệ thống, ví dụ: bị crash, mạng siêu chậm.
  • No defect : đây là những lỗi xạo, ban đầu báo lỗi nhưng sau quá trình chẩn đoán pháp y các kiểu thì nó không phải là lỗi.

Mình muốn giới thiệu sơ lược về mấy loại thẹo này để khi gặp mấy hình tròn xanh đỏ vàng trên ReportPortal các bạn biết nó là gì.

Và một điều nữa các bạn nên biết là việc đánh thẹo chỉ có tác dụng lên các test item có status là FAILED hoặc SKIPPEDví dụ khi bạn cố đánh thẹo cho một test item có status là PASSED, thì đánh cỡ nào nó cũng không dính.

Khâu hiện thực (và đọc code mẫu)

Cách thực hiện việc integrate

Để tạo một đối tượng launch hay test item, các bạn phải gửi 2 request lên server ReportPortal : một request để khởi tạo (start) đối tượng và một request để dừng (finish) đối tượng đó. Lý do vì sao phải gửi 2 request này là do ReportPortal thích thế <(“).

Trong suốt quá trình một đối tượng được tạo cho đến khi nó dừng, bạn hoàn toàn có quyền ra lệnh ReportPortal làm bất cứ gì với đối tượng bằng cách gửi các request tương ứng cho các tác vụ đó (đánh thẹo cho cái đối tượng đang chạy chẳng hạn). Nhưng một khi đối tượng đã dừng (request finish đã được gửi), bạn không còn quyền tác động đến nó nữa.

Túm lại, luồng hiện thực của chúng ta sẽ như sau :

  1. Gửi request tạo launch (Katalon Suites)
  2. Gửi request tạo test item cha (Katalon Test Cases)
  3. Gửi request tạo test item con (Katalon Test Steps)
  4. Gửi request dừng test item con.
  5. Gửi request dừng test item cha.
  6. Gửi request dừng launch.

Ở các bước gửi request finish các test item (4,5), các request đó phải kèm theo trạng thái (status) của test script (Pass, Fail, v.v..). Trong ReportPortal, có 6 loại trạng thái : PASSED, FAILED, SKIPPED, STOPPED, CANCELLED, INTERRUPTED nhưng trong Katalon chỉ có 3 loại : PASSED, FAILED, ERROR. Do đó ta phải xào nấu nhào nặn để cả Katalon và ReportPortal có chung tiếng nói :

Katalon Studio status ReportPortal status Issue
PASSED PASSED No defect
FAILED FAILED Product bug
ERROR FAILED To investigate

Các bạn theo đường link này để vào xem danh sách các API của ReportPortal để ra lệnh cho nó: https:// [server ReportPortal của bạn]/ui/#api

Tạo Listener

Ở bước này, các bạn cần tạo một class (nằm trong thư mục Keyword) hiện thực ExecutionListenerEventHandler interface (cái này của Katalon), sau đó nhét code của bạn vào phương thức handleListenerEvent của interface đó.

@Override
public void handleListenerEvent(ExecutionListenerEvent event, Object[] testParam) {
    // TODO : your code here
}

Trong đó, event tương đương các giai đoạn của quá trình thực thi, và tùy theo giai đoạn thì tham số testParam nhận vào các giá trị khác nhau (đại loại tham số này có thể giúp bạn lấy tên test script, tên step, v.v…)  :

switch (event) {
        case ExecutionListenerEvent.AFTER_TEST_SUITE:
            endSuite()
            break
        case ExecutionListenerEvent.BEFORE_TEST_CASE:
            startTest()
            break
        case ExecutionListenerEvent.AFTER_TEST_CASE:
            endTest(status)
            break
        case ExecutionListenerEvent.BEFORE_TEST_STEP:
            startStep()
            break
        case ExecutionListenerEvent.AFTER_TEST_STEP:
            endStep(status)
            break
        default:
            break
}
Sử dụng Listener

Chúc mừng bạn, tới đây thì bạn đã có đầy đủ điều kiện để xài ReportPortal với Katalon rồi, công việc còn lại là tìm chỗ để nhét listener vào thôi, nhét đúng chỗ là ReportPortal auto chạy.

Bước này đơn giản lắm, bạn mở suite của Katalon lên ở script mode của suite đó và nhét vào câu lệnh này (nhớ thay cái MyListener bằng tên Listener của mấy bạn nha).

@SetUp(skipped = false)
def setUp() {
    ExecutionEventManager.getInstance().addListenerEventHandle(new MyListener())
}

Tận hưởng thành quả nào !!! Dưới đây là một vài hình ảnh minh họa sau khi tích hợp ReportPortal vào Katalon.

Tham khảo code mẫu

Các bạn có thể tham khảo code mẫu ở link này, giải nén và copy 2 thư mục bên trong vào project Katalon của bạn. Các bước sử dụng code mẫu như sau :

  1. Thay giá trị của các biến trong ReportPortal profile bằng thông tin trên ReportPortal server của bạn :
    • RP_HOST : API host của ReportPortal. Ex : http://127.0.0.1:8080/api/v1
    • RP_TOKEN : ‘Bearer’ + giá trị UUID (bạn có thể tìm thấy giá trị này trong user profile của bạn). Ex : Bearer f974e146-5f90-4912-9332-5b77d7bbd3d8userprofile
    • RP_NAME : tên project của bạn trên ReportPortal.
  2. Vào suite của bạn ở script mode, chèn đoạn code này vào phương thức setUp (nhớ đổi skipped = false). Đoạn code bên dưới có nghĩa nó sẽ tạo ra một launch có tên là API_Sample_Suite mỗi lần bạn chạy cái suite đó.
@SetUp(skipped = false) // Please change skipped to be false to activate this method.
def setUp() {
	// Put your code here.
	ExecutionEventManager.getInstance().addListenerEventHandle(new ReportPortalListener("API_Sample_Suite"))
}

Hết phần 1

Vậy là xong phần 1, các bạn đã biết được làm thế nào để “xài” ReportPortal với Katalon Studio rồi đó. Các phần tiếp mình sẽ giới thiệu cách sử dụng ReportPortal.io với các test framework trên JavaScript như Protractor, CucumberJS, etc.

Chắc sẽ có vài bạn thắc mắc là Katalon Studio có hỗ trợ Katalon Analytics vậy thì sao mình lại còn đi sử dụng ReportPortal.io. Thiệt ra lý do cũng đơn giản thôi nó phụ thuộc vào 3 chữ TTT (Tại Tôi Thích), nói đùa thôi chứ Katalon Analytics mình thấy cũng tốt nhưng nếu so với ReportPortal.io hiện giờ thì nó đang thiếu khá nhiều thứ, từ dashboard ko có nhiều metrics cũng như graph chưa hữu ích cho tới việc vẫn chưa thật sự có AI trong khâu tự động phân tích kết quả (mà mình nghĩ tương lai có khi Katalon Analytics lại có thể xây dựng hệ thống AI thông minh hơn ReportPortal.io, có thể họ sẽ lấy những kết quả của chính các bạn đang sử dụng Katalon Studio để train ra model, chỗ này mình cũng không thích lắm nếu đó là sự thật vì khi đó :)) ai sẽ là người bảo đảm các thông tin nhạy cảm của dự án các bạn được an toàn nè 😀 ).

One comment

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s