จาก blog ก่อนหน้านี้ได้มีการกล่าวถึงการ ทดสอบ API ด้วย Requests Library ใน Robot Framework ไปแล้ว Blog นี้พี่พลอยจะมาสอนวิธีการเข้าถึงข้อมูลจาก Response ของ API ที่มาในรูปแบบข้อมูล Json โดยใช้ Json Path กันค่ะ
Json คือรูปแบบการจัดเก็บข้อมูลอย่างหนึ่ง ซึ่งจะประกอบด้วย Key และ Value โดยข้อมูลที่จัดเก็บแบบนี้สามารถเก็บได้มากกว่า 1 ข้อมูลและอ่านได้ง่ายค่ะ
ตัวอย่างข้อมูล Json
{ "firstName": "John", "lastName": "Smith", "address": { "streetAddress": "21 2nd Street", "city": "New York", "state": "NY", "postalCode": "10021" }, "phoneNumbers": [ "212 555-1234", "646 555-4567" ] }
มาดูตัวอย่าง API กัน
API นี้เป็น API สำหรับแสดง List ของข้อมูลประกาศจัดหางาน ซึ่งใน Document ระบุไว้ว่า หาก Call API นี้ จะได้ List ของ Jobs ออกมาตามภาพ
หากลองสังเกตุ Response Body ของ API นี้จะพบว่า ข้อมูลที่ส่งออกมานั้นมีรูปแบบเป็น Json และมีข้อมูลประกอบด้วย
- ข้อมูลของ Jobs ที่มีมากกว่า 1 Jobs สังเกตุได้จากแสดงอยู่ในรูปแบบของ Array [ {ข้อมูลชุดที่1} , {ข้อมูลชุดที่ 2} ]
- แต่ละชุดของข้อมูล Jobs ประกอบด้วย id, company, position, status, jobType, jobLocation, createdby, createdAt, updatedAt
- มีการแสดงจำนวนของ jobs ทั้งหมดด้วยข้อมูล totalJobs
- แสดงข้อมูลของ Page ว่ามีทั้งหมดกี่ Page ด้วยข้อมูล numOfPages
ทำความรู้จักกับ Json Path แล้วจะง่ายขึ้น
หากต้องการเข้าถึงข้อมูลแบบ Json ง่ายๆ Json Path สามารถช่วยเราได้ โดยเราสามารถใช้ path ของ Key เข้ามาช่วยค่ะ สามารถไปอ่านเพิ่มเติมได้ ที่ Doc JsonPath นี้เลย อธิบายไวๆนั่นคือ
- Root ของ Json จะแทนด้วย $. เสมอ
- หากเราต้องการ Value ของ Key ใด ไม่ว่า Key เหล่านั้นเป็น Sub ของ Key ไหน เราสามารถเอา Key เหล่านั้นมาต่อกันเป็น Path
ตัวอย่าง
จาก Response ของ API ของ Jobs List ตามภาพข้างบน
หากต้องการข้อมูล totalJobs สามารถเขียน Json path ได้เป็น $.totalJobs
หากต้องการข้อมูล Position ใน Jobs ชุดที่ 1 สามารถเขียน Json path ได้เป็น $.jobs[0].position
หากต้องการข้อมูล Job Location ใน Jobs ชุดที่ 2 สามารถเขียน Json path ได้เป็น $.jobs[1].jobLocation
🤖 ได้เวลาดึงข้อมูลจาก Json แล้ว
1) ติดตั้ง Library กันก่อน
ก่อนที่เราจะไปเข้าถึงข้อมูล เราจะต้องติดตั้ง Library ใหม่ที่จะมาเป็นตัวช่วย นั่นคือ Library ที่ชื่อว่า Json Validator นั่นเอง
pip install robotframework-jsonvalidator
2) จากนั้นหา Json Path ที่ต้องใช้
- หากต้องการ จำนวนของ jobs ทั้งหมด พี่สามารถเข้าถึงข้อมูลได้จาก Key totalJobs โดยใช้ json path นั่นคือ $.totalJobs
- หากต้องการข้อมูล Company ใน Jobs ชุดที่ 1 และ ข้อมูล jobLocation ใน Jobs ชุดที่ 2 สามารถใช้ Json path เป็น $.jobs[0].company และ $.jobs[1].jobLocation ตามลำดับ
3) Keyword ที่ใช้ในการดึงข้อมูล
เราจะใช้ Keyword Get Elements เพื่อเข้าถึงข้อมูลตาม json path ที่เรากำหนด หน้าตาตอนเรียกใช้ก็จะเป็นแบบนี้ค่ะ
${value} JsonValidator.Get Elements jsonString jsonPath
4) Test script ที่ได้
*** Settings *** Library RequestsLibrary Library JsonValidator *** Test Cases *** We get jobs data from json Create Session jobsList url=https://web-demo.qahive.com ${response} GET On Session jobsList url=/api/v1/jobs cookies=${Cookie_Token} Log ${response.status_code} # Status code Log ${response.json()} # Json Response from API ${totalJobsInList} JsonValidator.Get Elements ${response.json()} $.totalJobs ${companyInJob1} JsonValidator.Get Elements ${response.json()} $.jobs[0].company ${jobLocationInJob2} JsonValidator.Get Elements ${response.json()} $.jobs[1].jobLocation Log Many ${totalJobsInList} ${companyInJob1} ${jobLocationInJob2}
5) นี่คือผลที่ได้จ้า
Keyword Document :
https://github.com/peterservice-rnd/robotframework-jsonvalidator/tree/master
สนใจเรียนรู้แบบเจาะลึก
Robot Framework Selenium
Web Automated Test ด้วย
Robot Framework และ Selenium 6