Apidog cho phép bạn thực thi các chương trình bên ngoài (script, JAR, binary) từ môi trường Javascript của bạn. Điều này cho phép bạn tận dụng mã hiện có trong các ngôn ngữ như Java, Python, PHP, Go, Shell, v.v.
Thông báo bảo mật
Các chương trình bên ngoài chạy ngoài sandbox của Apidog và có toàn quyền truy cập vào hệ thống của bạn. Hãy đảm bảo rằng bạn tin tưởng mã mà bạn đang thực thi.
Mở thư mục chương trình bên ngoài: Nhấp vào biểu tượng thư mục trong trình chỉnh sửa script để mở thư mục nơi các script bên ngoài của bạn nên được đặt.
2.
Thực thi qua script: Sử dụng pm.executeAsync để gọi chương trình.
argsstring[] Tham số. Khi gọi các phương thức được chỉ định trong một gói jar, JSON.stringify sẽ được sử dụng để chuyển đổi. Ngoại trừ trường hợp đó, các kiểu không phải string sẽ được chuyển đổi ngầm định thành string.
optionsObject
commandstring Lệnh thực thi của chương trình bên ngoài; phần đầu tiên của "tiền tố lệnh" là lệnh thực thi. Không bắt buộc, giá trị mặc định được suy luận tự động (xem bảng "tiền tố lệnh" ở trên), có thể tùy chỉnh thành bất kỳ chương trình nào.
cwdstring Thư mục làm việc của tiến trình con. Không bắt buộc, mặc định là "Thư mục chương trình bên ngoài".
envRecord<string, string> Biến môi trường của tiến trình con. Không bắt buộc, mặc định là {}.
windowsEncodingstring Mã hóa được sử dụng trên hệ thống Windows. Không bắt buộc, mặc định là "cp936".
classNamestring Chỉ định tên lớp cần gọi trong gói jar, ví dụ "com.apidog.Utils".
methodstring Chỉ định tên phương thức cần gọi trong gói jar, ví dụ "add".
paramTypesstring[] Chỉ định các kiểu tham số của phương thức cần gọi trong gói jar, ví dụ ["int", "int"].
Trả về: Promise<string>
Cách sử dụng tham số command
Theo mặc định, Apidog sử dụng python để thực thi các tệp .py. Nếu python3 đã được cài đặt trên máy tính, có thể chỉ định command là python3.
argsstring[] Tham số. Khi gọi các phương thức được chỉ định trong một gói jar, JSON.stringify sẽ được sử dụng để chuyển đổi. Ngoại trừ trường hợp đó, các kiểu không phải string sẽ được chuyển đổi ngầm định thành string.
optionsObject
windowsEncodingstring Mã hóa được sử dụng trên hệ thống Windows. Không bắt buộc, mặc định là "cp936".
classNamestring Chỉ định tên lớp cần gọi trong gói jar, ví dụ "com.apidog.Utils".
methodstring Chỉ định tên phương thức cần gọi trong gói jar, ví dụ "add".
paramTypesstring[] Chỉ định các kiểu tham số của phương thức cần gọi trong gói jar, ví d ụ ["int", "int"].
Khi thực thi một chương trình, lệnh đã thực thi sẽ được in trong console (chỉ để tham khảo). Nếu kết quả không đáp ứng kỳ vọng, bạn có thể sao chép lệnh và dán vào Shell/CMD để gỡ lỗi.Console cũng sẽ in "đầu ra chuẩn (stdout)" và "đầu ra lỗi chuẩn (stderr)" của tiến trình đã thực thi. Nội dung stdout (không bao gồm ký tự xuống dòng ở cuối) sẽ là kết quả cuối cùng của quá trình thực thi.
TIP
Vì lý do lịch sử, pm.execute xem quá trình thực thi là thất bại khi có nội dung trong stderr. Điều này khiến một số chương trình thất bại khi xuất cảnh báo hoặc thông báo lỗi. pm.executeAsync chuyển sang sử dụng mã thoát của tiến trình để xác định quá trình thực thi có thất bại hay không.
Vì chương trình bên ngoài được chỉ định chạy bằng thực thi dòng lệnh, nó chỉ có thể lấy các tham số được truyền vào thông qua đối số dòng lệnh.Ví dụ, trong script pm.executeAsync('add.js', [2, 3]), lệnh thực tế được thực thi là node add.js 2 3. Để lấy các tham số trong script bên ngoài add.js:
TIP
1.
Các ngôn ngữ lập trình khác nhau có các cách khác nhau để lấy đối số dòng lệnh, vui lòng tham khảo tài liệu của ngôn ngữ tương ứng.
2.
Kiểu của đối số dòng lệnh luôn là string, cần chuyển đổi dựa trên kiểu thực tế.
Như đã đề cập ở trên, Apidog sử dụng nội dung stdout làm kết quả của quá trình thực thi chương trình. Do đó, việc in nội dung ra stdout có thể trả về kết quả.Ví dụ, trong script const result = await pm.executeAsync('add.js', [2, 3]), kết quả có thể được trả về bằng:
1.
Các ngôn ngữ lập trình khác nhau có các cách khác nhau để in ra stdout, hãy tham khảo tài liệu của ngôn ngữ tương ứng.
2.
Kiểu trả về là string, cần chuyển đổi dựa trên kiểu thực tế.
3.
Ký tự xuống dòng ở cuối kết quả sẽ bị cắt bỏ.
4.
Khi gọi các phương thức được chỉ định trong gói jar, giá trị trả về của phương thức được gọi sẽ được sử dụng làm giá trị trả về cuối cùng.
Vì pm.executeAsync sử dụng mã thoát thay vì stderr để xác định thành công, stderr có thể được sử dụng để in thông tin gỡ lỗi mà không ảnh hưởng đến quá trình thực thi.Ví dụ:
TIP
1.
Chỉ pm.executeAsync hỗ trợ cách in thông tin gỡ lỗi này.
2.
Các ngôn ngữ lập trình khác nhau có các cách khác nhau để in ra stderr, hãy tham khảo tài liệu tương ứng.
Vì giá trị trả về của pm.executeAsync là kiểu Promise, không thể trực tiếp đổi execute thành executeAsync. Nhưng bạn có thể sử dụng async/await để di chuyển với thay đổi tối thiểu.
TIP
Apidog phiên bản 2.3.24 trở lên (CLI phiên bản 1.2.38 trở lên) hỗ trợ top-level await.
Tính năng này yêu cầu Apidog phiên bản 2.1.39 trở lên. Tính năng này chỉ hỗ trợ gọi jar bằng reflection, không hỗ trợ các jar như Spring Boot sử dụng reflection runtime nội bộ.
Theo mặc định, việc gọi một jar sẽ gọi phương thức main trong lớp Main. Nếu options.className được chỉ định, nó sẽ ghi đè hành vi mặc định và thay vào đó gọi phương thức được chỉ định trong jar.Việc gọi các phương thức được chỉ định trong jar khác với các chương trình bên ngoài khác. Apidog sẽ sử dụng một b ộ thực thi tích hợp để tìm phương thức trong jar bằng reflection và gọi phương thức đó. Nếu phương thức được gọi có giá trị trả về, giá trị đó sẽ được sử dụng làm giá trị trả về cuối cùng sau khi chuyển đổi thành chuỗi. Nếu không, nó hoạt động giống như các lời gọi khác, sử dụng nội dung stdout làm giá trị trả về.Ví dụ:
Lệnh thực tế được thực thi là:
Trong đó <app-dist>/assets/JarExecuter-1.1.0-jar-with-dependencies.jar là bộ thực thi tích hợp, chịu trách nhiệm tìm phương thức com.apidog.Test.combine(String,String) trong chương trình người dùng ./scripts/jar-1.0-SNAPSHOT.jar thông qua reflection, và gọi phương thức đó với các tham số (chuỗi JSON) "hello" và "world".
TIP
paramTypes là không bắt buộc. Nếu không được chỉ định, các kiểu sẽ được suy luận tự động dựa trên tham số. Số nguyên được suy luận là "int", số thực là "double", boolean là "boolean", chuỗi là "String", mảng được suy luận dựa trên phần tử đầu tiên, ví dụ [3] được suy luận là "int[]", [3.14] là "double[]", v.v. Nếu các kiểu được suy luận không khớp với các kiểu tham số thực tế của phương thức được gọi, cần chỉ định paramTypes theo cách thủ công. Các giá trị được hỗ trợ trong mảng paramTypes: "Number"、"int"、"Integer"、"long"、"Long"、"short"、"Short"、"float"、"Float"、"double"、"Double"、"boolean"、"Boolean"、"String"、"Number[]"、"int[]"、"Integer[]"、"long[]"、"Long[]"、"short[]"、"Short[]"、"float[]"、"Float[]"、"double[]"、"Double[]"、"boolean[]"、"Boolean[]"、"String[]"Vì vậy, paramTypes trong ví dụ trên có thể được bỏ qua: