NỘI DUNG BÀI HỌC

✅ Hiểu rõ tại sao việc tách dữ liệu ra khỏi code (Data-Driven Testing) lại quan trọng.
✅ Nắm vững cấu trúc của một file JSON và sự tương đồng của nó với Dictionary trong Python.
✅ Sử dụng thành thạo thư viện
json có sẵn của Python để đọc và chuyển đổi dữ liệu từ file .json.
✅ Hiểu cách Python làm việc với file Excel thông qua các thư viện bên ngoài.
✅ Cài đặt và sử dụng thư viện
openpyxl để đọc dữ liệu từ file .xlsx theo từng ô, từng hàng.
✅ Xây dựng được kịch bản automation đọc dữ liệu test (ví dụ: tài khoản đăng nhập) từ file Excel.


1. Tại sao phải đọc dữ liệu từ file ngoài?

Hãy tưởng tượng kịch bản kiểm thử chức năng đăng nhập của bạn.

  • Cách làm cũ: Bạn "hard-code" (gõ thẳng) username và password vào trong file code Python.

    # login_test.py
    login("admin", "password123")


❌ Vấn đề:

  • Muốn test 100 tài khoản → copy-paste code 100 lần.

  • Muốn đổi password → phải sửa lại code.

✅ Giải pháp: Data-Driven Testing

  • Code chỉ chứa logic test.

  • Data để ngoài file JSON hoặc Excel.

  • Test script lặp qua từng bộ data → chạy test.

Lợi ích thực tế:

  • Dễ bảo trì: Tester chỉ cần sửa file Excel/JSON, không động vào code.

  • Dễ mở rộng: Chỉ cần thêm dòng mới vào file data.

  • Tách biệt rõ logic testtest data.

💡 Ví dụ trong đời sống:

  • Bạn đi siêu thị, thay vì đọc tên từng món trong đầu, bạn viết một danh sách mua hàng (Excel/JSON). → Mỗi lần đi chỉ việc đọc danh sách, không cần nhớ lại.


Lợi ích:
Dễ dàng thêm/sửa/xóa dữ liệu test mà không cần đụng vào code. Tester hoặc BA cũng có thể tự chuẩn bị file dữ liệu này.


2. File JSON - "Tờ ghi chú" đa năng

JSON (JavaScript Object Notation) là một định dạng văn bản cực kỳ phổ biến để lưu trữ và trao đổi dữ liệu. Nó giống hệt như một Dictionary của Python được viết ra file.

  • Đặc điểm: Cấu trúc theo cặp key: value, dễ đọc cho cả người và máy, thường được dùng trong các API và file cấu hình.

Một file JSON mẫu (user_data.json):

{
  "username": "tester01",
  "email": "tester01@example.com",
  "login_attempts": 3,
  "is_active": true,
  "roles": [
    "viewer",
    "editor"
  ]
}

 

🔹 Ví dụ trong cuộc sống: Một công thức nấu ăn Hãy xem một công thức nấu ăn như một file JSON. Nó có các "key" (như "Tên món ăn", "Nguyên liệu", "Các bước") và các "value" tương ứng.

{
  "Tên món ăn": "Gà rang gừng",
  "Thời gian chuẩn bị": "15 phút",
  "Nguyên liệu": ["Thịt gà", "Gừng", "Hành lá", "Gia vị"],
  "Độ khó": "Dễ"
}

Khi bạn đọc file này vào Python, bạn có thể dễ dàng lấy ra danh sách nguyên liệu hoặc thời gian chuẩn bị.

2.1 Cách đọc file JSON với thư viện json

Python có sẵn một thư viện tên là json để làm việc này. Quá trình gồm 2 bước:

  1. Dùng open() để mở file.

  2. Dùng json.load() để "nạp" nội dung file vào một biến Python (thường là một dictionary).

Demo code đọc file user_data.json:

import json

# Mở file và đảm bảo nó được đóng lại sau khi dùng xong
with open('user_data.json', 'r', encoding='utf-8') as f:
    try:
        # json.load() đọc file và chuyển nó thành một dictionary
        user_data = json.load(f)
        
        # Bây giờ user_data là một dictionary, ta có thể truy cập bình thường
        print(f"Username: {user_data.get('username')}")
        print(f"Email: {user_data['email']}")
        print(f"Quyền hạn đầu tiên: {user_data['roles'][0]}")

    except json.JSONDecodeError:
        print("Lỗi: File JSON không hợp lệ.")
    except FileNotFoundError:
        print("Lỗi: Không tìm thấy file user_data.json")


