Các phương pháp thử nghiệm hay nhất

Khi phát triển một Hành động cho nền tảng Actions on Google, thường thì bạn cần triển khai Dialogflow để hiểu ngôn ngữ tự nhiên (NLU) và phương thức thực hiện Dialogflow để xử lý logic cho Hành động của bạn. Việc kiểm thử trong cơ sở mã giúp đảm bảo Hành động của bạn hoạt động như mong đợi khi sản xuất.

Khi triển khai thử nghiệm đơn vị, thử nghiệm tích hợp hoặc thử nghiệm toàn diện cho Hành động của mình, bạn nên xem nhân viên hỗ trợ và phương thức thực hiện Dialogflow của mình là các thành phần riêng biệt.

Một lưu đồ sẽ chuyển từ truy vấn của người dùng đến Actions on Google, Dialogflow và một webhook thực hiện đơn hàng, cuối cùng quay trở lại người dùng.

Hình 1. Sơ đồ quy trình mô tả các hệ thống cần cân nhắc thử nghiệm

Thử nghiệm nhân viên hỗ trợ dự án Dialogflow

Nhân viên hỗ trợ và phương thức thực hiện dự án Dialogflow được kiểm tra dưới dạng các thành phần riêng biệt. Các tiểu mục sau đây mô tả cách bạn có thể lên ý tưởng và kiểm thử tác nhân Dialogflow cho Hành động của mình.

Dialogflow là một hệ thống truy vấn và ý định

Nhân viên hỗ trợ dự án Dialogflow của bạn chịu trách nhiệm tiếp nhận truy vấn của người dùng, khớp truy vấn đó với một ý định và trích xuất mọi thực thể được xác định trước từ truy vấn đó. Tác nhân của bạn sẽ tương tác với phương thức thực hiện của bạn bằng cách truyền một thông báo chứa ý định trùng khớp, các tham số của ý định đó và siêu dữ liệu của Actions on Google.

Là nhà phát triển, bạn có thể kiểm soát cấu hình của nhân viên hỗ trợ Dialogflow, chẳng hạn như cấu trúc của ý định và thực thể. Siêu dữ liệu của Actions on Google được lấy từ Actions on Google và có thể được coi là chứa dữ liệu chính xác cho mục đích kiểm thử.

Trong quá trình kiểm thử, hãy tập trung vào việc giúp tác nhân của bạn có khả năng trích xuất chính xác các tham số ý định và so khớp truy vấn với ý định. Phương pháp này cung cấp một chỉ số có thể định lượng để đánh giá hiệu suất của tác nhân. Bạn có thể tính toán chỉ số này bằng cách chuẩn bị và sử dụng từng trường hợp kiểm thử hoặc một tập hợp xác thực.

Bạn có thể biểu thị một nhân viên hỗ trợ Dialogflow bằng truy vấn văn bản dưới dạng dữ liệu nhập và ý định cùng với tham số ý định được trích xuất dưới dạng dữ liệu đầu ra.

Hình 2. Biểu thị Dialogflow dưới dạng hệ thống truy vấn và ý định

Kiểm thử đơn vị

Đối với nhân viên hỗ trợ Dialogflow, bạn có thể viết mã kiểm thử trong đó mỗi trường hợp dự kiến một truy vấn văn bản làm dữ liệu đầu vào và tạo siêu dữ liệu ý định dưới dạng dữ liệu đầu ra. Siêu dữ liệu này (tối thiểu) phải chứa tên của ý định trùng khớp và danh sách các tham số phù hợp.

Điểm cuối detectIntent của API Dialogflow lấy truy vấn văn bản làm dữ liệu đầu vào và tạo đầu ra có cấu trúc chứa tên của ý định đã phân giải và các tham số đã trích xuất. Kết quả này rất hữu ích khi đánh giá hiệu suất so khớp ý định của tác nhân. Để tham khảo đầy đủ các trường hữu ích khác, hãy xem tài liệu tham khảo về QueryResult.

Đoạn mã kiểm thử mẫu sẽ có dạng như sau:

