วิธีรัน API Test แบบ Parameterized จาก CSV และ JSON

การทดสอบ API แบบพารามิเตอร์ช่วยให้คุณสามารถรันสถานการณ์เดียวกับกรณีทดสอบหลายร้อยรายการจากไฟล์ CSV หรือ JSON สร้างมันเพียงครั้งเดียวใน Apidog และสั่งงานแบบ Headless ใน CI

INEZA Felin-Michel

INEZA Felin-Michel

16 June 2026

วิธีรัน API Test แบบ Parameterized จาก CSV และ JSON

enterprise.banner.title

enterprise.banner.feature1

enterprise.banner.feature2

enterprise.banner.feature3

enterprise.banner.ctaB

คุณเขียนการทดสอบการเข้าสู่ระบบ มันผ่านฉลุย จากนั้นเพื่อนร่วมทีมก็ถามคำถามที่ชัดเจนขึ้นมาว่า: มันยังคงผ่านอยู่หรือไม่สำหรับบัญชีที่ถูกล็อก, อีเมลที่ยังไม่ยืนยัน, รหัสผ่านที่มีช่องว่างท้าย, สตริง SQL-injection ที่ใครบางคนอาจจะนำมาวางในฟิลด์นั้น? ตอนนี้คุณมีทางเลือก คือก๊อปปี้การทดสอบนั้นห้าครั้งแล้วเปลี่ยนค่าเพียงหนึ่งค่าในแต่ละครั้ง หรือหาวิธีที่จะป้อนข้อมูลหลายแถวในการทดสอบเดียวกันแล้วปล่อยให้มันทำงานทั้งหมด

วิธีการคัดลอกและวางเป็นสาเหตุที่ชุดทดสอบส่วนใหญ่เสื่อมสภาพ การทดสอบห้าชุดที่เกือบจะเหมือนกันจะแยกจากกันไปเรื่อยๆ ตลอดหนึ่งปี ชุดหนึ่งได้รับการยืนยันใหม่ แต่อีกชุดหนึ่งไม่ได้ การเปลี่ยนชื่อฟิลด์ทำให้สี่ชุดเสียไปโดยไม่มีใครรู้ สุดท้ายคุณต้องดูแลห้าสิ่งซึ่งจริงๆ ควรจะเป็นสิ่งเดียว การทดสอบแบบพารามิเตอร์ช่วยแก้ไขปัญหานี้ตั้งแต่ต้นตอ: คุณเขียนการทดสอบเพียงครั้งเดียว จากนั้นชี้ไปที่ตารางข้อมูลอินพุตและผลลัพธ์ที่คาดหวัง หนึ่งสถานการณ์, หลายร้อยกรณี, แก้ไขที่เดียว

ปุ่มดาวน์โหลดแอป

การทดสอบแบบพารามิเตอร์หมายถึงอะไรกันแน่

การทดสอบแบบพารามิเตอร์ ซึ่งบางครั้งเรียกว่าการทดสอบแบบขับเคลื่อนด้วยข้อมูล (data-driven testing) เป็นการแยกตรรกะของการทดสอบออกจากข้อมูลที่ใช้ทดสอบ ตรรกะคือลำดับขั้นตอน: ส่งคำขอ, ตรวจสอบรหัสสถานะ, ตรวจสอบความถูกต้องของฟิลด์ในการตอบกลับ ข้อมูลคือชุดของอินพุตและความคาดหวังที่คุณต้องการให้ตรรกะนั้นทำงานด้วย

ลองนึกภาพสถานการณ์การทดสอบเดียวสำหรับเอนด์พอยต์รหัสส่วนลด ตรรกะจะเหมือนเดิมเสมอ ส่ง POST /api/orders พร้อมรหัส จากนั้นยืนยันผลการตอบกลับ ข้อมูลจะเปลี่ยนไปตามแต่ละกรณี:

รหัส ยอดรวมคำสั่งซื้อ สถานะที่คาดหวัง ส่วนลดที่คาดหวัง
WELCOME10 100 200 10
WELCOME10 5 422 0
EXPIRED 100 410 0
(ว่าง) 100 400 0
FAKE123 100 404 0

