NỘI DUNG BÀI HỌC
✅ 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 test và test 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:
-
Dùng
open()
để mở file. -
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ụ fileconfig.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: Keyword
và Expected_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"
}
]