Đang tải...

Lửng Lọc Lõi

Đeo kính để soi Bug cho rõ, nhíu mày để nhắc Dev sửa cho kỹ. Với tôi, 'chạy được' thôi là chưa đủ! 🧐💻


0

Postman Kết Hợp Selenium: Test API Và Web Toàn Diện Cho Người Mới

Lửng Lọc Lõi
Lửng Lọc Lõi

5 tháng trước · 16 phút đọc

Tại sao fresher cần học cả Postman lẫn Selenium?

Mình nhớ hồi mới học testing, cứ nghĩ chỉ cần biết một tool là đủ. Học xong Postman, tưởng xin được việc ngay. Thực tế? JD nào cũng ghi "có kinh nghiệm Postman VÀ Selenium" - thiếu một là tự loại mình khỏi vòng lọc CV.

Trong phần lớn tin tuyển dụng tester tại Việt Nam, hai công cụ này xuất hiện cùng nhau. Lý do đơn giản: một app hoàn chỉnh có hai tầng cần test - tầng API (backend) và tầng giao diện (UI). Postman lo phần API, Selenium lo phần UI. Thiếu bên nào là bỏ sót cả tầng lỗi.

343449 Postman và Selenium cover đúng 2 tầng của mọi ứng dụng web

Điều mình muốn nói rõ ngay từ đầu: bạn không cần biết lập trình mới học được hai tool này. Postman dùng giao diện click, không cần code. Selenium có thể dùng IDE record-and-playback cho người mới. Code Python/Java cho Selenium nâng cao hơn, nhưng không phải điều kiện bắt buộc để bắt đầu.

Bài này mình chia theo thứ tự thực tế: học Postman trước (nhanh hơn, trực quan hơn), sau đó học Selenium, rồi kết hợp cả hai vào một workflow test hoàn chỉnh để đưa lên portfolio.


Postman cơ bản: Test API mà không cần viết một dòng code

Postman là công cụ giúp bạn gửi request lên server và xem response trả về - tất cả qua giao diện click. Hiểu đơn giản: bạn đang "giả làm" ứng dụng, gọi thẳng vào API để xem nó hoạt động đúng không, trả về dữ liệu đúng không.

Cài Postman tại trang tải Postman chính thức - miễn phí, hỗ trợ Windows/Mac/Linux.

Giải thích 4 khái niệm cần biết trước

  • HTTP Method: Loại hành động bạn muốn làm. GET = lấy dữ liệu. POST = tạo mới. PUT/PATCH = sửa. DELETE = xóa.
  • Endpoint: Địa chỉ URL của API. Ví dụ: https://api.example.com/users/1
  • Request body: Dữ liệu bạn gửi kèm (thường ở POST/PUT). Định dạng JSON là phổ biến nhất.
  • Response: Dữ liệu server trả về, bao gồm status code và body.

Status code là thứ bạn kiểm tra nhiều nhất:

  • 200 OK = thành công
  • 201 Created = tạo mới thành công
  • 400 Bad Request = request sai (lỗi phía người dùng)
  • 401 Unauthorized = chưa đăng nhập/token hết hạn
  • 404 Not Found = không tìm thấy resource
  • 500 Internal Server Error = lỗi phía server

343450 Status code 200 không có nghĩa API đúng - còn phải kiểm tra dữ liệu trong response body

Template request API cơ bản - 3 loại hay gặp nhất

1. GET - Lấy danh sách sản phẩm

Method: GET
URL: https://api.yourapp.com/products
Headers:
  Authorization: Bearer {{token}}
Expected: Status 200, body có array products

2. POST - Đăng nhập lấy token

Method: POST
URL: https://api.yourapp.com/auth/login
Headers:
  Content-Type: application/json
Body (raw JSON):
{
  "email": "[email protected]",
  "password": "Test@12345"
}
Expected: Status 200, body có field "token"

3. PUT - Cập nhật thông tin user

Method: PUT
URL: https://api.yourapp.com/users/{{userId}}
Headers:
  Authorization: Bearer {{token}}
  Content-Type: application/json
Body:
{
  "name": "Tên Mới",
  "phone": "0901234567"
}
Expected: Status 200, body có field "updated_at"

Các template này bạn tải về và điền vào Postman là dùng được ngay: Tải template request API cơ bản

Viết test script đơn giản trong Postman

Postman có tab Tests cho phép viết JavaScript tự kiểm tra response. Nghe tới JS nhiều bạn sợ - thật ra chỉ cần copy 3 dòng này:

// Kiểm tra status code
pm.test("Status 200", () => pm.response.to.have.status(200));