ห้าแถว, ห้าพฤติกรรมที่แตกต่างกัน, หนึ่งการทดสอบ ตัวรันจะวนซ้ำผ่านแต่ละแถว ในการวนซ้ำแต่ละครั้ง มันจะผูกค่าคอลัมน์เข้ากับตัวแปร, ส่งคำขอ, และตรวจสอบการยืนยันกับความคาดหวังของแถวนั้น เมื่อแถวที่ 3 ล้มเหลวเนื่องจากรหัสที่หมดอายุส่งค่า 200 แทนที่จะเป็น 410 คุณจะได้รับการแจ้งความล้มเหลวที่ชัดเจนเพียงจุดเดียวที่ชี้ไปยังแถวนั้น คุณไม่จำเป็นต้องไล่หาผ่านไฟล์ทดสอบที่แยกกันห้าไฟล์เพื่อดูว่าชุดไหนเสีย

รูปแบบนี้มีความสำคัญที่สุดที่ขอบเขต การครอบคลุมกรณีปกติ (happy-path) เขียนได้ง่าย และไม่ค่อยพบข้อผิดพลาดที่ทำให้คุณต้องตื่นกลางดึก ข้อผิดพลาดมักจะอยู่ในกรณีขอบเขต: สตริงว่าง, ตัวเลขติดลบ, ชื่อยูนิโค้ด, โทเค็นที่หมดอายุ, ค่าที่เกินขีดจำกัดไปหนึ่งเซ็นต์ การใช้พารามิเตอร์ทำให้การเพิ่มกรณีขอบเขตทำได้ง่ายพอๆ กับการเพิ่มแถวในสเปรดชีต

ทำไมไฟล์ข้อมูลที่แยกออกมาจึงดีกว่าค่าที่เขียนตายตัว

คุณสามารถเขียนค่าแต่ละกรณีลงในโค้ดทดสอบโดยตรงได้ คนส่วนใหญ่เริ่มต้นจากตรงนั้น ปัญหาจะปรากฏขึ้นในภายหลัง

เมื่อข้อมูลอยู่ในโค้ดทดสอบ ผู้ที่ไม่ใช่โปรแกรมเมอร์ก็ไม่สามารถเพิ่มกรณีทดสอบได้ หัวหน้าฝ่าย QA ของคุณรู้ถึงอินพุตที่ซับซ้อนสิบห้าชนิดที่เคยทำให้เอนด์พอยต์นี้เสียหายมาก่อน แต่พวกเขาไม่สามารถเพิ่มได้หากไม่ได้แก้ไขโค้ดและเปิด pull request เมื่อข้อมูลอยู่ในไฟล์ CSV พวกเขาก็สามารถแก้ไขสเปรดชีตแล้วคอมมิตได้ อุปสรรคก็ลดลงจนเกือบเป็นศูนย์

ไฟล์ที่แยกออกมายังช่วยให้สถานการณ์การทดสอบของคุณอ่านง่ายขึ้น การทดสอบที่วนซ้ำผ่านไฟล์ภายนอกนั้นสั้น: มีคำขอเดียว, การยืนยันไม่กี่อย่าง, ก็เสร็จแล้ว การทดสอบที่มีสามสิบกรณีที่ฝังอยู่ในโค้ดเป็นการทำซ้ำที่ไม่มีใครอยากจะแตะต้อง และเมื่อคุณต้องการสร้างกรณีทดสอบด้วยโปรแกรม เช่น แถวนับพันที่ดึงมาจากบันทึกการผลิต ไฟล์เป็นทางเลือกเดียวที่สมเหตุสมผล คุณไม่สามารถวางกรณีทดสอบเป็นพันๆ กรณีลงในเนื้อหาการทดสอบได้