🔹 Ứng dụng trong Automation:

    • Đọc file cấu hình: Lưu URL, tên trình duyệt, thời gian chờ... vào một file config.json để dễ dàng thay đổi môi trường test. Ví dụ file config.json:

      {
        "browser": "chrome",
        "base_url": "[https://tiki.vn](https://tiki.vn)",
        "timeout": 10
      }

      Code Python sẽ đọc file này để biết cần khởi chạy trình duyệt nào và truy cập trang web nào
      👉 Dùng để:

      • Môi trường test (staging vs prod).

      • Thay đổi browser (chrome, firefox).

      • Thay đổi timeout mà không sửa code.

      • API testing:
        Hầu hết API trả về JSON → automation script phải parse JSON để kiểm tra response.

      • Dữ liệu phức tạp:
        Sản phẩm e-commerce (có tên, giá, category, tags) dễ lưu trong JSON hơn Excel.

       

    • Lưu trữ dữ liệu test: Với các bộ dữ liệu phức tạp (như thông tin một sản phẩm có nhiều thuộc tính), việc lưu dưới dạng JSON sẽ rất trực quan.

    • Xử lý API Response: Hầu hết các API đều trả về kết quả dưới dạng JSON. Kịch bản automation của bạn sẽ phân tích chuỗi JSON này để kiểm tra xem API có trả về đúng dữ liệu hay không.


3. File Excel - "Bảng tính" quen thuộc

📌 Với dân văn phòng và tester, Excel là công cụ không thể quen thuộc hơn để quản lý dữ liệu dạng bảng vì:

  • Dễ nhập dữ liệu test.

  • Dễ quản lý hàng loạt test cases.

  • Có thể dùng công thức, lọc, sắp xếp.


3.1 Thư viện
openpyxl

Để làm việc với file Excel (.xlsx), chúng ta cần một thư viện bên ngoài. openpyxl là thư viện mạnh mẽ và phổ biến nhất.

Bước 1: Cài đặt (chỉ làm một lần) Mở Terminal hoặc Command Prompt và gõ lệnh: 

# Chọn version tương ứng 
pip install openpyxl

pip3 install openpyxl

Cấu trúc của một file Excel được openpyxl hiểu như sau:

  • Workbook: Toàn bộ file Excel (ví dụ: data.xlsx).

  • Worksheet (Sheet): Một trang tính trong file đó (ví dụ: Sheet1, LoginData).

  • Cell: Một ô cụ thể trong sheet (ví dụ: A1, B2).


3.2 Demo code đọc file Excel

Một file Excel mẫu (login_data.xlsx):

  A B C
1 username password expected_result
2 admin admin123 Đăng nhập thành công
3 user user123 Đăng nhập thành công
4 admin wrongpass Sai mật khẩu

 

Code Python để đọc file này:

import openpyxl

try:
    # 1. Mở file Excel
    workbook = openpyxl.load_workbook("login_data.xlsx")

    # 2. Chọn sheet muốn làm việc
    # sheet = workbook["LoginData"] # Chọn theo tên
    sheet = workbook.active # Chọn sheet đang được mở

    # 3. Đọc dữ liệu từ một ô cụ thể
    cell_A1_value = sheet['A1'].value
    print(f"Giá trị của ô A1 là: {cell_A1_value}")

    # 4. Đọc dữ liệu từ tất cả các hàng (bỏ qua hàng tiêu đề)
    # sheet.iter_rows(min_row=2) sẽ lặp từ hàng thứ 2 trở đi
    print("\n--- Dữ liệu Test ---")
    for row in sheet.iter_rows(min_row=2, values_only=True):
        # Mỗi 'row' bây giờ là một tuple chứa giá trị của các ô trong hàng đó
        # ('admin', 'admin123', 'Đăng nhập thành công')
        username, password, expected_result = row
        print(f"Username: {username}, Password: {password}, Mong muốn: {expected_result}")

except FileNotFoundError:
    print("Lỗi: Không tìm thấy file login_data.xlsx")
except Exception as e:
    print(f"Đã xảy ra lỗi: {e}")
 

3.3 Ứng dụng đọc data test (Data-Driven Testing)

Đây là ứng dụng quan trọng nhất. Chúng ta sẽ kết hợp việc đọc Excel với vòng lặp để tạo ra một kịch bản Data-Driven hoàn chỉnh.


🔹 Ứng dụng quen thuộc: Kiểm thử đăng nhập với nhiều tài khoản