// Kiểm tra response có field token
pm.test("Có token", () => {
  const body = pm.response.json();
  pm.expect(body.token).to.exist;
});

// Lưu token vào biến để dùng cho request tiếp theo
pm.environment.set("token", pm.response.json().token);

Đây là 3 đoạn script cơ bản nhất - không cần hiểu sâu JS, chỉ cần biết nó dùng để làm gì và copy đúng chỗ. Mình khuyên bạn chạy thử với API mẫu miễn phí như JSONPlaceholder - API mẫu miễn phí để luyện tập trước khi test API thật.


Selenium cơ bản: Tự động hóa giao diện mà không sợ popup hay Ajax

Selenium là framework tự động hóa trình duyệt. Thay vì bạn tự click từng bước trên web, Selenium làm thay - mở trình duyệt, tìm element, click, nhập liệu, kiểm tra kết quả.

Mình gặp nhiều bạn mới học Selenium bỏ cuộc ở bước đầu vì script báo lỗi liên tục. Lý do phổ biến nhất: popupAjax. Bài này mình tập trung thẳng vào hai vấn đề đó.

Cài đặt Selenium IDE trước (không cần code)

Selenium IDE là extension Chrome/Firefox cho phép record-and-playback - bạn thao tác trên trình duyệt, nó tự ghi lại thành script. Phù hợp tuyệt đối cho người mới chưa biết code.

Cài tại: Selenium IDE trên Chrome Web Store

Sau khi cài, bạn chỉ cần:

  1. Mở Selenium IDE
  2. Nhấn nút Record
  3. Thao tác trên web như bình thường
  4. Nhấn Stop, đặt tên test
  5. Nhấn Play để chạy lại

343451 Record một lần, chạy mãi - Selenium IDE phù hợp cho fresher chưa biết code

Xử lý popup - Lỗi phổ biến số 1

Có 3 loại popup hay xuất hiện và mỗi loại xử lý khác nhau:

Popup trình duyệt (Alert) - hộp thoại xám của browser:

# Python + Selenium WebDriver
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
wait = WebDriverWait(driver, 10)  # chờ tối đa 10 giây

# Chờ alert xuất hiện rồi mới xử lý
alert = wait.until(EC.alert_is_present())
alert.accept()  # nhấn OK
# hoặc alert.dismiss() để nhấn Cancel

Popup dạng modal (div overlay) - loại do website tự tạo:

# Chờ button đóng popup hiện ra rồi click
close_btn = wait.until(
    EC.element_to_be_clickable((By.CSS_SELECTOR, ".modal-close"))
)
close_btn.click()

Cookie consent popup - phổ biến ở web Việt Nam:

# Tìm nút "Đồng ý" hoặc "Chấp nhận"
try:
    accept_btn = driver.find_element(By.XPATH, "//button[contains(text(),'Đồng ý')]")
    accept_btn.click()
except:
    pass  # Không có popup thì bỏ qua

Xử lý Ajax - Lỗi phổ biến số 2

Ajax là khi web tải dữ liệu ngầm mà không reload trang. Vấn đề: script Selenium chạy nhanh hơn tốc độ load dữ liệu, nên tìm element không thấy, báo lỗi.

Sai lầm mình hay gặp ở người mới:

# ❌ ĐỪNG LÀM VẬY - dùng time.sleep cứng
import time
time.sleep(3)  # Ngủ 3 giây, lãng phí và không đáng tin
driver.find_element(By.ID, "search-results").text

Làm đúng cách:

# ✅ Dùng Explicit Wait - chờ đến khi element sẵn sàng
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

wait = WebDriverWait(driver, 15)  # chờ tối đa 15 giây

# Chờ đến khi kết quả tìm kiếm hiện ra
results = wait.until(
    EC.presence_of_element_located((By.ID, "search-results"))
)
print(results.text)

WebDriverWait sẽ tự poll mỗi 500ms cho đến khi element xuất hiện, hoặc hết 15 giây thì báo lỗi. Vừa nhanh hơn sleep, vừa đáng tin cậy hơn.

343451 Explicit Wait giải quyết 80% lỗi Ajax - hiểu nguyên lý quan trọng hơn nhớ cú pháp

Script test đăng nhập hoàn chỉnh

Đây là script end-to-end bạn có thể dùng làm mẫu cho portfolio:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