รูปแบบที่คุณเลือกขึ้นอยู่กับลักษณะข้อมูลของคุณ กรณีที่เป็นตารางแบบเรียบเหมาะกับ CSV เพย์โหลดที่มีโครงสร้างซ้อนกันหรือมีโครงสร้างเหมาะกับ JSON ทั้งสองเป็นอินพุตระดับเฟิร์สคลาสในตัวรันของ Apidog ดังนั้นทางเลือกจึงขึ้นอยู่กับข้อมูลของคุณ ไม่ใช่ข้อจำกัดของเครื่องมือ

การตั้งค่าไฟล์ข้อมูลของคุณ

เริ่มต้นด้วย CSV สำหรับกรณีที่เป็นตาราง แถวส่วนหัวจะตั้งชื่อตัวแปรของคุณ; แต่ละแถวถัดลงมาคือการวนซ้ำหนึ่งครั้ง นี่คือตารางรหัสส่วนลดในรูปแบบไฟล์จริง discount-cases.csv:

code,order_total,expected_status,expected_discount
WELCOME10,100,200,10
WELCOME10,5,422,0
EXPIRED,100,410,0
,100,400,0
FAKE123,100,404,0

หัวข้อคอลัมน์แต่ละอันจะกลายเป็นตัวแปรที่คุณใช้อ้างอิงภายในโค้ดทดสอบ ในเนื้อหาคำขอ คุณจะเขียน {{code}} และ {{order_total}}; ในการยืนยัน คุณจะเปรียบเทียบกับ {{expected_status}} และ {{expected_discount}} ตัวรันจะทำการผูกค่าทีละแถว

เมื่ออินพุตของคุณเป็นแบบซ้อนกัน ให้ใช้ JSON อาร์เรย์ของออบเจกต์ ซึ่งแต่ละออบเจกต์คือการวนซ้ำหนึ่งครั้ง ทำให้แต่ละกรณีสามารถบรรจุข้อมูลที่มีโครงสร้างซึ่งยากที่จะทำให้เป็นคอลัมน์แบบเรียบได้ นี่คือ user-cases.json สำหรับเอนด์พอยต์การสร้างผู้ใช้ที่เพย์โหลดมีฟิลด์ซ้อนกัน:

[
  {
    "scenario": "valid full profile",
    "user": {
      "email": "ada@example.com",
      "roles": ["admin", "billing"],
      "profile": { "country": "US", "timezone": "America/New_York" }
    },
    "expected_status": 201
  },
  {
    "scenario": "missing email",
    "user": {
      "email": "",
      "roles": ["viewer"],
      "profile": { "country": "GB", "timezone": "Europe/London" }
    },
    "expected_status": 400
  },
  {
    "scenario": "unknown role",
    "user": {
      "email": "grace@example.com",
      "roles": ["wizard"],
      "profile": { "country": "CA", "timezone": "America/Toronto" }
    },
    "expected_status": 422
  }
]

ภายในโค้ดทดสอบ คุณอ้างอิงค่าที่มีโครงสร้างด้วยไวยากรณ์ {{user}}, {{expected_status}} แบบเดียวกัน และ Apidog จะส่งฟิลด์ของแต่ละออบเจกต์ไปยังการวนซ้ำ คอลัมน์ scenario เป็นป้ายกำกับสำหรับตัวคุณเอง; มันจะปรากฏในรายงานเพื่อให้การวนซ้ำที่ล้มเหลวอ่านว่า “unknown role” แทนที่จะเป็น “iteration 3”

กฎบางข้อจะช่วยป้องกันไฟล์ข้อมูลไม่ให้สร้างปัญหาให้คุณ:

การสร้างสถานการณ์แบบพารามิเตอร์ใน Apidog

ในแอป Apidog ให้สร้างสถานการณ์การทดสอบเพียงครั้งเดียวเหมือนกับสถานการณ์อื่นๆ เพิ่มคำขอไปยังเอนด์พอยต์ของคุณ ในส่วนเนื้อหา ให้แทนที่ค่าที่ระบุตรงๆ ด้วยการอ้างอิงตัวแปร: {{code}}, {{order_total}} และอื่นๆ สิ่งเหล่านี้คือคอลัมน์จากไฟล์ข้อมูลของคุณ

