มาทำความรู้จักกับการทำ API Services E2E Tests ด้วย Postman, Newman, Jenkins.

Puttapong Khemcharoen
Scale360 Engineering
3 min readJan 29, 2018

สวัสดีครับ วันนี้ผมมาอธิบายเกี่ยวกับการเขียน Test ตั้งแต่วิธีการเขียน test script ไปจนถึงการทำเป็น End to End Tests (E2E)โดยมีเครื่องมือที่ใช้ดังนี้ Postman, Newman, Jenkins. ซึ่งในแต่ละหัวข้อจะถูกแยกสตอรี่ออกไปอีกตามความเหมาะสม โดยหัวข้อบทความจะอยุ่ด้านล่างสุดนะครับ

ขอขอบคุณภาพจาก Postman

Postman คืออะไร ?

  • Postman เป็นเครื่องมือสำหรับที่ไว้ใช้สำหรับ API Developers ซึ่งหากให้อธิบายในความหมายง่ายๆก็คือ โดยปกติแล้วเมื่อเราเขียน API Service ขึ้นมาเรามักจะใช้ Postman ที่เป็น API Testing tool ในการส่ง Request และดู Response ที่ได้ต่างๆกลับมา
ภาพตัวอย่างโปรแกรม Postman

จากภาพตัวอย่างหน้าจอโปรแกรมของ Postman ซึ่งจะเห็นได้ว่าผมได้แบ่งออกเป็น 4 หัวข้อใหญ่ๆ ซึ่งได้แก่

  1. สีแดง ในส่วนกรอบสีแดงนั้นจะเป็นที่ส่วนเก็บ Collections ซึ่งเราสามารถบันทึกไฟล์ที่เราใช้งานและจัดเก็บหมวดหมู่ได้ตามที่ต้องการ เช่น แยกออกมาเป็นหัวข้อตามชื่อ Services แล้วแยกออกเป็น Features Folder อีกชั้นหนึ่ง เพื่อให้ง่ายต่อการใช้งาน
1.1 ตัวอย่าง ภาพที่จัดเก็บ Service ชื่อ Test_Search_BDD ที่มี การแยก Folder ตาม Feature ต่างๆ

2. สีเหลือง จะเป็นส่วนของ tab ไฟล์ต่างๆ ซึ่งแต่ละไฟล์ในนี้จะเป็น request ทั้งหมด โดยเราจำเป็นต้องกรอก URL ที่ใช้ในการทดสอบ และกรอกข้อมูลทั่วไป header, body (json, files, or xml ) ซึ่งเราสามารถเขียน test script ได้ที่ส่วนนี้ด้วยเช่นกัน

3. สีฟ้า เมื่อเรากดปุ่ม Send ในกรอบสีเหลืองไปแล้ว Request ที่ได้จะถูกส่งไปประมวลผลที่ URL นั้นและเมื่อเราได้ Response กลับมาจะถูกส่งกลับมาอยุ่ในส่วนของกรอบสีฟ้านี้ ซึ่งรายละเอียดก็จะถูกแยกออกมาตามหัวข้ออย่างชัดเจน

4. สีม่วง ในส่วนนี้ผมขอเรียกมันว่า ส่วนสมาชิก เมื่อคุณสมัครสมาชิก และล็อกอิน Postman ด้วย User ของคุณ ระบบจะทำการ sync ข้อมูล collections ต่างๆของคุณเอาไว้ในกรณีที่คุณไปทำงานที่อื่นก็ยังสามารถมองเห็น collections ตัวเองได้ หรืออีกทางเลือก สำหรับ Premium Account คุณสามารถ share collections ของคุณให้เห็นเป็นทีมได้ อีกเช่นกัน

เราก็ได้รู้ รายละเอียดคร่าวๆ เกี่ยวกับ Postman ไปแล้วต่อไปเราจะมาพูดถึง Concept ในการเขียน Test script, การใช้ Newman ในการรัน Test และ Generate Test Report, การใช้ Jenkins pipeline คู่กับ Newman.

  1. Test Script

“Writing automated test scripts on postman while testing can be expensive in the short-term, but they save you time in the long-term.

หมายเหตุ: การเขียน Test ที่ได้จาก Postman นั้นจะเป็นแค่ในส่วนของการทดสอบ Integration Test ซึ่งเราสามารถเช็คได้แค่ค่า response เท่านั้น ไม่สามารถเข้าถึง function ต่างๆได้ หากคุณหวังพึ่ง Postman ในการทำ test อย่างเดียวนั้นคุณอาจจะผิดหวัง เพราะคุณยังคงจำเป็นต้องทำ Unit Test, Integration Test ใน code ของคุณ เพื่อดูการทำงาน function ต่างๆ

  • concept ในการเขียน test script จะมีการเขียน test ที่หลากหลายออกไปตามเงื่อนไขที่ต้องการ เช่น การเช็คค่า status response, json response ที่ส่งคืนกลับมาว่ามีค่าตามที่เราคาดหวังไหม, การ validate schema response, หรือแม้กระทั่งการเขียนเพื่อเทสทั้งระบบ โดยการส่งค่าผ่าน environment แต่ละ service เพื่อให้มองเห็นกัน ก็ทำได้เช่นกัน
  • การเขียน Test Script โดยใช้หลัก Behavior Driven Development (BDD)

