httpx
注意
该库的源代码可在 grafana/k6-jslib-httpx GitHub 仓库中找到。
httpx
模块是一个外部 JavaScript 库,封装了原生的 k6/http 模块。它是一个 HTTP 客户端,具有原生模块中尚未提供的功能。
- 能够全局设置 HTTP 选项(例如超时)。
- 能够设置将用于所有请求的默认标签和标头。
- 更用户友好的请求函数参数(get, post, put 接受相同的参数)。
httpx
模块与 expect 库良好集成。
注意
该库正在积极开发中。它足够稳定可用,但您可以关注 GitHub 仓库,以便在新版本发布时收到通知。
方法
函数 | 描述 |
---|---|
asyncRequest(method, url, [body], [params]) | 用于执行任意异步 HTTP 请求的通用方法。 |
request(method, url, [body], [params]) | 用于执行任意 HTTP 请求的通用方法。 |
get(url, [body], [params]) | 执行 GET 请求 |
post(url, [body], [params]) | 执行 POST 请求 |
put(url, [body], [params]) | 执行 PUT 请求 |
patch(url, [body], [params]) | 执行 PATCH 请求 |
delete(url, [body], [params]) | 执行 DELETE 请求 |
batch(requests) | 批量处理多个 HTTP 请求并并行发送。 |
setBaseUrl(url) | 设置会话的基本 URL |
addHeader(key, value) | 向会话添加标头 |
addHeaders(object) | 向会话添加多个标头 |
clearHeader(name) | 从会话中移除标头 |
addTag(key, value) | 向会话添加标签 |
addTags(object) | 向会话添加多个标签 |
clearTag(name) | 从会话中移除标签 |
示例
import { fail } from 'k6';
import { Httpx } from 'https://jslib.k6.io/httpx/0.1.0/index.js';
import { randomIntBetween } from 'https://jslib.k6.io/k6-utils/1.2.0/index.js';
export const options = {
vus: 1,
iterations: 1,
};
const USERNAME = `user${randomIntBetween(1, 100000)}@example.com`; // random email address
const PASSWORD = 'secretpassword';
const session = new Httpx({
baseURL: 'https://quickpizza.grafana.com',
headers: {
'User-Agent': 'My custom user agent',
},
timeout: 20000, // 20s timeout.
});
export default function testSuite() {
const registrationResp = session.post(
`/api/users`,
JSON.stringify({
username: USERNAME,
password: PASSWORD,
})
);
if (registrationResp.status !== 201) {
fail('registration failed');
}
const loginResp = session.post(
`/api/users/token/login`,
JSON.stringify({
username: USERNAME,
password: PASSWORD,
})
);
if (loginResp.status !== 200) {
fail('Authentication failed');
}
const authToken = loginResp.json('token');
// set the authorization header on the session for the subsequent requests.
session.addHeader('Authorization', `Bearer ${authToken}`);
const payload = {
stars: 5,
pizza_id: 1,
};
// this request uses the Authorization header set above.
const respCreateRating = session.post(`/api/ratings`, JSON.stringify(payload));
if (respCreateRating.status !== 201) {
fail('Rating creation failed');
} else {
console.log('New rating created');
}
}