จากนั้นเพิ่มการยืนยันที่อ่านจากไฟล์เดียวกัน สำหรับตัวอย่างส่วนลด คุณจะยืนยันว่าสถานะการตอบกลับเท่ากับ {{expected_status}} และฟิลด์ส่วนลดในเนื้อหา JSON เท่ากับ {{expected_discount}} เนื่องจากทั้งอินพุตและผลลัพธ์ที่คาดหวังมาจากแถวเดียวกัน ตรรกะการยืนยันเดียวกันจึงตรวจสอบแต่ละกรณีได้อย่างถูกต้อง หากคุณไม่เคยเขียนการยืนยันใน Apidog มาก่อน การยืนยัน API: คู่มือเชิงปฏิบัติ จะครอบคลุมรูปแบบต่างๆ และ วิธีการตั้งค่าการยืนยันและดึงตัวแปรจากผลตอบกลับ JSON จะแสดงรายละเอียดของ JSONPath

ในการเชื่อมต่อข้อมูล ให้เปิดการตั้งค่าการรันสถานการณ์การทดสอบและแนบไฟล์ CSV หรือ JSON ของคุณเป็นแหล่งข้อมูลการวนซ้ำ Apidog จะอ่านไฟล์, นับจำนวนแถว, และรันสถานการณ์หนึ่งครั้งต่อหนึ่งแถว โดยจะผูกคอลัมน์ของแต่ละแถวเข้ากับตัวแปรที่ตรงกัน รันมันภายในแอป แล้วคุณจะได้รับการวิเคราะห์แยกตามการวนซ้ำ: แถวใดผ่าน, แถวใดล้มเหลว, และค่าจริงเทียบกับค่าที่คาดหวังสำหรับการยืนยันที่ล้มเหลวแต่ละครั้ง

นี่คือจุดที่การใช้พารามิเตอร์สามารถทำงานร่วมกับชุดทดสอบที่เหลือของคุณได้ สถานการณ์แบบพารามิเตอร์ก็ยังคงเป็นสถานการณ์อยู่ดี ดังนั้นคุณจึงสามารถจัดกลุ่มหลายๆ สถานการณ์เข้าเป็น ชุดทดสอบ และรันทั้งหมดเป็นงานเดียวได้ การวนซ้ำแบบขับเคลื่อนด้วยข้อมูลจะจัดการความครอบคลุมภายในเอนด์พอยต์เดียว; ชุดทดสอบจะจัดการความครอบคลุมข้ามเอนด์พอยต์

การรันจากบรรทัดคำสั่ง

แอปเป็นที่ที่คุณสร้างและดีบัก CI คือที่ที่การทดสอบสร้างคุณค่า โดยจะรันทุกครั้งที่มี pull request โดยไม่ต้องมีใครกดปุ่ม การส่งต่อนี้คือสิ่งที่ Apidog CLI มีไว้เพื่อ มันนำสถานการณ์ที่คุณสร้างในแอปไปรันโดยไม่มี UI จากเทอร์มินัล พร้อมข้อมูลการวนซ้ำเดียวกัน

npm install -g apidog-cli

ไบนารีคือ apidog ดังนั้นทุกคำสั่งจะเริ่มต้นด้วย apidog run การรันพื้นฐานจะชี้ไปยังสถานการณ์ด้วย ID และสภาพแวดล้อมด้วย ID:

apidog run --access-token $APIDOG_ACCESS_TOKEN -t 605067 -e 1629989 -r cli

ในการขับเคลื่อนสถานการณ์นั้นจากไฟล์ข้อมูล ให้เพิ่มแฟล็ก iteration-data มันยอมรับพาธไปยังไฟล์ JSON หรือ CSV:

apidog run --access-token $APIDOG_ACCESS_TOKEN -t 605067 -e 1629989 \
  -d ./discount-cases.csv -r cli,junit --out-dir ./test-reports