# (Giả lập hàm login)
def perform_login(username, password):
    print(f"Đang thực hiện đăng nhập với user: '{username}', pass: '{password}'...")
    # ... code Selenium để nhập liệu và click ...
    # Giả sử hàm này trả về kết quả thực tế từ trang web
    if username == "admin" and password == "admin123":
        return "Đăng nhập thành công"
    else:
        return "Sai mật khẩu"

# --- Phần đọc dữ liệu từ Excel và chạy test ---
# (Code đọc Excel như ở trên)
workbook = openpyxl.load_workbook("login_data.xlsx")
sheet = workbook.active

for row in sheet.iter_rows(min_row=2, values_only=True):
    username, password, expected_result = row

    # Chạy test với dữ liệu từ file
    actual_result = perform_login(username, password)

    # So sánh kết quả
    if actual_result == expected_result:
        print(f"✅ PASSED: Test case cho user '{username}' thành công.\n")
    else:
        print(f"❌ FAILED: Test case cho user '{username}' thất bại. Mong muốn: '{expected_result}', Thực tế: '{actual_result}'.\n")

 

🔹 Ứng dụng khác: Kiểm thử chức năng tìm kiếm với nhiều từ khóa Hãy tưởng tượng bạn có file search_data.xlsx với 2 cột: KeywordExpected_Title. Kịch bản của bạn sẽ đọc từng dòng, nhập Keyword vào ô tìm kiếm, và sau đó xác thực xem tiêu đề của trang kết quả có chứa Expected_Title hay không. Điều này giúp bạn kiểm tra hàng loạt từ khóa một cách tự động.


4. So sánh chi tiết: JSON vs Excel

Tiêu chí JSON Excel
Cấu trúc Key-value, phân cấp, giống Dictionary. Hàng – cột, bảng dữ liệu phẳng.
Ưu điểm ✅ Nhẹ, nhanh, chuẩn API. ✅ Có sẵn trong Python. ✅ Trực quan, dễ nhập dữ liệu. ✅ Phù hợp với BA/Tester không code.
Nhược điểm ❌ Khó cho người không biết code. ❌ Khó đọc khi lồng sâu. ❌ Nặng hơn, chậm hơn. ❌ Dễ lỗi định dạng nếu sửa tay.
Ví dụ đời sống Hồ sơ cá nhân: tên, tuổi, lịch sử việc làm (có danh sách công ty). Danh sách lớp học: STT, Họ tên, Điểm trung bình.
Trong automation Config file, API response, test data phức tạp. Data-driven testing, danh sách account, test case quản lý bởi Tester.


👉 Kết luận:

  • JSON: dùng cho config, API, data phức tạp.

  • Excel: dùng khi BA/Tester quản lý data, test cases dạng bảng.



5. Bài tập tổng hợp cuối buổi

Bài toán: Bạn được giao một file Excel students.xlsx chứa danh sách sinh viên và điểm số. Bạn cần viết một chương trình để đọc file này và tạo ra một file report.json cho những sinh viên "Xuất sắc" (điểm >= 9).

File students.xlsx:

  A B C
1 ID Tên Điểm
2 SV001 Nguyễn Văn An 8.5
3 SV002 Trần Thị Bình 9.5
4 SV003 Lê Văn Dũng 7.0
5 SV004 Phạm Thị Mai 9.0

 

File report.json mong muốn:

[
  {
    "ID": "SV002",
    "Tên": "Trần Thị Bình",
    "Tình trạng": "Xuất sắc"
  },
  {
    "ID": "SV004",
    "Tên": "Phạm Thị Mai",
    "Tình trạng": "Xuất sắc"
  }
]

Teacher

Teacher

Hà Lan

QA Automation

With over 5 years of experience in web, API, and mobile test automation, built strong expertise in designing and maintaining automation frameworks across various domains and international projects. Committed to mentoring and knowledge sharing, I provide practical guidance and proven techniques to help aspiring testers develop their skills and succeed in the automation field.

Cộng đồng Automation Testing Việt Nam:

🌱 Telegram Automation Testing:   Cộng đồng Automation Testing
🌱 
Facebook Group Automation: Cộng đồng Automation Testing Việt Nam
🌱 
Facebook Fanpage: Cộng đồng Automation Testing Việt Nam - Selenium
🌱 Telegram
Manual Testing:   Cộng đồng Manual Testing
🌱 
Facebook Group Manual: Cộng đồng Manual Testing Việt Nam

Chia sẻ khóa học lên trang

Bạn có thể đăng khóa học của chính bạn lên trang Anh Tester để kiếm tiền

Danh sách bài học