脚本调用其他语言( java、python、php 等)
# 脚本调用其他语言( java、python、php 等)
前置脚本和后置脚本,可以直接调用以下语言编写的外部程序:
java
(.jar)python
(.py)php
(.php)js
(.js)BeanShell
(.bsh)go
(.go)shell
(.sh)ruby
(.rb)lua
(.lua)
注意
- 仅版本号
>= 1.0.25
的 Apifox 版本支持脚本调用外部程序。 - 外部程序是在
沙盒环境以外
运行的,有权限访问和操作电脑上的其他程序、文件及数据,存在一定的安全性风险,使用者请务必自己确保被调用程序的安全性。
# 使用方法
- 将需要调用的外部程序(
.jar
、.py
、.php
等文件 )复制到外部程序目录
下。点击软件左下角⚙
形状的 icon ,选择外部程序
,即可查看外部程序目录
。 - 脚本中使用方法
pm.execute(fileName, args)
调用外部程序。- 参数 fileName:
String
,外部程序文件名,需存放在外部程序目录
下。 - 参数 args:
Array<String>
,传给外部程序的运行参数,为字符串数组类型,可以传递多个参数。 - 返回值:
String
,命令行运行程序时,在控制台输出的字符串。 - 发生错误时会抛出异常,建议使用
try catch
处理异常。
- 参数 fileName:
- 确保电脑已经安装相应程序运行需要的环境。
.jar
程序:需要 安装 java 环境。.py
程序:需要安装 python 环境。.js
程序:需要安装 nodejs 环境。- 其他语言程序:需要安装对应语言的环境。
# 调用原理
- 调用外部程序是以命令行的方式运行程序,返回值为程序在控制台输出的字符串。
- 系统会自动根据外部程序的后缀名,调用对应的命令行来运行外部程序。
.jar
程序:通过java
命令运行。- 如:脚本
pm.execute('cn.apifox.Base64EncodeDemo.jar', ['abc','bcd'])
,实际执行命令为java -jar cn.apifox.Base64EncodeDemo.jar abc bcd
。
- 如:脚本
.py
程序:通过python
命令运行。- 如:脚本
pm.execute('md5-json.py', ['abc','bcd'])
,实际执行命令为python md5-json.py abc bcd
。
- 如:脚本
.js
程序:通过node
命令运行。- 如:脚本
pm.execute('xxx.js', ['abc','bcd'])
,实际执行命令为node xxx.js abc bcd
。
- 如:脚本
- 其他语言程序也是类似原理。
# 代码示例
后置脚本:
try {
// jar 示例,调用 cn.apifox.Base64EncodeDemo.jar
// 实际命令行执行的命令为:java -jar cn.apifox.Base64EncodeDemo.jar abc
const jarResult = pm.execute("cn.apifox.Base64EncodeDemo.jar", ["abc"]);
console.log("jar 运行结果", jarResult);
// php 示例,调用 test.php
const param1 = { a: 1, b: 2 };
// 注意:json 格式数据作为参数时,需要使用 JSON.stringify 对参数进行序列化
// 实际命令行执行的命令为:php test.php '{"a":1,"b":2}'
const phpResultString = pm.execute("test.php", [JSON.stringify(param1)]);
// 注意:返回数据为 json 格式字符串时,可使用 JSON.parse 反序列化
const phpResult = JSON.parse(phpResultString);
console.log("php 运行结果", phpResult);
} catch (e) {
console.error(e.message);
}
test.php 代码:
<?php
$param = json_decode($argv[1]);
$result = [];
foreach($param as $key=>$value)
{
$result[$key] = $value * 2;
}
echo json_encode($result);
运行结果:
# 常见问题
# 1. 引用外部程序输出结果时不同系统返回的字符串可能带有不同换行符号
- 可以对要输出的结果进行去除空格与换行符处理