แฟล็ก -d (รูปแบบเต็ม --iteration-data) เป็นหัวใจสำคัญของการรันแบบพารามิเตอร์จากบรรทัดคำสั่ง Apidog จะอ่านไฟล์, รันสถานการณ์หนึ่งครั้งต่อหนึ่งแถว, และรายงานผลของการวนซ้ำแต่ละครั้ง สลับ discount-cases.csv เป็น user-cases.json และแฟล็กเดียวกันก็จะจัดการกับอาร์เรย์ JSON; ตัวรันจะรับรู้รูปแบบจากไฟล์ ปฏิบัติต่อโทเค็นการเข้าถึงเหมือนรหัสผ่านและจัดเก็บเป็นความลับใน CI ห้ามเก็บไว้ในไฟล์ที่คอมมิต นั่นคือเหตุผลที่ทุกตัวอย่างอ้างอิงถึง $APIDOG_ACCESS_TOKEN แทนที่จะเป็นค่าที่ระบุตรงๆ

แฟล็กบางตัวที่มักใช้คู่กับการรันแบบพารามิเตอร์:

หากคุณต้องการรายการแฟล็กที่เป็นทางการและเป็นปัจจุบันสำหรับเวอร์ชันที่คุณติดตั้ง ให้รัน apidog run --help CLI จะแสดงทุกตัวเลือกพร้อมรูปแบบย่อและรูปแบบเต็ม

การเชื่อมต่อการรันแบบพารามิเตอร์เข้ากับ CI

เหตุผลที่ควรลงทุนในการทดสอบแบบพารามิเตอร์ก็คือมันจะให้ผลตอบแทนโดยอัตโนมัติ นี่คือ GitHub Actions job ที่ติดตั้ง CLI และรันสถานการณ์ที่ขับเคลื่อนด้วย CSV ทุกครั้งที่มี pull request:

name: API tests
on: [pull_request]

jobs:
  api-tests:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: '20'
      - name: Install Apidog CLI
        run: npm install -g apidog-cli
      - name: Run parameterized API tests
        env:
          APIDOG_ACCESS_TOKEN: ${{ secrets.APIDOG_ACCESS_TOKEN }}
        run: |
          apidog run --access-token $APIDOG_ACCESS_TOKEN \
            -t 605067 -e 1629989 \
            -d ./tests/discount-cases.csv \
            -r cli,junit --out-dir ./test-reports
      - name: Upload report
        if: always()
        uses: actions/upload-artifact@v4
        with:
          name: api-test-report
          path: ./test-reports

โทเค็นมาจาก secrets.APIDOG_ACCESS_TOKEN ซึ่งถูกตั้งค่าเพียงครั้งเดียวในการตั้งค่า repo ของคุณ ตัวรายงาน junit จะเขียน XML ที่แดชบอร์ด CI ส่วนใหญ่จะเปลี่ยนให้เป็นแผนผังผลลัพธ์ต่อการวนซ้ำ ดังนั้นแถวที่ล้มเหลวจะปรากฏเป็นการทดสอบที่ล้มเหลวที่มีชื่อ แทนที่จะเป็นเพียงข้อความบันทึกจำนวนมาก การใช้ if: always() ในขั้นตอนการอัปโหลดหมายความว่าคุณจะยังคงรายงานไว้แม้ว่าการรันจะล้มเหลว ซึ่งเป็นสิ่งที่คุณต้องการมากที่สุดในสถานการณ์นั้น สำหรับการเจาะลึกด้าน Actions เพิ่มเติม โปรดดู วิธีการทำให้ API tests เป็นอัตโนมัติใน GitHub Actions

สถานการณ์เดียวกันและไฟล์ข้อมูลเดียวกันสามารถรันได้ในระบบ CI ใดก็ได้ GitLab CI, Jenkins, CircleCI และอื่นๆ ทั้งหมดล้วนลดขั้นตอนลงเหลือสามอย่าง: ติดตั้ง Node และ CLI, เปิดเผยโทเค็นเป็นตัวแปรสภาพแวดล้อม, เรียกใช้ apidog run ด้วย -d ไม่มีการเขียนการทดสอบใหม่สำหรับแต่ละแพลตฟอร์ม

การเปรียบเทียบวิธีการทดสอบแบบพารามิเตอร์

