Hướng dẫn kiểm thử tải JavaScript với Gatling
Gatling giờ đây hỗ trợ JavaScript và TypeScript, cho phép bạn viết các bài kiểm thử bằng JS. Gatling vận hành trên engine đã được chứng minh của mình.
Giới thiệu
Trong thế giới phát triển phần mềm hiện đại, JavaScript không chỉ là ngôn ngữ phía trước (front-end) mà còn là ngôn ngữ phổ biến nhất trên toàn bộ stack. Từ các ứng dụng React cho đến các API Node.js, JavaScript đã trở thành lựa chọn hàng đầu cho phát triển web. Với Gatling, các nhóm phát triển JavaScript giờ đây có thể thực hiện kiểm thử tải một cách dễ dàng mà không cần thay đổi ngôn ngữ lập trình của mình.
Bài viết này sẽ giải thích lý do tại sao SDK JavaScript lại quan trọng, cách nó hoạt động và cách bắt đầu sử dụng nó. Chúng tôi cũng sẽ đề cập đến các tính năng doanh nghiệp, các thực hành tốt nhất và giới hạn hiện tại của nó.
Tại sao chọn JavaScript?
JavaScript không chỉ là một ngôn ngữ phía trước nữa. Nó đã trở thành ngôn ngữ phổ biến nhất trên toàn bộ stack, điều này có nghĩa là việc kiểm thử hiệu suất cũng cần phải tồn tại trong môi trường này. Dưới đây là một số lý do tại sao việc viết các bài kiểm thử tải bằng JavaScript là một bước đột phá:
- Giảm thiểu việc chuyển ngữ cảnh: Các nhà phát triển không cần phải chuyển đổi giữa Scala, XML hay DSLs. Họ có thể viết, gỡ lỗi và duy trì các bài kiểm thử bằng chính ngôn ngữ mà họ sử dụng để xây dựng sản phẩm.
- Thời gian làm quen nhanh hơn: Các nhà phát triển mới, kiểm thử viên QA hay kỹ sư mới trong lĩnh vực kiểm thử hiệu suất có thể nhanh chóng làm quen mà không cần học ngôn ngữ mới hay giải mã cú pháp cũ.
- Hệ sinh thái npm: Bạn muốn tạo ra người dùng giả với Faker? Xác thực dữ liệu với Lodash? Băm token với crypto? Tất cả chỉ cần một import. SDK JavaScript của Gatling cho phép bạn mang các công cụ và quy trình hiện tại vào trong bài kiểm thử.
- Tính năng ngôn ngữ hiện đại: Với TypeScript, bạn sẽ có tính năng tự động hoàn thành, kiểm tra kiểu, và hỗ trợ IDE. Điều này có nghĩa là ít lỗi hơn, dễ bảo trì hơn và tốc độ phát triển nhanh hơn.
- Hợp tác chặt chẽ giữa các đội: Các đội QA, Dev và SRE có thể làm việc từ cùng một kịch bản. JavaScript là ngôn ngữ chung giữa các vai trò, giúp phá vỡ rào cản giữa các nhà phát triển và kiểm thử viên.
Cách SDK JavaScript của Gatling hoạt động
SDK JavaScript của Gatling được viết bằng TypeScript để đảm bảo kiểu mạnh mẽ, an toàn và hỗ trợ IDE. Nó chạy trên GraalVM để ánh xạ các lệnh gọi JS đến API Java của Gatling và sử dụng cùng một engine hiệu suất cao như Java, Kotlin, và Scala. SDK này bao gồm các gói cơ bản như: @gatling.io/core
, @gatling.io/http
, và @gatling.io/cli
.
Ví dụ nhanh
javascript
import { simulation, scenario, constantUsersPerSec } from "@gatling.io/core";
import { http } from "@gatling.io/http";
export default simulation((setUp) => {
const httpProtocol = http
.baseUrl("https://api.example.com")
.acceptHeader("application/json")
.contentTypeHeader("application/json");
const scn = scenario("Get users").exec(
http("List users")
.get("/users")
.check(status().is(200))
);
setUp(scn.injectOpen(constantUsersPerSec(20).during(120))).protocols(httpProtocol);
});
Tại sao các nhà phát triển JavaScript sẽ cảm thấy thoải mái
- Viết và kiểm thử bằng cùng một ngôn ngữ: Không còn chuyển ngữ cảnh giữa JS và các ngôn ngữ JVM khác.
- Sử dụng các gói npm: Tạo dữ liệu, crypto, tiện ích ngày tháng và nhiều hơn nữa.
- Tính năng TypeScript: Tự động hoàn thành, định nghĩa kiểu và lỗi rõ ràng.
- Ghi lại quá trình: Ghi lại các luồng trình duyệt, xuất ra các kịch bản JS/TS sạch sẽ.
Phiên bản Doanh nghiệp của Gatling cho các bài kiểm thử JavaScript
Gatling Enterprise cho phép các nhóm mở rộng và hợp tác hiệu quả hơn.
- Các bộ phát tải quản lý và vị trí khu vực
- Bảng điều khiển thời gian thực, phần trăm và xem lỗi
- Tham số JS thời gian chạy và biến môi trường
- RBAC, nhóm, gói và tích hợp CI
- Cấu hình như mã và tự động hóa CLI
Quy trình làm việc điển hình
- Phát triển tại địa phương với
npx gatling run
- Đóng gói với
npx gatling enterprise-package
- Tải gói lên và tạo kịch bản
- Khởi động, theo dõi trực tiếp và thực thi SLAs
Các thực hành tốt nhất với SDK JS
Mô hình hóa hành trình người dùng thực tế
- Kết nối các bước đăng nhập, duyệt và thanh toán
- Chuyển token giữa các bước
- Thêm thời gian chờ để mô phỏng người dùng
javascript
const scn = scenario("Auth flow")
.exec(
http("Login")
.post("/auth/login")
.body(StringBody('{"email":"#{email}","password":"#{password}"}'))
.check(jsonPath("$.token").saveAs("token"))
)
.pause(2, 5)
.exec(
http("Me")
.get("/me")
.header("Authorization", "Bearer #{token}")
.check(status().is(200))
);
Sử dụng các hồ sơ chèn thực tế
- Tăng dần, giữ ổn định, rồi giảm dần
- Kiểm tra tải ổn định, đột biến và stress đến thất bại
javascript
setUp(
scn.injectOpen(
rampUsersPerSec(1).to(50).during(300),
constantUsersPerSec(50).during(600),
rampUsersPerSec(50).to(0).during(300)
)
).protocols(httpProtocol);
Đối xử với các bài kiểm thử như mã sản phẩm
- Giữ các bài kiểm thử trong quản lý phiên bản
- Xem xét các thay đổi với pull request
- Chạy trong CI và kiểm tra SLAs
Tập trung vào các chỉ số đúng
- Latency p95 và p99, không chỉ trung bình
- Tỷ lệ lỗi dưới tải
- Throughput tại độ đồng thời mục tiêu
Ghi chú về SPA, API và thời gian thực
- SPAs: Kiểm tra các cuộc gọi API mà không chỉ đơn thuần là tải trang.
- APIs: Thay đổi dữ liệu để tránh thiên lệch cache, xác thực phản hồi với các kiểm tra.
- Thời gian thực: Sử dụng hỗ trợ WebSocket trong SDK JVM hiện tại; SDK JS hiện tại tập trung vào HTTP.
Giới hạn hiện tại và lộ trình
- SDK JS/TS hiện tại chỉ nhắm đến các kịch bản HTTP.
- Sử dụng SDK JVM cho WebSocket, gRPC hoặc JMS hiện tại.
- Thực thi trên trình duyệt nằm ngoài phạm vi; kết hợp với công cụ front-end nếu cần.
Bắt đầu trong vài phút
Yêu cầu: Node.js 18+ (LTS) và npm 8+
bash
# sao chép demo và cài đặt
git clone https://github.com/gatling/gatling.git
cd gatling/javascript
npm install
# chạy tại địa phương
npx gatling run
# đóng gói cho Enterprise
npx gatling enterprise-package
Tạo một kịch bản trong Enterprise, chọn vị trí, thiết lập SLAs và khởi động.
Ví dụ CI/CD (GitHub Actions)
yaml
name: Kiểm thử hiệu suất
on:
push: { branches: [ main ] }
pull_request: { branches: [ main ] }
jobs:
perf:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with: { node-version: '18' }
- run: |
cd javascript
npm install
npx gatling run
- uses: actions/upload-artifact@v3
with:
name: gatling-results
path: javascript/results/
Gatling cho JavaScript
SDK JavaScript của Gatling mang đến trải nghiệm lập trình hiện đại cho một trong những engine kiểm thử tải mạnh mẽ nhất hiện có. Nó cung cấp cho các nhà phát triển công cụ cần thiết để kiểm thử hiệu suất backend một cách nhanh chóng, có thể mở rộng và tích hợp sâu vào hệ sinh thái JavaScript.
Điều gì làm nên sự khác biệt
Khác với hầu hết các công cụ ở cấp độ giao thức yêu cầu ngôn ngữ lập trình chuyên biệt hoặc giao diện người dùng cũ, Gatling cho JavaScript cung cấp:
- Kiểm thử theo mã: Viết các bài kiểm thử thực tế với biến, logic, điều kiện và luồng—giống như bạn làm trong mã ứng dụng. Không YAML, không wizard GUI.
- Hiệu suất biên dịch: Các mô phỏng JavaScript được biên dịch sang Java và chạy trên engine của Gatling bằng GraalVM, kết hợp giữa tính tiện dụng của JS và hiệu suất cấp độ JVM.
- Kịch bản cấp sản xuất: Hỗ trợ cho các luồng thực tế, thời gian chờ, quản lý phiên, tiêu đề xác thực và xác thực phản hồi—hoàn hảo cho việc mô phỏng hành vi người dùng và các trường hợp biên.
- Tích hợp với Gatling Enterprise: Mở rộng từ các bài kiểm thử cục bộ đến các mô phỏng phân tán toàn cầu. Định nghĩa SLAs, theo dõi các bài kiểm thử trong thời gian thực và hợp tác giữa các nhóm sử dụng Gatling Enterprise.
- Hỗ trợ TypeScript tự nhiên: Được xây dựng bằng TypeScript với đầy đủ định nghĩa kiểu, tích hợp IDE và tự động hoàn thành, giúp giảm độ khó học và ngăn ngừa lỗi.
Đối tượng sử dụng
- Các nhà phát triển sử dụng Node.js, Express, Next.js, hoặc GraphQL
- Các kiểm thử viên QA quen thuộc với JavaScript, Cypress, hoặc Playwright
- Các đội ngũ platform và SRE muốn tự động hóa và mở rộng kiểm thử mà không cần thay đổi stack
- Các tổ chức chuẩn hóa trên JS/TS cho cả hệ thống front-end và back-end
Thử nghiệm ngay hôm nay
- Viết bằng JS/TS, chạy trên quy mô lớn
- Mang theo npm, giữ an toàn kiểu
- Sử dụng Enterprise cho các nhóm, khu vực và SLAs