API Testing với Postman (Phần 14) – Xử lý array

Hôm nay có bạn hỏi về việc lưu cả 1 list vào trong environment, mình cũng viết 1 bài ngắn nói về việc này.

Mình sử dụng luôn api test của Postman: https://postman-echo.com/post

Body là:

{
    "book": [
        {
            "category": "reference",
            "author": "Nigel Rees",
            "title": "Sayings of the Century",
            "price": 8.95
        },
        {
            "category": "fiction",
            "author": "Evelyn Waugh",
            "title": "Sword of Honour",
            "price": 12.99
        },
        {
            "category": "fiction",
            "author": "Herman Melville",
            "title": "Moby Dick",
            "isbn": "0-553-21311-3",
            "price": 8.99
        },
        {
            "category": "fiction",
            "author": "J. R. R. Tolkien",
            "title": "The Lord of the Rings",
            "isbn": "0-395-19395-8",
            "price": 22.99
        }
    ]
}

I. Cách save array

Nhiệm vụ bây giờ là: Save toàn bộ author vào 1 array, sau đó save array vào environment

var jsonData = pm.response.json();
// Get list books from response
var books = jsonData.json.book;

// Only for debug
console.log(books);

// Get list of authors, then save to environment
var authors = _.map(books, 'author');

// Need convert to String before save to environment
pm.environment.set("authors", JSON.stringify(authors));

// Only for debug
for (i = 0; i < authors.length; i++){
    console.log(authors[i]);
}
  • Lưu ý: để save object hoặc array vào trong environment, bạn cần phải JSON.stringify() cái object hoặc array đó trước.

Và đây là kết quả

  • Console log
  • Environment

II. Cách dùng array đã save

  • Nếu bạn muốn sử dụng 1 phần tử của array đã được lưu lại ở trong những request tiếp theo. Ví dụ như muốn “lấy random phần tử author”

Bạn sẽ code như sau:

Pre-Request tab:

let authors = JSON.parse(pm.environment.get('authors'));

let index = _.random(authors.length - 1);

pm.variables.set("author", authors[index]);
  1. Vì “authors” được lưu trong environment sẽ ở dạng String, chứ ko phải array, nên sau khi get value ra, thì ta phải dùng JSON.parse() để cho nó trở lại là array, rồi save vào 1 biến nào đó.
  2. Muốn get 1 phần trong array, ta phải biết vị trí (index) của phần tử đó. Do đó, để lấy được 1 phần tử random thì ta cũng cho index random luôn. Tuy nhiên, nó chỉ được phép random trong khoảng từ 0 --> [array length] - 1 mà thôi. Nếu ngoài khoảng đó, nó sẽ bị lỗi ArrayIndexOutOfBound, có nghĩa là access vào 1 vị trí nằm ngoài array.
  3. Save biến đó vào vùng tạm variables vì ta không cần keep track biến đó theo thời gian, ta chỉ cần lưu tạm, để bên body có thể lấy được value
5 2 votes
Article Rating
Subscribe
Notify of
guest
13 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Chien Bac
Chien Bac
5 years ago

Hi anh Giang,
Cho em hỏi trường hợp này :
Ví dụ em save 1 variable là 1 array động (mảng này được response từ api A)
Mảng này có 10 phần tử.
Em muốn tạo request cho api B với 10 phần tử đó theo tuần tự, nếu phải tạo 10 requests thì sẽ mất time.
VD :
a = {1,2,3,4,5,6,7,8,9,10}
url/post/id[a]
Liệu có cách nào chỉ tạo 1 request nhưng run tất cả các thành phần trong mảng luôn không?
Cám ơn anh.

Hoàng Vũ
Hoàng Vũ
5 years ago

Cho e hỏi chút về cách set vulue save vào environment.
Trong response của header, em muốn set ra được value nó nó mà không được,
ví dụ như : set-cookie, nó có 2 key như thế, e chỉ lấy được 1 key, còn 1 key không lấy để lưu được.

Hoàng vũ
Hoàng vũ
5 years ago
Reply to  Giang Nguyen

Ví dụ Header của response trả về có 2 key cùng có tên là Set-cookie.
Mỗi 1 key lại có 1 value khác nhau, giờ em muốn lấy value của key : Set-cookie đó luuw vào environment để làm value cho API khác.
và em dùng theo hàm Test này ”
var cookie = null;
pm.test(“Collect redirect location”, function () {
pm.response.to.have.header(“Set-Cookie”);
cookie = pm.response.headers.get(“Set-Cookie”);
if (cookie !== undefined) {
pm.environment.set(“redirURL”, cookie);
}
});

Nó không lấy được giá trị em mong muốn ạ.

Nhật Hạ
Nhật Hạ
4 years ago

Hi anh, em có 1 mảng kiểu này
[ {“id”:”27489494″,
“name”:”abc”},
{“id”:”27489989494″,
“name”:”ab5c”},
{“id”:”2748379494″,
“name”:”a3bc”},
{“id”:”27487489494″,
“name”:”a2bc”}]
em muốn set riêng từng id theo name vào environment thì làm như nào ạ, value động có thể thay đổi.

Trang
Trang
3 years ago

Hi anh. Khi reponse trả về mảng 2 chiều. Em muốn get mảng đó lên phần Test trong postman thì em thực hiện câu lệnh nào ạ? Em cám ơn

Sa Mạc Nở Hoa
Sa Mạc Nở Hoa
4 months ago

Hi anh Giang,
Em có 1 response data như này:
{
  “status”: 200,
  “error”: “OK”,
  “soaErrorCode”: null,
  “soaErrorDesc”: null,
  “clientMessageId”: “467994f519”,
  “path”: “/current-account/query”,
  “data”: [
    {
      “accountInfos”: [
        {
          “customerId”: “1234”,
          “customerName”: “CUSTOMER.1234”,
          “accountNumber”: “5083025030912”,
          “accountType”: [
            “1”
          ],
          “accountCurrency”: “VND”,
          “postingRestricts”: [],
          “productInfos”: [
            {
              “type”: “Category”,
              “id”: “1001”,
              “name”: “Current Accounts”,
              “shortName”: “Current Account”
            }
          ],
          “jointHolders”: [],
          “delegateHandovers”: [],
        }
      ],
      “errorCode”: “000”,
      “errorDesc”: “Succeed”,
      “clientMessageId”: “1111d92-7e98-4ed4-9e0d-a”,
      “additionalInfos”: null
    }
  ]
}

Em muốn lấy giá trị customerId em viết script như này thì giá trị lấy ra lại = null

var responseData = pm.response.json().data;
pm.environment.set(“customerId”,responseData[0].accountInfos[0].customerId);

Anh có thể chỉ ra lỗi sai giúp em với ạ.
Em cảm ơn

Sa Mạc Nở Hoa
Sa Mạc Nở Hoa
4 months ago
Reply to  Giang Nguyen

Em đã lấy được giá trị rồi ạ. Em cảm ơn anh. Do em set biến ở mock enviroment và dùng ở collection khác nên không lấy được. Em chuyển thành pm.globals.set(“customerId”,responseData[0].accountInfos[0].customerId);
là được ạ.