菜单
开源 RSS

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)从会话中移除标签

示例

JavaScript
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');
  }
}