def test_login_success():
    driver = webdriver.Chrome()
    wait = WebDriverWait(driver, 10)
    
    try:
        # Bước 1: Mở trang đăng nhập
        driver.get("https://demo.yourapp.com/login")
        
        # Bước 2: Đóng cookie popup nếu có
        try:
            cookie_btn = wait.until(
                EC.element_to_be_clickable((By.ID, "accept-cookies"))
            )
            cookie_btn.click()
        except:
            pass
        
        # Bước 3: Nhập thông tin đăng nhập
        wait.until(EC.presence_of_element_located((By.ID, "email"))).send_keys("[email protected]")
        driver.find_element(By.ID, "password").send_keys("Test@12345")
        driver.find_element(By.CSS_SELECTOR, "button[type='submit']").click()
        
        # Bước 4: Chờ chuyển sang dashboard (Ajax)
        dashboard = wait.until(
            EC.presence_of_element_located((By.CLASS_NAME, "dashboard-header"))
        )
        
        # Kiểm tra kết quả
        assert "Xin chào" in dashboard.text, "Đăng nhập không thành công"
        print("✅ Test PASS: Đăng nhập thành công")
        
    finally:
        driver.quit()  # Luôn đóng browser dù test pass hay fail

test_login_success()

Nếu bạn muốn hiểu thêm về JavaScript - ngôn ngữ Selenium IDE dùng khi record, khóa Lập Trình JavaScript Cơ Bản miễn phí tại F8 cover đủ phần cú pháp cơ bản cần thiết.


Kết hợp Postman và Selenium: Workflow test toàn diện

Biết dùng từng tool riêng lẻ chưa đủ. Thứ phân biệt fresher biết việc và fresher chỉ biết tool là biết khi nào dùng cái nào.

Mình dùng quy tắc đơn giản này:

Test API trước, test UI sau. Nếu API lỗi, UI sẽ lỗi theo - không cần tốn thời gian chạy Selenium khi backend chưa ổn.

Kịch bản thực tế: Test tính năng đặt hàng

Giả sử bạn được giao test tính năng đặt hàng của một app thương mại điện tử. Đây là cách chia việc:

Dùng Postman test:

  • POST /orders - Tạo đơn hàng mới, kiểm tra response có order_id
  • GET /orders/{id} - Lấy chi tiết đơn, kiểm tra status là "pending"
  • POST /orders/{id}/cancel - Hủy đơn, kiểm tra status đổi thành "cancelled"
  • POST /orders với body thiếu field - Kiểm tra server trả 400 và message lỗi rõ ràng

Dùng Selenium test:

  • Mở trang sản phẩm, click "Thêm vào giỏ"
  • Kiểm tra popup confirmation hiện ra đúng
  • Đi đến trang checkout, điền thông tin giao hàng
  • Submit đơn hàng, kiểm tra trang xác nhận load đúng (Ajax)
  • Kiểm tra email xác nhận hiển thị trong inbox (nếu có test email)

343452 Test API trước xác nhận backend đúng - UI test sau mới có giá trị

Dùng biến Postman để không hardcode data

Một lỗi hay gặp: viết test với data cứng như user_id = 123. Data này thay đổi mỗi môi trường, mỗi lần chạy lại phải sửa tay.

Làm đúng: dùng Environment Variables trong Postman.

// Trong tab Tests của request Login:
pm.environment.set("auth_token", pm.response.json().token);
pm.environment.set("user_id", pm.response.json().user.id);

// Trong request tiếp theo, dùng:
// Header: Authorization: Bearer {{auth_token}}
// URL: /users/{{user_id}}/orders

Bạn chạy Login một lần, token tự động chạy qua tất cả request sau. Không hardcode, không sửa tay.

Bug report khi phát hiện lỗi từ cả hai phía

Khi test kết hợp, bạn sẽ gặp loại bug thú vị: API trả đúng nhưng UI hiển thị sai. Đây là lỗi frontend, không phải backend. Hoặc ngược lại.

Bug report trong trường hợp này cần ghi rõ:

  • Postman call đến endpoint nào, response là gì
  • UI hiển thị gì khác với response
  • Screenshot cả Postman và browser

Mẫu bug report kết hợp Postman + Selenium bạn tải ở đây: Tải template bug report API + UI


Xây dựng portfolio testing để xin việc khi chưa có kinh nghiệm

Câu hỏi mình nhận nhiều nhất từ các bạn trái ngành: "Chưa có kinh nghiệm thì portfolio lấy đâu ra?"

Trả lời thẳng: tự tạo. Các công ty tuyển fresher hiểu bạn chưa có kinh nghiệm thật - nhưng họ cần thấy bạn biết làm việc chứ không chỉ biết lý thuyết.

3 dạng project portfolio dùng được Postman + Selenium