it('choose_fact', async function() {
  // The `dialogflow` variable is an abstraction around the API that creates
  // and sends payloads to Dialogflow.
  const resJson = await dialogflow.detectIntent(
    'Tell me about the history of Google');
  expect(resJson.queryResult).to.include.deep.keys('parameters');
  // Check that Dialogflow extracted required entities from the query.
  expect(resJson.queryResult.parameters).to.deep.equal({
    'category': 'history',
    // Put any other parameters you wish were extracted
  });
  expect(resJson.queryResult.intent.displayName).to.equal('choose_fact');
});

Đoạn mã này sử dụng MochaChai. Xem ví dụ đầy đủ về cách thức hoạt động của thử nghiệm đơn vị Dialogflow được viết bằng Node.js để biết mục Thông tin về Google.

Bạn có thể chạy song song các tệp thử nghiệm vì API Dialogflow chấp nhận sessionId làm đối số. Do đó, bạn có thể có một hộp cát riêng cho từng cuộc trò chuyện khi sử dụng một ứng dụng API Dialogflow.

Vì bạn đang gửi yêu cầu đối với API Dialogflow, nên có thể bạn phải chịu phí nếu đạt đến hạn mức cuộc gọi miễn phí. Xem hạn mức và giới hạn để biết thêm thông tin.

Kiểm thử tích hợp

Điểm cuối detectIntent của API Dialogflow cũng kích hoạt phương thức thực hiện của bên thứ ba. Do đó, bạn có thể viết các trường hợp thử nghiệm cho việc tích hợp giữa nhân viên hỗ trợ Dialogflow và phương thức thực hiện Dialogflow.

Điểm khác biệt chính giữa việc viết chương trình tích hợp và kiểm thử đơn vị cho Dialogflow là trong thử nghiệm tích hợp, bạn có thể xác nhận các phản hồi đến từ webhook cũng như ý định và trích xuất thực thể của Dialogflow.

Xem ví dụ đầy đủ về cách thức hoạt động của một quy trình kiểm thử tích hợp viết bằng Node.js trong kho lưu trữ Thông tin về Google.

Thử nghiệm webhook thực hiện dự án Dialogflow

Nhân viên hỗ trợ dự án Dialogflow và phương thức thực hiện dự án Dialogflow được kiểm tra dưới dạng các thành phần riêng biệt. Các tiểu mục sau đây mô tả cách bạn có thể khái niệm và kiểm thử phương thức thực hiện cho Hành động của mình.

Phương thức thực hiện dưới dạng hệ thống nhập dữ liệu JSON và JSON

Mã thực hiện dự án Dialogflow của bạn vừa dự kiến yêu cầu vừa tạo ra phản hồi ở định dạng JSON. Do đó, bạn có thể kiểm thử mã phương thức thực hiện bằng cách coi đó là một hệ thống JSON vào và JSON. Yêu cầu này chứa siêu dữ liệu từ cảDialogflow và Actions on Google, vì vậy, yêu cầu này có mọi siêu dữ liệu cần thiết để kích hoạt một trình xử lý ý định cụ thể trong phương thức thực hiện của bạn.

Để kiểm tra việc kích hoạt trình xử lý ý định, bạn cần gửi yêu cầu JSON (đầu vào) đến Hành động của mình. Yêu cầu này sẽ được chuyển đến phương thức thực hiện của bạn và có thể truy cập được trên Internet. Sau đó, phương thức thực hiện sẽ tạo ra một phản hồi JSON (đầu ra) có thể đánh giá được để xác thực.

Phương thức thực hiện có thể được biểu thị bằng dữ liệu đầu vào của yêu cầu JSON và dữ liệu đầu ra phản hồi webhook JSON.

Hình 3. Biểu thị phương thức thực hiện dưới dạng hệ thống JSON vào và JSON xuất

Kiểm thử đơn vị

Hãy xem mã phương thức thực hiện webhook là một hệ thống chấp nhận dữ liệu đầu vào JSON và tạo dữ liệu đầu ra JSON. Sau đó, quy trình kiểm thử một Hành động sẽ được đơn giản hoá để cung cấp yêu cầu cho phương thức thực hiện và kiểm tra kết quả JSON đầu ra.

