Hey Devs ππ»
We always have some .env files in our projects to assign the environment variables.
Now as mentioned here, we can pass the env vars like:
k6 run -e MY_NAME=MoKhajavi75 script.js
And use them in our k6 project like:
export default function () { console.log(__ENV.MY_NAME); }
This works if the env variables are not too many.
But what if we have many? Or even if we don't want to pass them via CLI and use a .env file π€
I have a nice yet effective bash script to assign those env vars from a .env file:
#!/bin/bash ENV_FILE_PATH=".env" ENV_VARS=() if [[ ! -f "${ENV_FILE_PATH}" ]]; then echo "\"${ENV_FILE_PATH}\" file not found!" exit 1 fi while IFS= read -r line; do key=${line%%=*} value=${line#*=} ENV_VARS+=("-e" "${key}=${!key:-${value}}") done < <(grep -vE '^\s*($|#)' "${ENV_FILE_PATH}") exec k6 run "${ENV_VARS[@]}" "$@"
This script skips comment lines (the ones starting with "#" and empty lines) so feel free to write your .env file as you like, as many variables you like!
We can name it run.sh
and use it like:
./run.sh script.js
Just don't forget to make it executable! (chmod +x run.sh
)
Now, what about the usage part? What if we're using TypeScript, as it's getting into k6?
Let's write a nice getEnv
utility function too:
type EnvVars = 'KEY1' | 'KEY2' | 'KEY3'; /** * Retrieves environment variables. * @param key - The key of the environment variable to retrieve. * @returns - The value of the environment variable. * @throws {Error} - Throws an error if the environment variable is not set. * @example * const value = getEnv('KEY'); */ export const getEnv = (key: EnvVars): string => { const env = __ENV[key]; if (env === undefined) throw new Error(`Environment variable ${key} is not set`); return env; };
So we can improve the above example:
import { getEnv } from './env'; export default function () { console.log(getEnv('MY_NAME')); }
This way, it suggests code intellisense and we have a nice, well-documented utility function for usage too.
Hope this helps :)
Feel free to comment with any questions or suggestions!
Top comments (0)