Newman รัน Test Script, สร้าง Test Reports, และการ ใช้งานร่วมกับ Jenkins

Puttapong Khemcharoen
Scale360 Engineering
3 min readJan 30, 2018
ขอขอบคุณภาพจาก Postman

สวัสดีครับ ก่อนอื่นผมขอออกตัวก่อนเลยว่า ผมไม่เคยเขียน Node.Js และ Jenkins Pipeline มาก่อน และนี้เป็นครั้งแรกที่ผมได้มีโอกาสในการเรียนรู้มัน ผมจึงคิดว่ามันเป็นจุดเริ่มต้นที่ดี หากผมเรียนรู้ได้ คุณก็ทำได้เช่นกันครับ

สิ่งที่คุณควรรู้เบื้องต้นก่อนมาถึงบทความนี้ คือ

ต่อมา…. เพื่อไม่ให้เป็นการเสียนาฬิกา (เวลาาา ผ่าม!!) เรามาเริ่มกันเลยดีกว่า

  1. Download and Install Node.Js, Newman ลงใน computer ของคุณ
  2. หลังจากที่เรารันคำสั่ง npm install -g newman แล้ว เราก็สามารถใช้ newman ได้เป็นที่เรียบร้อย โดยที่ผมจะใช้มันกับ Test Script ตัวอย่าง จากตอนที่แล้ว ที่ผมเขียนขึ้นมานะครับ
  3. ก่อนอื่นผมต้อง Export test script จาก Postman ออกมาก่อน โดยการคลิ๊กขวาที่ collection แล้วกด export
ภาพตัวอย่าง การ Export Collection ออกมาเป็นไฟล์ JSON

4. เปิด Command Line ขึ้นมาและใช้ คำสั่ง newman run ชื่อ collection.json ตัวอย่าง “newman run Test_Search_BDD.postman_collection.json” คุณสามารถดูคำสั่งต่างๆได้จาก Newman Document

หมายเหตุ : คุณสามารถเพิ่ม delay ระหว่างการเทสได้ด้วยใช้คำสั่ง --delay-request 1000 (milliseconds) เพื่อหน่วง test script ไว้สำหรับกรณีข้อมูลอาจจะเข้า database ช้า

ภาพตัวอย่างการ ใช้ Newman เพื่อรัน Test Script

และสำหรับการทำ Report เราเพียงแค่เพิ่มคำสั่งต่อท้ายไป ดูคำสั่งเพิ่มเติมคลิ๊ก

  • - -reporters “cli,html,junit” สำหรับ generate report ไฟล์ html,xml
  • - -report-html-export สำหรับกำหนดชื่อไฟล์ และที่อยุ่ของไฟล์ html
  • - -report-junit-export สำหรับกำหนดชื่อไฟล์ และที่อยุ่ของไฟล์ xml

ตัวอย่างเช่น “ newman run Test_Search_BDD.postman_collection.json --reporters “cli,html,junit” --reporter-html-export “./test-reports/html/index.html” --reporter-junit-export “./test-reports/xml/serviceA.xml”

ภาพตัวอย่าง Test Reports

หมายเหตุ : ไฟล์ HTMLจะมี CSS มาให้แล้ว แต่ถ้าหากคุณต้องการที่จะกำหนดเองคุณสามารถเขียน CSS ขึ้นมาเองได้ อีกเช่นกัน โปรเจคตัวอย่างการสร้าง CSS เองหากคุณต้องการดูภาพตัวอย่าง Test-report คลิ๊กที่นี่

ปล. เพิ่มขอแนะนำให้สร้างโฟเดอร์แยกระหว่าง html และ Junit เพื่อให้ง่ายต่อการจัดการในอนาคตครับ

Newman ทำงานร่วมกับ Jenkins Pipeline

ต่อมาเราจะเอา Newman มาเชื่อมกับ Jenkins Pipline เพื่อเอาไว้ทำเป็นหนึ่งใน Test Process สำหรับการทำ CI (Continuous Integration)