Điều này cho phép bạn tự do lưu trữ phương thức thực hiện trên máy và gửi yêu cầu HTTP cục bộ để kiểm thử. Nếu đang sử dụng thư viện ứng dụng Actions on Google Node.js, bạn cũng có thể trực tiếp gửi yêu cầu JSON đến lớp phần mềm trung gian của thư viện ứng dụng.

Nếu kiểm tra mã webhook với dữ liệu đầu vào JSON và nhận được kết quả JSON dự kiến, thì bạn có thể tự tin rằng các phần bạn kiểm soát hoạt động đúng cách. Bạn có thể giả định rằng Dialogflow và Actions on Google đang hoạt động đúng cách vì chúng đang tạo đúng tải trọng JSON. Cách phân tách này cung cấp một mô hình lập trình đơn giản để viết kiểm thử.

Dưới đây là thông tin tóm tắt về quy trình kiểm thử:

  1. Sử dụng trình mô phỏng trong bảng điều khiển Actions để nhận yêu cầu JSON cho từng bước trong một trường hợp sử dụng. Lưu các tệp này dưới dạng tệp JSON. Ngoài ra, bạn có thể tự tạo các yêu cầu đó bằng cách sử dụng thông tin trong tài liệu tham khảo về webhook.
  2. Viết mã kiểm thử để gọi webhook với các tải trọng này.
  3. Đối với mỗi lần kiểm thử, hãy đảm bảo rằng JSON phản hồi chứa các mục dự kiến.

Ngoài ra, mô hình này cho phép bạn thử nghiệm phương thức thực hiện Dialogflow trong chế độ cài đặt tích hợp liên tục vì điểm cuối của phương thức thực hiện có thể chạy cục bộ và API Dialogflow có sẵn khái niệm phiên.

Đoạn mã kiểm thử mẫu sẽ có dạng như sau:

it('yes-history', function() {
  expect(jsonRes.payload).to.have.deep.keys('google');
  expect(jsonRes.payload.google.expectUserResponse).to.be.true;
  expect(jsonRes.payload.google.richResponse.items).to.have.lengthOf(3);
  expect(jsonRes.payload.google.richResponse.suggestions).to.have
    .deep.members([
      {'title': 'Sure'}, {'title': 'No thanks'},
    ]);
});

Đoạn mã trên sử dụng MochaChai. Hãy xem ví dụ đầy đủ về cách hoạt động được viết bằng Node.js trong kho lưu trữ Thông tin về Google.

Thiết kế phương thức thực hiện có thể kiểm thử đơn vị

Mã webhook thường chứa logic nghiệp vụ tuỳ chỉnh mà ứng dụng của bạn sẽ dựa vào để đáp ứng nhu cầu của nó. Ngoài ra, mã webhook cũng có thể chứa trình xử lý ý định.

Để cải thiện độ chi tiết của các bài kiểm thử đơn vị cho mã phương thức thực hiện, bạn nên sắp xếp mã theo cách tách biệt logic nghiệp vụ với các quy trình xử lý ý định. Tức là phải có trình xử lý ý định và logic nghiệp vụ trong các mô-đun riêng biệt, do đó, mỗi phần có thể được kiểm thử một cách độc lập.

