今天我們來用 pytest 練習一下 API 測試,並選擇 reqres.in 這個模擬 API 平台。這個平台是專門為測試前端或 API 準備的,提供了很多常見的 API 介面,蠻適合拿來做測試演練。
選擇 reqres.in 中的其中一個 API,像是用 GET 請求 /api/users?page=1 來獲取使用者列表。使用 pytest 來撰寫測試案例,檢查 API 的狀態碼、伺服器回應資料是否符合預期。
還可以進一步檢查伺服器回應中的資料,像是使用者數量,或者檢查某個特定使用者的資料是不是正確的。目標是在 30 分鐘內搞定這個練習,藉此熟悉一下 pytest 怎麼用來進行 API 測試。
你可以在 30 分鐘內完成這個練習,藉此熟悉 pytest 如何進行 API 測試。
以下是我的練習:
如果有在用 GitHub Copilot 的話,可以考慮先關掉,看看自己需要多久才能完成第一個測試案例。寫完第一版後,再讓 ChatGPT 或 GitHub Copilot 幫你 code review,這樣可以比較一下差異,思考一下為什麼寫第一版的時候沒想到那些優化。
import requests
from dataclasses import dataclass
@dataclass
class User:
id: int
email: str
first_name: str
last_name: str
avatar: str
def test_users():
response = requests.get("https://reqres.in/api/users?page=1")
assert response.status_code == 200, f"Request failed with status code {response.status_code}"
data = response.json()
total = data["total"]
total_pages = data["total_pages"]
all_users = [User(**user) for user in data["data"]]
for i in range(2, total_pages + 1):
response = requests.get(f"https://reqres.in/api/users?page={i}")
assert response.status_code == 200, f"Request failed with status code {response.status_code}"
users = [User(**user) for user in response.json()["data"]]
all_users.extend(users)
assert len(all_users) == total
這個練習其實很適合檢驗自己對 API 測試到底有多熟,還有面對 API 測試時,能不能快速反應出該驗證什麼。說真的,這種練習超適合用來學習新的 testing framework,因為它不僅是讓你測試你會不會寫測試案例,也是在看你能不能靈活運用這些工具來搞定測試。
透過這個方式,你可以更快抓住 API 測試的精髓,還有熟悉測試框架的操作。總之,這個練習就是一個檢測「即戰力」的好方法,不但能加速你學習新工具,還能讓你在實戰中更得心應手。