Apidog ไม่ใช่วิธีเดียวในการรัน API tests แบบขับเคลื่อนด้วยข้อมูล ควรทำความเข้าใจภาพรวมเพื่อที่คุณจะได้เลือกสิ่งที่เหมาะสม

Postman และตัวรันของมันก็รองรับไฟล์ข้อมูลด้วยเช่นกัน ด้วย Postman’s Collection Runner หรือเครื่องมือบรรทัดคำสั่ง Newman คุณสามารถแนบไฟล์ CSV หรือ JSON และอ้างอิงตัวแปร {{column}} ในคำขอได้ คล้ายกับรูปแบบในที่นี้ เป็นแนวทางที่มีประสิทธิภาพและมีเอกสารประกอบอย่างดี ข้อเสียคือตรรกะการทดสอบของคุณจะอยู่ใน JavaScript pre-request และ test scripts ดังนั้นเมื่อการยืนยันของคุณเพิ่มขึ้น คุณก็ต้องดูแลโค้ดมากขึ้น หากคุณกำลังพิจารณาตัวรันแบบบรรทัดคำสั่งโดยเฉพาะ Postman CLI vs Newman จะอธิบายความแตกต่างอย่างละเอียด

เฟรมเวิร์กที่เน้นโค้ดเป็นหลัก เช่น pytest ที่มี @pytest.mark.parametrize, JUnit’s @ParameterizedTest, หรือ REST Assured ให้คุณควบคุมด้วยภาษาโปรแกรมได้อย่างเต็มที่ เป็นตัวเลือกที่เหมาะสมเมื่อตรรกะการทดสอบของคุณต้องการโค้ดจริงๆ: การตั้งค่าที่ซับซ้อน, การสร้างข้อมูลแบบกำหนดเอง, การเชื่อมโยงอย่างแน่นหนากับ codebase การทดสอบที่มีอยู่ ค่าใช้จ่ายคือทุกกรณีอยู่ในโค้ด ดังนั้นผู้ที่ไม่ใช่โปรแกรมเมอร์จึงไม่สามารถมีส่วนร่วมได้ และคุณต้องดูแลระบบ HTTP เอง

มุมมองของ Apidog คือสถานการณ์เป็นแบบภาพและข้อมูลเป็นภายนอก ดังนั้นตรรกะจึงยังคงอ่านง่ายและกรณีต่างๆ ยังคงเปิดกว้างสำหรับใครก็ตามที่สามารถแก้ไขสเปรดชีตได้ ในขณะที่สถานการณ์เดียวกันยังคงรันแบบ headlessly ใน CI หากคุณกำลังเลือกเครื่องมือสำหรับการรันแบบขับเคลื่อนด้วยข้อมูล CSV และ JSON โดยเฉพาะ การเปรียบเทียบใน เครื่องมือใดสำหรับการทดสอบ API แบบขับเคลื่อนด้วยข้อมูลด้วย CSV หรือ JSON จะเจาะลึกถึงข้อดีข้อเสีย ไม่มีวิธีใดผิด จับคู่แนวทางกับผู้ที่เขียนกรณีทดสอบและปริมาณตรรกะที่กำหนดเองที่แต่ละกรณีต้องการ

เวิร์กโฟลว์เชิงปฏิบัติที่ปรับขนาดได้

นี่คือลักษณะที่เวิร์กโฟลว์นี้จะเป็นเมื่อมันกลายเป็นส่วนหนึ่งของกิจวัตรของทีมคุณ

เริ่มต้นจากแคบๆ เลือกเอนด์พอยต์หนึ่งที่เคยสร้างปัญหาให้กับคุณมาก่อน เขียนสถานการณ์เดียวใน Apidog โดยมีการอ้างอิงตัวแปรในคำขอและผลลัพธ์ที่คาดหวังในการยืนยัน สร้างไฟล์ CSV ที่มีสามแถว: หนึ่งกรณีปกติ (happy path), หนึ่งกรณีที่ล้มเหลวที่ทราบ, หนึ่งกรณีขอบเขต รันมันในแอปจนกว่าการวนซ้ำทั้งสามจะทำงานตามที่คาดหวัง

