
ที่มาภาพ: Unknown Source
วิธีสร้าง Unit Test อัตโนมัติโดยใช้ OpenAI Codex กับโครงการ Python อย่างปลอดภัย
⚡ สรุป 30 วิ
การสร้าง Unit Test แบบอัตโนมัติช่วยลดเวลาและข้อผิดพลาดของมนุษย์ แต่ต้องทำอย่างปลอดภัยเพื่อไม่ให้โค้ดสำคัญรั่วไหล **OpenAI Codex** เป็นเครื่องมือที่สามารถเขียนเทสต์ให้เราได้ เพียงแค่กำหนดสภาพแวดล้อมและ…
Overview
การสร้าง Unit Test แบบอัตโนมัติช่วยลดเวลาและข้อผิดพลาดของมนุษย์ แต่ต้องทำอย่างปลอดภัยเพื่อไม่ให้โค้ดสำคัญรั่วไหล OpenAI Codex เป็นเครื่องมือที่สามารถเขียนเทสต์ให้เราได้ เพียงแค่กำหนดสภาพแวดล้อมและเงื่อนไขเบื้องต้น
**Tip: อย่าใส่ข้อมูลลับ (API key, รหัสผ่าน) ลงใน prompt ของ Codex
Why Use OpenAI Codex for Unit Tests
- ความเร็ว – Codex สร้างเทสต์หลายกรณีภายในไม่กี่วินาที
- คุณภาพ – โมเดลเรียนรู้จากโค้ดเปิดที่มีมาตรฐานสูง ทำให้ได้เทสต์ครอบคลุม
- การบำรุงรักษา – เมื่อฟังก์ชันเปลี่ยนแปลง เพียงส่ง prompt ใหม่ Codex จะปรับเทสต์อัตโนมัติ
How It Works
Codex ทำงานโดยรับ prompt ที่อธิบายฟังก์ชันและผลลัพธ์ที่คาดหวัง แล้วคืนโค้ด Python ของ `unittest` หรือ `pytest` เราต้องจัดการให้ Prompt ปลอดภัยและแยกสภาพแวดล้อมออกจากโปรเจคจริง
- Prompt Design – ระบุ input, output, edge case อย่างชัดเจน
- API Call – ใช้ OpenAI API ส่ง prompt และรับ response ในรูป JSON
- Validation – ตรวจสอบโค้ดที่ได้ว่าไม่มี import ที่ไม่ปลอดภัยหรือการเรียกใช้ network
Step‑by‑Step Guide
เตรียมสภาพแวดล้อม
- สร้าง virtual environment แยกจากโปรเจคหลัก (`python -m venv test-env`)
- ติดตั้งแพ็กเกจจำเป็น `pip install openai pytest`
- ตั้งค่าตัวแปรสิ่งแวดล้อมสำหรับ OpenAI API Key (`export OPENAI_API_KEY=your_key`)
เขียน Prompt เบื้องต้น
- **ขั้นที่ 1: ระบุฟังก์ชันและประเภทข้อมูล
```text Write a pytest unit test for function `calculate_tax(income: float) -> float`. The function returns tax based on progressive rates:
- 0‑10,000 : 0%
- 10,001‑30,000 : 10%
- >30,000 : 20%
Include tests for normal, boundary and negative values. ```
- **ขั้นที่ 2: เพิ่มข้อกำหนดด้านความปลอดภัย
```text Do not import any external modules other than pytest. Do not make network calls or read/write files. ```
เรียก API และรับผลลัพธ์
```python import openai, json, textwrap
def generate_test(prompt: str) -> str: response = openai.Completion.create( engine="code-davinci-002", prompt=prompt, max_tokens=400, temperature=0, stop=["# End"] ) return response.choices[0].text.strip() ```
ตรวจสอบและบันทึกเทสต์
- **ขั้นที่ 1: ใช้ `ast` เพื่อตรวจสอบว่าไม่มี `import os`, `import sys` ที่อาจทำให้โค้ดเข้าถึงระบบ
- **ขั้นที่ 2: บันทึกไฟล์ลงโฟลเดอร์ `tests/generated/` ด้วยนามสกุล `_test.py`
```python import ast, pathlib
def is_safe(code: str) -> bool: tree = ast.parse(code) for node in ast.walk(tree): if isinstance(node, (ast.Import, ast.ImportFrom)): for alias in node.names: if alias.name in {"os", "sys", "subprocess"}: return False return True
code = generate_test(prompt) if is_safe(code): pathlib.Path("tests/generated").mkdir(parents=True, exist_ok=True) (pathlib.Path("tests/generated") / "test_calculate_tax.py").write_text(code) else: raise ValueError("Generated code contains unsafe imports") ```
รันเทสต์และตรวจสอบผล
```bash pytest tests/generated/ ```
- ถ้าเทสต์ล้มเหลวให้ปรับ Prompt หรือเพิ่มกรณี edge case ใหม่
- เก็บ Log ของการสร้างเทสต์ไว้ใน `logs/` เพื่อ audit ภายหลัง
Security Checklist
| ด้าน | รายการตรวจสอบ | ผลลัพธ์ที่คาดหวัง |
|---|---|---|
| การเข้าถึงข้อมูล | ไม่ส่ง API Key หรือ Credential ใดใน Prompt | Prompt มีเฉพาะโค้ดและคำอธิบาย |
| การนำเข้าโมดูล | ไม่มี `import os`, `import sys`, `subprocess` ในโค้ดที่สร้าง | `is_safe()` คืนค่า True |
| สิทธิ์ไฟล์ | โฟลเดอร์เทสต์อยู่ใน virtual env ที่แยกจาก production | ไม่กระทบไฟล์หลักของโปรเจค |
| การทำงานเครือข่าย | ไม่มีคำสั่ง `requests.get` หรือการเปิด socket | เทสต์รันแบบ offline |
**Warning: หาก Prompt มีข้อมูลโค้ดที่เป็น proprietary ควรใช้ OpenAI’s “private deployment” หรือเซิร์ฟเวอร์ภายในองค์กร เพื่อป้องกันข้อมูลรั่วไหล
Tips for Better Results
- ใช้ explicit examples ใน Prompt เช่น `calculate_tax(15000) == 1500`
- ระบุ boundary conditions อย่างชัดเจน (`income = 0`, `income = -500`)
- จำกัดความยาวของ Prompt ไม่เกิน 500 token เพื่อให้โมเดลตอบสนองเร็ว
Summary
- สร้างสภาพแวดล้อมแยกและตั้งค่า API Key อย่างปลอดภัย
- ออกแบบ Prompt ให้มีข้อมูลฟังก์ชัน, ขอบเขตผลลัพธ์ และข้อจำกัดด้านความปลอดภัย
- เรียก OpenAI Codex ผ่าน API แล้วตรวจสอบโค้ดด้วย `ast` ก่อนบันทึกลงไฟล์เทสต์
- รันและปรับแก้เทสต์ตามผลลัพธ์ พร้อมเก็บ Log เพื่อ audit
สิ่งที่ควรจำ
- อย่าใส่ข้อมูลลับใน Prompt
- ตรวจสอบ import ที่อาจเป็นอันตรายก่อนบันทึกโค้ด
- ใช้ virtual environment แยกเพื่อป้องกันการกระทบต่อ production code
- ปรับ Prompt อย่างต่อเนื่องจนได้เทสต์ที่ครอบคลุมและปลอดภัย
แชร์บทความนี้:
ชอบบทความแบบนี้?
สมัคร AI Automate Weekly Newsletter — รับเคล็ดลับ AI + how-to ใหม่
ทุกสัปดาห์ตรงถึง inbox ฟรี ไม่มีสแปม
แหล่งข่าวต้นฉบับ
- ชื่อต้นฉบับ
- วิธีสร้าง Unit Test อัตโนมัติโดยใช้ OpenAI Codex กับโครงการ Python อย่างปลอดภัย
- ผู้เขียน
- กองบรรณาธิการ Thai Tech News
- แหล่ง
- บทความต้นฉบับ Thai Tech News · ช่วยร่างด้วย AI, เรียบเรียง/ตรวจสอบโดยกองบรรณาธิการ
- วันที่เผยแพร่
- 22 กรกฎาคม 2569 เวลา 17:50