Để xem ví dụ, hãy tham khảo hành động mẫu shiritori trên GitHub. Trong mẫu đó, functions/index.jsfunctions/shiritori/*.js chứa riêng biệt các trình xử lý ý định và logic nghiệp vụ, cho phép các bộ kiểm thử mạnh mẽ hơn.

Kiểm thử tích hợp

Để viết các trường hợp kiểm thử nhằm tích hợp giữa Dialogflow và mã webhook thực hiện đơn hàng, hãy đọc phần kiểm thử tích hợp cho Dialogflow ở trên.

Tải thử nghiệm

Trước khi triển khai Hành động của bạn sang phiên bản chính thức, bạn cũng nên kiểm thử tải phương thức thực hiện webhook để tìm ra các vấn đề về hiệu suất khiến dịch vụ thực hiện nhiệm vụ bị giảm chất lượng hoặc gián đoạn.

Sau đây là một số ví dụ về vấn đề hiệu suất mà bạn có thể gặp phải khi kiểm thử tải:

  • Bộ nhớ và điện toán bị hạn chế
  • Các hạn mức về hạn mức từ nhà cung cấp của bạn
  • Đọc và ghi dữ liệu chậm
  • Vấn đề đồng thời trong mã

Các tình huống kiểm thử tải phụ thuộc vào mẫu sử dụng dự kiến hoặc trước đây của Hành động, nhưng các trường hợp điển hình để kiểm thử là mức tăng đột ngột khi tải (tăng đột biến) và tải liên tục (ngâm).

Xác định các trường hợp mà webhook của bạn được gọi và thực hiện các hoạt động cần nhiều tài nguyên. Các thao tác điển hình cần nhiều tài nguyên bao gồm truy vấn cơ sở dữ liệu, gọi một API khác, thực hiện điện toán và các thao tác cần nhiều bộ nhớ như kết xuất tệp âm thanh.

Trong các trường hợp này, bạn có thể ghi lại các yêu cầu do máy chủ Actions on Google gửi đến webhook từ nhật ký webhook hoặc từ nhật ký Stackdriver. Bạn cũng có thể ghi lại các yêu cầu từ trình mô phỏng bảng điều khiển Actions.

Sau khi đã yêu cầu, bạn có thể sử dụng công cụ kiểm thử tải để tìm hiểu cách webhook của bạn phản hồi trong nhiều tình huống kiểm thử tải. Các phần phụ sau đây cung cấp một số ví dụ về kiểm thử tăng đột biến và kiểm thử ngâm bằng ApacheBench.

Thử nghiệm tăng đột biến

Để kiểm thử mức tăng đột biến, bạn phải gửi liên tục số lượng yêu cầu đến webhook trong một khoảng thời gian rồi đột ngột tăng tải. Ví dụ: bạn có thể thiết lập một kiểm thử gửi 10 truy vấn mỗi giây (QPS) với một vài mức tăng đột biến là 60 QPS.

Bạn có thể chạy lệnh ApacheBench sau để gửi 60 yêu cầu đồng thời đến webhook của mình:

ab -n 60 -c 60 -p ActionRequest.json -T 'application/json' https://example.com/webhookFunctionName

Giả sử tệp ActionRequest.json chứa tải trọng của yêu cầu đã thu thập được gửi đến webhook của bạn.

Kiểm thử quá trình ngâm

Kiểm thử quá trình ngâm đòi hỏi bạn phải gửi một số lượng không đổi các yêu cầu đến webhook và quan sát phản hồi. Ví dụ: bạn có thể thiết lập một kiểm thử gửi một tải liên tục 10-20 QPS trong vài phút để xem thời gian phản hồi có tăng hay không.

Bạn có thể chạy lệnh ApacheBench sau để gửi 1200 yêu cầu, với 10 yêu cầu đồng thời mỗi giây:

ab -t 120 -n 1200 -p ActionRequest.json -T 'application/json' https://example.com/webhookFunctionName

Giả sử tệp ActionRequest.json chứa tải trọng của yêu cầu đã thu thập được gửi đến webhook của bạn.

Phân tích kết quả kiểm thử tải

Sau khi chạy thử nghiệm tải, hãy phân tích kết quả về thời gian phản hồi webhook. Chỉ báo cho thấy vấn đề trong cách triển khai webhook thường là các xu hướng như thời gian phản hồi trung bình tăng sau mỗi lần chạy thử nghiệm, hoặc thời gian phản hồi trong trường hợp xấu nhất mà Hành động của bạn không chấp nhận được.

Thử nghiệm toàn diện

Bạn có thể sử dụng trình mô phỏng bảng điều khiển Actions để kiểm thử toàn diện trước khi gửi Hành động để phê duyệt. Bạn có thể tìm các bước kiểm thử toàn diện thông qua trình mô phỏng bảng điều khiển Actions trong tài liệu về Trình mô phỏng hành động. Việc thực hiện các hoạt động kiểm thử này giúp bạn loại bỏ những yếu tố không chắc chắn tiềm ẩn khỏi thành phần cơ sở hạ tầng của Actions on Google.