Dạng 1: Test website có sẵn miễn phí

Có nhiều web tạo ra đặc biệt để luyện tập testing:

Bạn test website này, viết test case, ghi bug report (kể cả bug thật bạn tìm thấy), đưa lên GitHub.

Dạng 2: Viết test cho project người thân/quen làm

Bạn quen ai làm web freelance? Xin test thử cho họ, không lấy tiền. Đổi lại, bạn có case study thật để kể trong phỏng vấn.

Dạng 3: Tạo Postman Collection có kết quả test

Postman cho phép share Collection - bộ request có đầy đủ test script. Bạn:

  1. Tạo Collection test API public (như DemoQA - web luyện Selenium miễn phí)
  2. Viết test script cho từng request
  3. Chạy Collection Runner, export kết quả
  4. Share link Collection vào CV

343453 Portfolio thực tế quan trọng hơn chứng chỉ - nhà tuyển dụng muốn xem bạn làm được gì

CV tester fresher cần có gì

Mình review khá nhiều CV bạn mới học - lỗi phổ biến nhất là ghi "Biết Postman, Selenium" mà không có gì chứng minh.

Thay vào đó, ghi cụ thể:

  • "Xây dựng Postman Collection gồm 25 request test API cho web [tên], có test script kiểm tra status code và response body"
  • "Viết 15 Selenium script Python xử lý popup và Ajax cho flow đăng nhập, đăng ký, tìm kiếm"
  • "Tìm và báo cáo 8 bug trên [tên web demo], gồm 2 bug critical"

Tải mẫu CV tester fresher ở đây: Tải mẫu CV tester fresher

Một số lưu ý thực chiến trước khi đi phỏng vấn

Nhà tuyển dụng hay test live - cho bạn ngồi Postman call một API và giải thích kết quả. Chuẩn bị:

  • Biết đọc JSON response, giải thích từng field
  • Biết phân biệt bug phía client vs server qua status code
  • Biết tại sao dùng WebDriverWait thay time.sleep

Ba câu này thường xuyên xuất hiện trong vòng technical interview fresher tester tại hầu hết công ty Việt Nam.


Bước tiếp theo: Lộ trình học thực tế cho người mới

Bạn đọc đến đây nghĩa là bạn hiểu Postman và Selenium không phải thứ gì quá phức tạp. Cần gì? Luyện tập đủ để tay quen trước khi phỏng vấn.

Mình đề xuất lộ trình 6 tuần thực tế:

Tuần 1-2: Postman

  • Cài Postman, làm quen giao diện
  • Test 10 endpoint của JSONPlaceholder (JSONPlaceholder)
  • Viết test script cho từng request
  • Tạo Collection đầu tiên, đặt tên dễ đọc

Tuần 3-4: Selenium IDE

  • Cài Selenium IDE, record 3 luồng cơ bản (đăng nhập, tìm kiếm, form)
  • Chỉnh sửa script record để xử lý popup
  • Test trên DemoQA, ghi lại bug tìm được

Tuần 5-6: Kết hợp

  • Chọn 1 web demo có API public
  • Test API bằng Postman, test UI bằng Selenium IDE
  • Viết bug report, đưa tất cả lên GitHub
  • Cập nhật CV

343454 6 tuần đủ để có portfolio - quan trọng là luyện đều, không nhảy cóc

Thứ bạn sẽ có sau 6 tuần: 1 Postman Collection với 10+ request và test script, ít nhất 3 Selenium script xử lý popup/Ajax, 5-10 bug report đúng format, 1 GitHub repository để đưa vào CV.

Mình từng có học viên 32 tuổi từ ngành kế toán, không biết gì về IT, sau 2 tháng luyện theo lộ trình này xin được việc fresher tester. Không phải ai cũng cần 2 tháng - người nhanh hơn, người chậm hơn, đều được. Quan trọng là không bỏ qua bước luyện tay thực tế.

Nếu muốn nền tảng JavaScript vững hơn để viết Selenium test script, khóa Lập Trình JavaScript Cơ Bản miễn phí tại F8 là điểm bắt đầu tốt - không cần học hết, chỉ cần các phần về biến, hàm, điều kiện, vòng lặp.


Bài tiếp theo mình sẽ hướng dẫn chi tiết cách tổ chức Postman Collection theo dự án - đặt tên, chia folder, viết documentation để Collection của bạn đọc như tài liệu chuyên nghiệp. Bookmark lại nhé!

Có câu hỏi về Postman hay Selenium? Comment bên dưới, mình trả lời từng bạn.