จากนั้นเพิ่มข้อมูล ไม่ใช่การทดสอบ ทุกครั้งที่มีรายงานบั๊กเข้ามา ให้เพิ่มอินพุตที่ทำให้เกิดปัญหานั้นเป็นแถวใหม่พร้อมกับผลลัพธ์ที่คาดหวังที่ถูกต้อง บั๊กนั้นจะกลายเป็นกรณีการถดถอยถาวร และคุณไม่เคยเขียนการทดสอบใหม่ คุณเพียงแค่เพิ่มบรรทัดลงในไฟล์ ในอีกไม่กี่เดือน ไฟล์นั้นก็จะสะสมความซับซ้อนในโลกแห่งความเป็นจริงที่เอนด์พอยต์ของคุณต้องเผชิญ

สุดท้าย ทำให้เป็นอัตโนมัติ ใส่คำสั่ง apidog run -d ลงใน CI เพื่อให้ตารางทั้งหมดทำงานทุกครั้งที่มี pull request ตอนนี้การเปลี่ยนแปลงที่ทำให้เส้นทางรหัสที่หมดอายุเสีย จะทำให้บิลด์ล้มเหลวทันทีที่ถูกพุช โดยมีการวนซ้ำที่ระบุชื่อชี้ตรงไปยังแถวที่เสียหาย

ผลลัพธ์ที่เพิ่มขึ้นคือการบำรุงรักษา เมื่อรูปแบบการตอบสนองของเอนด์พอยต์เปลี่ยนไป คุณแก้ไขการยืนยันเพียงครั้งเดียวและทุกกรณีก็จะได้รับการแก้ไขนั้น เมื่อคุณต้องการอีกห้าสิบกรณี คุณก็เพิ่มห้าสิบแถว ตรรกะการทดสอบยังคงเป็นสิ่งเดียว เล็ก และอ่านง่าย ไม่ว่าความครอบคลุมของคุณจะกว้างแค่ไหนก็ตาม

คำถามที่พบบ่อย

การทดสอบแบบพารามิเตอร์และการทดสอบแบบขับเคลื่อนด้วยข้อมูลแตกต่างกันอย่างไร? ทั้งสองอธิบายแนวคิดเดียวกันและผู้คนใช้คำเหล่านี้สลับกันได้ ทั้งสองหมายถึงการรันการทดสอบหนึ่งครั้งซ้ำๆ ด้วยอินพุตและผลลัพธ์ที่คาดหวังที่แตกต่างกันซึ่งจัดหามาจากภายนอกการทดสอบ คำว่า “Parameterized” เน้นที่กลไกการผูกพารามิเตอร์; ส่วน “data-driven” เน้นที่แหล่งข้อมูลภายนอก ในทางปฏิบัติ ให้ถือว่าคำเหล่านี้เป็นคำพ้องความหมาย

ฉันควรใช้ CSV หรือ JSON สำหรับไฟล์ข้อมูลของฉัน? จับคู่รูปแบบกับลักษณะข้อมูลของคุณ กรณีที่เป็นตารางแบบเรียบที่ทุกแถวมีคอลัมน์ง่ายๆ เหมือนกันเหมาะกับ CSV และ CSV ก็แก้ไขได้ง่ายกว่าสำหรับผู้ที่ไม่ใช่โปรแกรมเมอร์ในสเปรดชีต เพย์โหลดที่มีโครงสร้างซ้อนกัน เช่น เนื้อหาคำขอที่มีอาร์เรย์และออบเจกต์ย่อยๆ เหมาะกับ JSON Apidog อ่านทั้งสองรูปแบบเป็นข้อมูลการวนซ้ำ ดังนั้นเลือกรูปแบบใดก็ได้ที่แสดงกรณีของคุณโดยไม่มีความยุ่งยาก