จากภาพ ตัวอย่าง คุณจะเห็นได้ว่าเราสามารถนำ BDD ที่เราได้รับมา มาเขียน Test script ได้เพียงแค่ขั้นตอนออกมาตาม Work flow ของมัน และใส่แยกเป็น folder จัดหมวดหมู่ให้เรียบร้อย และเมื่อคุณต้องการทดสอบ คุณก็เพียงแค่ต้องสั่ง run test ที่ “BDD_FLOW Collection” มันก็จะทำการรัน test script จากบนลงล่างไล่ตาม work flow ที่เราเขียน โดยเราเพียงแค่ส่งค่าที่ได้จาก response อันก่อนหน้ามาใช้สำหรับอันต่อไปๆเรื่อยๆ

2. Newman คือเครื่องมือช่วยที่ใช้ในการทดสอบ collection postman ผ่าน command line ซึ่งตัว Newman เองนั้นถูกเขียนขึ้นมาจาก Node.Js นั่นหมายถึงว่า ก่อนที่คุณจะใช้งานมันได้ คุณจำเป็นต้องลง Node.Js ก่อน Download and Instaill NodeJs และตามด้วย ลง Newman จากคำสั่ง npm install -g newman

Newman นั้นสามารถใช้งานได้ทั้งหมด 3 รูปแบบ

  • Newman command line ซึ่งก็คือหลังจากที่คุณติดตั้งแล้วคุณสามารถใช้ คำสั่ง Newman ได้ ตัวอย่างเช่น Newman run ชื่อไฟล์ collection.json -e ชื่อไฟล์ environmen.json
  • Newman Node.Js ความสามารถของ newman ตอนนี้ยังสามารถรันได้แค่ครั้งละหนึ่ง collection ไฟล์ นั่นหมายถึงว่า หากคุณต้องการ ทดสอบหลายๆ collections คุณจำเป็นที่จะต้องเขียน newman ด้วย Node.js ขึ้นมาเอง ซึ่งคุณสามารถดูตัวอย่างได้ที่ โฟเดอร์ example ของ newman ซึ่งเป็นอีกหนึ่งทางเลือกสำหรับนักพัฒนา
  • Newman Docker เป็น Docker images ของ Newman ซึ่งความสามารถนั้นจะคล้ายกับ newman command line ซึ่งก็คือเมื่อคุณ install newman docker image เรียบร้อยแล้วคุณสามารถใช้งานคำสั่ง command line ได้ โดยที่ทุกครั้งที่คุณสั่งรัน มันจะทำการสร้าง container อันใหม่ขึ้นมาให้ขึ้นเสมอ ใน *** ส่วนนี้ผมไม่ค่อยแนะนำ เนื่องจากเท่าที่ผมได้ทดสอบใช้มันมีปัญหาอยุ่ก็คือ ตัว test report เราไม่สามารถแก้ไขชื่อไฟล์ได้ตามที่ต้องการ ซึ่งอาจเป็นปัญหาใหญ่สำหรับบางคน หากเปรียบเทียบแล้วผมแนะนำ newman command line ที่ลงปกติดีกว่า และหากกรณีที่มีการ custom มากๆ คุณก็ยังสามารถใช้ newman Node.js ได้อีกเช่นกัน
  • Test Reports คุณสามารถ generate ออกมาเป็นไฟล์ cli, json, html, และ junit ซึ่งผมจะขอยกตัวอย่างที่เราใช้กันบ่อยก็คือ html
ภาพตัวอย่าง Test Report Html

สีแดง คือ ผลสรุปของการเทสทั้งหมดที่เกิดขึ้นใน collection นั้นๆ

สีเหลือง หรือ ตัวอักษรสีดำหนา คือ ชื่อโฟเดอร์ที่ใช้เก็บไฟล์ในการเทส

สีเขียว คือ ชื่อไฟล์ที่ใช้ทดสอบ โดยจะมีรายละเอียดต่างๆอยุ่ในนั้น

3. การใช้ Jenkins pipeline ร่วม Newman ในส่วนนี้ หากคุณยังไม่ค่อยแน่ใจว่า Jenkins ทำงานยังไงคุณสามารถหาอ่านได้จากลิ้งดังต่อไปนี้

Jenkins คืออะไร ?

มาทำความรู้จัก Jenkins And Git

ต่อมาผมอยากให้คุณมองว่า Newman เป็นแค่ stage หนึ่งใน pipline ซึ่งสิ่งที่เราต้องทำนั้นก็คือ สั่งให้ Newman run Test โฟเดอร์นั้นๆ และนำผลที่ได้มา generate เข้าสู่ console output, และ ใช้ publishHTML ของ jenkins ในการทำ Test Report (HTML), หรือจะใช้ junit ของ jenkins ในการอ่านไฟล์ xml เพื่อ generate ออกมาเป็น Junit Report.

จากทั้งหมดที่กล่าวมาข้างต้นนั้นเป็นเหมือนข้อมูลทั่วไปและ Concept ไอเดีย คร่าวๆ ในการใช้งานเครื่องมือทั้งสามนี้ ต่อไปเราจะ เจาะลึกลงไปที่เนื้อหาของแต่ละส่วนกันนะครับ

--

--

Puttapong Khemcharoen
Scale360 Engineering

Jobs is a hat that you wear, it does not mentally who you are.