จาก 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

Previous articleวิธีใช้ Robot Framework Requests Library ทดสอบ API
Next articleRun Robot Framework ผ่านทาง Command line