การวนซ้ำหลายร้อยครั้งจะทำให้ pipeline ของฉันช้าลงหรือไม่? แต่ละแถวคือการรันสถานการณ์หนึ่งครั้ง ดังนั้นเวลาทั้งหมดจะเพิ่มขึ้นตามจำนวนแถวคูณด้วยความล่าช้าต่อคำขอ สำหรับการทดสอบ API ส่วนใหญ่ ใช้เวลาเพียงไม่กี่วินาที ไม่ใช่หลายนาที หากชุดข้อมูลขนาดใหญ่ทำให้บิลด์ของคุณใช้เวลานาน ให้แบ่งมัน: รันชุดย่อยแบบ smoke test อย่างรวดเร็วทุกครั้งที่มี pull request และรันตารางทั้งหมดในงานตอนกลางคืนหรือก่อนการเผยแพร่ สถานการณ์และไฟล์เดียวกันนี้ใช้ได้กับทั้งสองกรณี; มีเพียงชุดย่อยของข้อมูลเท่านั้นที่เปลี่ยนไป

ฉันจะเก็บความลับออกจากไฟล์ข้อมูลและการตั้งค่าการทดสอบของฉันได้อย่างไร? เก็บข้อมูลรับรองออกจากไฟล์ข้อมูลโดยสิ้นเชิง โทเค็นและรหัสผ่านควรอยู่ในตัวแปรสภาพแวดล้อมหรือที่เก็บความลับของระบบ CI ของคุณ โดยอ้างอิงเป็น $APIDOG_ACCESS_TOKEN และอื่นๆ ไฟล์ข้อมูลควรเก็บอินพุตการทดสอบและผลลัพธ์ที่คาดหวัง ไม่ใช่ข้อมูลการยืนยันตัวตน ใครก็ตามที่สามารถอ่าน repo ได้ก็สามารถอ่าน CSV ได้ ดังนั้นให้ปฏิบัติกับมันในลักษณะนั้น

ฉันสามารถรันสถานการณ์แบบพารามิเตอร์เดียวกันกับ staging และ production ได้หรือไม่? ได้ ให้สถานการณ์และไฟล์ข้อมูลคงที่ และสลับสภาพแวดล้อมด้วยแฟล็ก -e ชี้การตรวจสอบ pull-request ไปยัง staging และ smoke test หลังการปรับใช้ไปยัง production โดยใช้ Scenario ID และข้อมูลเดียวกัน เพียงแต่เป็น Environment ID ที่แตกต่างกัน นั่นคือเหตุผลทั้งหมดที่สภาพแวดล้อมและข้อมูลเป็นอินพุตที่แยกกัน

สรุป

การทดสอบ API แบบพารามิเตอร์เปลี่ยนการครอบคลุมจากการคัดลอก-วางที่น่าเบื่อให้กลายเป็นงานป้อนข้อมูล คุณเขียนการทดสอบเพียงครั้งเดียว อธิบายแต่ละกรณีเป็นแถวในไฟล์ CSV หรือ JSON และปล่อยให้ตัวรันจัดการที่เหลือ ตรรกะยังคงเล็กและอ่านง่าย กรณีต่างๆ ยังคงเปิดกว้างสำหรับทุกคนในทีม และ CI จะรันตารางทั้งหมดทุกครั้งที่มีการเปลี่ยนแปลง

Apidog มอบเครื่องมือสร้างสถานการณ์แบบภาพสำหรับการเขียน, ไฟล์ CSV และ JSON ภายนอกสำหรับข้อมูล, และคำสั่ง apidog run -d สำหรับการรันแบบ headlessly ในระบบ CI ใดก็ได้ สร้างสถานการณ์เดียว, ชี้ไปที่ตารางกรณีที่เพิ่มขึ้น, และความครอบคลุมการทดสอบของคุณก็จะขยายวงกว้างขึ้นทุกครั้งที่มีคนเพิ่มแถว ดาวน์โหลด Apidog และเปลี่ยนการทดสอบแบบครั้งเดียวที่ไม่เสถียรของคุณให้เป็นสถานการณ์แบบพารามิเตอร์ที่ปรับขนาดได้

ปุ่มดาวน์โหลดแอป

ฝึกการออกแบบ API แบบ Design-first ใน Apidog

ค้นพบวิธีที่ง่ายขึ้นในการสร้างและใช้ API