No results for ""

Powered byAlgolia

Multipart requests (file uploads)

Uploading files is a common use case for many applications, so a tool like k6 needs to support testing such functionality.

The open() function

There is a builtin function, open(), that given a file or a URL will return its contents.

Below is a simple example showing how to load the contents of a local file data.json.

{
  "my_key": "has a value"
}
const data = JSON.parse(
  open("./data.json")
);

export default function() {
  console.log(data.my_key);
}

If you want to open a binary file you need to pass in "b" as the second argument.

const binFile = open("./image.png", "b");

export default function() {
    ...
}

Creating a multipart request (uploading a file)

Now that you know how to load a local file, let's look at a script that creates a POST request to upload this data to an API endpoint along with a regular text field (field in the example below):

import http from "k6/http";
import { sleep } from "k6";

let binFile = open("/path/to/file.bin", "b");

export default function() {
  var data = {
    field: "this is a standard form field",
    file: http.file(binFile, "test.bin")
  };

  var res = http.post("https://example.com/upload", data);
  sleep(3);
}

In the example above we use the http.file() API to wrap the file contents in a FileData object. When passing a JS object as the body parameter to http.post(), or any of the other HTTP request functions, where one of the property values is a FileData a multipart request will be constructed and sent.