Glossary, HTTP codes, SQL, Postman และ Playwright cheatsheet
-- ดูข้อมูล user ทั้งหมด SELECT * FROM users LIMIT 20; -- หา user ด้วย email SELECT id, name, email, created_at FROM users WHERE email = 'test@example.com'; -- เช็กว่า record มีอยู่จริง SELECT COUNT(*) as total FROM orders WHERE user_id = 42; -- ดู order ล่าสุด SELECT * FROM orders ORDER BY created_at DESC LIMIT 10; -- JOIN: order พร้อมชื่อ user SELECT o.id, u.name, u.email, o.total, o.status FROM orders o JOIN users u ON o.user_id = u.id WHERE o.status = 'pending' ORDER BY o.created_at DESC; -- หาซ้ำ: email ซ้ำกัน SELECT email, COUNT(*) as cnt FROM users GROUP BY email HAVING cnt > 1; -- เช็ก record ที่ deleted ล่าสุด SELECT * FROM audit_logs WHERE action = 'DELETE' AND table_name = 'products' ORDER BY created_at DESC LIMIT 5;
// ── Status Code ─────────────────────────────
pm.test("Status is 200", () => {
pm.response.to.have.status(200);
});
// ── Response Time ────────────────────────────
pm.test("ตอบสนองภายใน 1000ms", () => {
pm.expect(pm.response.responseTime).to.be.below(1000);
});
// ── Response Body ────────────────────────────
pm.test("มี id ใน response", () => {
const json = pm.response.json();
pm.expect(json.id).to.exist;
pm.expect(json.id).to.be.a('number');
});
pm.test("token เป็น string ไม่ว่าง", () => {
const json = pm.response.json();
pm.expect(json.token).to.be.a('string').and.not.empty;
});
pm.test("items เป็น array", () => {
const json = pm.response.json();
pm.expect(json.items).to.be.an('array');
pm.expect(json.items.length).to.be.above(0);
});
// ── Header ───────────────────────────────────
pm.test("Content-Type เป็น JSON", () => {
pm.expect(pm.response.headers.get('Content-Type'))
.to.include('application/json');
});
// ── Set Environment Variable ─────────────────
const json = pm.response.json();
pm.environment.set("token", json.token);
pm.environment.set("userId", json.id);
// ── Get Environment Variable ─────────────────
const baseUrl = pm.environment.get("base_url");
// ── Request body helper ──────────────────────
// ใช้ {{variable}} ใน Body:
// { "email": "{{email}}", "token": "{{token}}" }
// วางใน Pre-request Script ของ Collection
// เพื่อ auto-refresh token ก่อนทุก request
const token = pm.environment.get("token");
if (!token) {
pm.sendRequest({
url: pm.environment.get("base_url") + "/auth/login",
method: "POST",
header: { "Content-Type": "application/json" },
body: {
mode: "raw",
raw: JSON.stringify({
email: pm.environment.get("email"),
password: pm.environment.get("password")
})
}
}, (err, res) => {
if (!err) {
pm.environment.set("token", res.json().token);
}
});
}
from playwright.sync_api import expect
# ── Visibility ───────────────────────────────
expect(page.locator(".alert")).to_be_visible()
expect(page.locator(".modal")).to_be_hidden()
# ── Text content ─────────────────────────────
expect(page.locator("h1")).to_have_text("Dashboard")
expect(page.locator(".msg")).to_contain_text("สำเร็จ")
# ── Input value ──────────────────────────────
expect(page.get_by_label("Email")).to_have_value("test@x.com")
# ── URL ──────────────────────────────────────
expect(page).to_have_url("https://example.com/dashboard")
expect(page).to_have_url(re.compile(".*/dashboard"))
# ── Title ────────────────────────────────────
expect(page).to_have_title("Dashboard — MyApp")
# ── Enabled/Disabled ─────────────────────────
expect(page.locator("button[type=submit]")).to_be_enabled()
expect(page.locator("#save-btn")).to_be_disabled()
# ── Checked ──────────────────────────────────
expect(page.get_by_role("checkbox")).to_be_checked()
# ── Count ────────────────────────────────────
expect(page.locator("tr")).to_have_count(10)
# ── Navigation ──────────────────────────────
page.goto("https://example.com")
page.go_back()
page.reload()
# ── Input ────────────────────────────────────
page.get_by_label("Email").fill("test@x.com")
page.get_by_label("Email").clear()
page.get_by_label("Message").type("สวัสดี", delay=50)
# ── Click ────────────────────────────────────
page.get_by_role("button", name="Submit").click()
page.locator(".dropdown").click()
page.locator("text=เลือก").dblclick()
# ── Select / Checkbox ────────────────────────
page.get_by_label("Country").select_option("TH")
page.get_by_role("checkbox").check()
page.get_by_role("checkbox").uncheck()
# ── Wait ─────────────────────────────────────
page.wait_for_url("**/success")
page.wait_for_selector(".loading", state="hidden")
page.locator(".result").wait_for()
# ── Screenshot ───────────────────────────────
page.screenshot(path="screenshot.png", full_page=True)
page.locator(".chart").screenshot(path="chart.png")
# ── Network interception ─────────────────────
page.route("**/api/users", lambda route: route.fulfill(
status=200,
body='[{"id":1,"name":"Mock User"}]'
))
# ── Keyboard ─────────────────────────────────
page.keyboard.press("Enter")
page.keyboard.press("Control+A")
# ── Hover ────────────────────────────────────
page.locator(".menu-item").hover()