ผมจะไม่ขอพูดถึงวิธีลง Jenkins, การตั้งค่า Jenkins กับ git นะครับ คุณสามารถดูได้จาก วีดีโอด้านบน หรือหาอ่านเอาได้จากบทความอื่นๆ ในที่นี่ผมจะยกตัวอย่างง่ายๆ คือ ผมมีโปรเจคที่ผูกกับ git ไว้แล้ว ทุกครั้งที่ผมกดปุ่ม Build now ผมต้องการให้มันทำการ download project มาลง workspace และทำการไล่ตาม pipeline โดยมีหัวข้อดังนี้ Prepartion Project, Newman Test, Test Report, Copy Test Folder โดยรายละเอียดแต่ละ Stages จะเป็นตามนี้

ภาพตัวอย่าง pipeline script สำหรับการใช้ Newman

จากภาพ คุณจะมองเห็นการทำงานคร่าวๆได้ดังนี้

  • Preparation Project คือ การ download project ลง workspace ของ Jenkins จากคำสั่ง git branch : ชื่อbranch , credentialsId: ที่ได้มาจากการ generate ตอนเชื่อม git, url : ลิ้งที่ไปหา project.git ของเรา
  • Newman Test คือ การ รัน Test script โดยใช้ Newman เราจำเป็นต้องลง newman ในเครื่อง server ก่อน และคุณสามารถเรียกใช้ newman ด้วยรูปแบบ เดียวกับที่เราสอนไว้ข้างต้น
  • Test Reports คือ การ generate reports ออกมาเป็นไฟล์ html, junit ในส่วนนี้ผมใช้ Junit Plugin และ HTML Publisher Plugin ในการทำ report ให้สำหรับ jenkins คณสามารถดูตัวอย่างได้ สำหรับ
    1. JUnit นั้นตรง testResults: เราจะทำการเรียกไปยัง path ที่ใช้เก็บ reporter นามสกุล xml ของเราและอ่านมันทั้งหมด
    2. HTML เราต้องเซ็ต reportDir เรียกไปยัง path ที่ใช้เก็บ report นามสกุล html โดยต้องระบุชื่อ report file ให้เรียบร้อย
    หมายเหตุ: reportDir ไม่สามารถใช้ environment มาแทนได้ จำเป็นต้องระบุชื่อลงไปตรงๆ
  • Copy Test Folder คือ การก๊อปปี้ทั้งโฟเดอร์ Test เอาไว้สำหรับการทำ E2E Test ในอนาคต ตรงนี้เราใช้คำสั่ง cp -rf ทั่วไปครับ เพียงแต่ บางครั้งในการทำงานอาจเกิด error ขึ้นที่ตรงนี้ได้ ในกรณีที่ไม่มี folder นั้นๆ ทำให้ผมต้องใส่ mkdir -p ในการสร้าง project ไว้ก่อน
ภาพตัวอย่างการ Build ด้วย jenkins
ภาพตัวอย่างหน้า Console Output จะเห็นได้ว่ามีการแสดงผลของแต่ละ Stage รวมทั้ง Test script ที่ใช้ทดสอบ
ภาพตัวอย่าง JUnit Report

สำหรับภาพตัวอย่าง HTML Report จะเหมือนกับบทความก่อนที่แสดงให้ดูพร้อมทั้งเขียนคำอธิบายแต่ละส่วนไว้

หมายเหตุ : HTML Report ใน Jenkins ไม่รองรับ CSS ดังนั้นเราจำเป็นต้องตั้งค่าที่ Manage Jenkins->Script console โดยใช้ คำสั่ง

System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "")"

เป็นอันจบ สำหรับการใช้ Newman คู่กับ Jenkins นะครับ บทความต่อไปจะเป็น บทความการใช้ Newman (Node.Js) ในการทำ E2E Test นะครับผม ยังไงสามารถกด ติดตามไว้ได้เลย

--

--

Puttapong Khemcharoen
Scale360 Engineering

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