IOS自动化测试环境搭建教程

目录

一、前言

二、环境依赖

1、环境依赖项

2、环境需求与支持

三、环境配置

1、xcode安装

2、Git安装

3、Homebrew安装(用brew来安装依赖)

4、npm和nodejs安装

5、libimobiledevice安装

6、idevicesinstaller安装

7、ios-deploy安装

8、Carthage安装

[9、Appium安装 【我安装的appium版本:1.21.0】](#9、Appium安装 【我安装的appium版本:1.21.0】)

10、appium-doctor环境检查

11、WebDriverAgent安装


【B站最通俗易懂】Python接口自动化测试从入门到精通,超详细的进阶教程,看完这套视频就够了

一、前言

IOS的App自动化测试与Android的一样,也可以用appium来进行。但是IOS自动化依赖苹果的osx系统、Xcode构建等,且封闭的系统需要苹果开发者账号才可以驱动真机。Appium的环境配置有点麻烦,可能大部分时间都在处理各种稀奇古怪的报错,甚至于需要重装系统。

本文旨在记录配置过程(MacOS系统的Python和Java环境配置也有记录),给同道中人提供参考,让大家少走弯路。

二、环境依赖

1、环境依赖项

  • Xcode
  • Git
  • homebrew
  • npm、nodejs
  • libimobiledevice
  • idevicesinstaller
  • ios-deploy
  • Carthage
  • appium
  • appium-doctor
  • Webdriveragent
  • ios-webkit-debug-proxy
  • Python和Java
  • Android SDK

2、环境需求与支持

|---------|--------|--------------|
| 需求 | 版本最低要求 | 我的环境版本 |
| Mac OSX | 10.11+ | macOS 11.3.1 |
| iOS | 9.3+ | 13.3、14.7 |
| Xcode | 7+ | 12.5 |
| Appium | 1.6+ | 1.21.0 |

|---------------------|-----------|
| 驱动程序 | 对应iOS版本 |
| XCUITest Driver | ios9.3或以上 |
| UIAutomation Driver | ios9.3以下 |

三、环境配置

1、xcode安装

Xcode是运行在操作系统Mac OS X上的集成开发工具(IDE),iOS自动化测试使用Xcode主要用于将绑定了苹果开发者证书的WebDriverAgent打包至iOS手机。

安装方式有两种,根据你的系统版本来选择。

方式一:Mac平台的App Store安装

通过App store安装的Xcode是最新版本,需要最新版macOS系统才能兼容。如果已经升级至最新系统,可以直接在App store下载安装。最好不要升级至最新系统,可能遇到其他兼容性问题。

方式二:离线包安装

你的macOS系统不是最高版本的时候,要保证最低版本需求:macOS在10.12以上,xcode在8.1以上。

离线包下载地址:Xcode - 支持 - Apple Developer (可以选择版本)

离线包的Xcode版本选择,最好是根据你的系统版本发布时间来定,选发布时间相近的版本。我的版本是:macOS 11.3.1 、Xcode12.5

2、Git安装

安装的Xcode自带Git程序,一般Xcode安装好后不需要再单独安装Git,验证Git环境即可。如果后面的环境依赖安装出现关于Git的报错,需要更新Git,或者卸载重新安装。验证安装:git --version验证git连接:ping github.com能够连接成功时,终端显示:

安装命令:brew install git

更新Git:brew upgrade git

3、Homebrew安装(用brew来安装依赖)

Homebrew是一款Mac OS平台下的软件包管理工具,拥有安装、卸载、更新、查看、搜索等很多实用的功能。简单的一条指令,就可以实现包管理,而不用你关心各种依赖和文件路径的情况,十分方便快捷。类似apt-get、yum。

安装途径有两种:国外源和国内园,推荐使用国内源,我使用国外源没成功过。

方式一(国外源):

官网:Homebrew --- The Missing Package Manager for macOS (or Linux)

在官网首页复制下面的安装命令,在终端执行命令安装:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

验证安装:brew -v

更新Homebrew命令:brew update && brew upgrade && brew clean

方式二(国内源):

上面的官网安装方法失败率很高,可以采用国内源安装。

homebrew国内源安装方法,终端执行下面的命令:

复制代码
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"

终端运行时,根据提示操作:

安装结束后重启终端 或者 运行 source /Users/sinosun/.bash_profile 否则可能无法使用。

终端执行:brew update 保持最新版

最后验证安装:brew -v 得到版本号

参考(macOS升级后安装报错解决办法)

4、npm和nodejs安装

Appium是通过Node.js开发的http服务器,用来创建和控制WebDriver的session,因此需要安装Node.js。npm是Node.js的包管理工具,随同Node.js一起安装。

4.1、(方式一:brew在线安装)【我的nodejs版本是:16.6.0】

安装命令:brew install node 此方法安装的是最新版本

验证安装:node -v 得到版本号

npm -v 得到版本号

其它在线安装方法:(指定版本安装)

终端执行命令行找到自己合适的node版本 :brew search node

查询显示最高可以安装 node14 版本

安装命令:brew install node@版本号 (会将npm和nodejs一起安装)

绑定安装的node,命令:brew link --overwrite --force node@版本号

验证安装:node -v 得到版本号

npm -v 得到版本号

卸载node:

brew uninstall node@版本号 --force

例如:安装的是12.18.1,卸载命令:brew uninstall node@12 --force

4.2、(方式二:离线包安装)

brew在线安装是从官网下载,速度慢且成功率低,可以通过下载离线包安装解决。

nodejs官网下载地址:Node.js 点击"Current"区域稳定版。

安装包下载并安装后,同样在终端中输入node -v 、 npm -v 验证

4.3、cnpm国内源安装

NPM安装插件是从NPM官网下载对应的插件包,该网站的服务器在国外,经常会出现下载缓慢或出现异常,这时便需要找到另外的方法提供稳定的下载,这个方法就是CNPM。阿里巴巴的淘宝团队把NPM官网的插件都同步到了在中国的服务器,提供给我们从这个服务器上稳定下载资源。

CNPM同样是NPM的一个插件,要安装的话需要在终端执行以下命令:

sudo npm install -g cnpm --registry=https://registry.npmmirror.com

验证安装:cnpm -v

4.4、npm安装插件常见报错

在终端通过npm安装插件时,前面加上"sudo"可以减少报错几率。(加上sudo后,命令以系统管理者的身份执行)

如果通过npm安装插件时,出现"npm ERR!"提示,表示安装失败。前缀加上sudo也报错,可以尝试国内源cnpm安装,只需要将命令中的npm换成cnpm。

如果终端安装过程中出现"npm WARN"提示,可以忽略。

5、libimobiledevice安装

libimobiledevice是一个使用原生协议与苹果IOS设备进行通信的库,相当于Android的adb。appium连接iOS设备必需要此依赖库,通过这个库Mac os可轻松获得iOS设备信息。支持iOS10以上系统

安装命令:brew install --HEAD libimobiledevice

卸载:brew uninstall --ignore-dependencies libimobiledevice

常用命令:

1、idevice_id -l 显示当前所连接的设备[udid],包括 usb、WiFi 连接

2、ideviceinfo 获取设备信息

3、idevicedate 获取设备时间

4、idevicename 获取设备名称

5、idevicescreenshot 截图

6、ideviceinstaller -u [udid] -i [xxx.ipa] #xxx.ipa:安装文件路径

7、ideviceinstaller -u [udid] -U [bundleId] #bundleId:应用的包名

检查安装:

报错参考:

报错信息: Could not connect to lockdownd, error code -3

解决方法:修改var/db/lockdown文件夹的读写权限

在终端找到文件夹cd var/db ,找到后执行open .直接打开lockdown所在目录查看该文件的读写权限,如果没有读写权限执行命令:sudo chmod -R 777 /var/db/lockdown/

在lockdown文件夹具有读写权限以后依次执行如下命令:

brew update

brew uninstall --ignore-dependencies libimobiledevice

brew uninstall --ignore-dependencies usbmuxd

brew install --HEAD usbmuxd

brew unlink usbmuxd

brew link usbmuxd

brew install --HEAD libimobiledevice

brew install ideviceinstaller

6、idevicesinstaller安装

ideviceinstaller是一个管理连接设备的工具,与ios-deploy、Android的adb功能类似。

ideviceinstaller的功能与libimobiledevice差不多,都可以获取iOS设备的udid、安装App、卸载App、获取bundleid等,但ideviceinstaller仅支持iOS9以下系统环境,libimobiledevice支持iOS10以上系统环境。

安装命令:brew install ideviceinstaller

常用命令:

1.ideviceinstaller -l 打印app列表

7、ios-deploy安装

ios-deploy是一个使用命令行安装ios app到连接设备的工具

原理是根据os x命令行调用系统底层函数,获取连接的设备、查询/安装/卸载app

iOS10以上系统使用appium,需要依赖ios-deploy

安装:sudo npm install -g ios-deploy 或 sudo cnpm install -g ios-deploy

安装指定版本的ios-deploy

ios-deploy是一个不通过Xcode直接将app安装到手机上的工具

当然, 用Homebrew安装这个工具是很方便的

那么我们就要先安装Homebrew, 网上很多方法已经过时了, 而且由于墙的原因, 很多时候是安装不成功的.

ios-deploy常用命令:

1.ios-deploy -c 查看连接的设备(包括通过usb和wifi连接的)

2.ios-deploy -c --no-wifi 查看通过usb连接的设备

3.ios-deploy --id [udid] --bundle [xxx.app] 安装应用到指定设备(其中xxx.app是Xcode编译后的ipa的路径)

4.ios-deploy --id [udid] --uninstall_only --bundle_id [bundleId] 卸载指定设备上的应用(根据包名,也就是bundleId)

5.ios-deploy --id [udid] --list_bundle_id 查看指定设备上安装的所有应用(包括系统应用和第三方)

例如: ios-deploy --id 770dfe115807e7d494b4721b1e4ebd6ecb9424d3 --list_bundle_id

6.ios-deploy --id [udid] --exists --bundle_id [bundleId] 检查指定设备上是否安装了某个应用

例如: ios-deploy --id 0420781d4e43f1f99935513c91e9b816f4dddc24 --exists --bundle_id com.facebook.taozhen


注意:Xcode是通过离线包安装的,安装ios-deploy时会报错:

这个是由于Xcode没有设置版本的原因导致的,设置方法:进入Xcode偏好设置-->点击locations-->Comand Line Tools栏选择版本号,

然后重新执行安装命令。如下图:


检查安装:

8、Carthage安装

Carthage是一款iOS项目依赖管理工具,与cocoapods功能相似,可以帮助管理第三方依赖,类似于Java的maven。它会把第三方依赖编译成framework,以framework形式将第三方依赖加入到项目中进行使用和管理。自动化测试用到的WebDriverAgent通过Carthage管理项目依赖。

安装命令:brew install carthage

检查命令:carthage version

9、Appium安装 【我安装的appium版本:1.21.0】

appium安装有两种方式,命令行版本和桌面版本。

命令行版本appium打开速度快,可以开启多设备的自动化测试,常用于执行脚本。

桌面版本appium打开速度慢,常用于辅助元素定位。

9.1、命令行版安装

在appium官网(Redirecting)首页中有安装命令,直接复制至终端安装。命令如下:

复制代码
1 > brew install node                                 # 获取 node.js
2 > npm install -g appium                         # 获取 appium
3 > npm install wd                                     # 获取 appium client
4 > appium &                                            # 开启 appium
5 > node your-appium-test.js​

上面的命令安装的是最新版本,如果要安装指定版本,执行下面的命令。

指定版本安装:

npm install -g appium@1.20.2 ---安装的版本是appium1.20.2

如果使用npm安装报错,命令行前加上sudo执行:

sudo npm install -g appium

卸载安装:

npm uninstall -g appium

检查安装:appium -v

9.1.1、官网安装不成功,可以试一试淘宝镜像源:

cnpm install -g appium

验证安装:appium -v

9.1.2、命令行打开appium

appium -a 127.0.0.1 -p4723 ---(默认端口4723可以任意修改,appium开启后监听端口是修改后的端口)

9.2、appium官网下载离线包安装Redirecting

10、appium-doctor环境检查

appium-doctor命令,可用于检查appium的相关环境是否配置成功。

安装:sudo npm install -g appium-doctor

或者 sudo cnpm install -g appium-doctor

卸载:npm uninstall -g appium-doctor

检查环境配置命令:

appium-doctor

appium-doctor --ios

appium-doctor --android

安装目录:

/usr/local/lib/node_modules/appium-doctor

10.1、iOS自动化测试环境检查

终端执行命令appium-doctor --ios后,即可开始检查iOS自动化测试所需的appium环境。

检查结果中没有出现红色的"X"时,表示iOS自动化测试所必需的依赖环境都安装好了。

检查结果中有黄色的"X"时(如上图),表示非必需的环境依赖,可以暂时不管,等以后用到了这个模块再去安装。

10.2、Mac环境Android自动化测试环境检查

终端执行命令appium-doctor --android,检查Mac中通过appium对Android做自动化测试的环境。

上图中红色的"X",表示Android自动化测试所必需的环境依赖,我最后再介绍这些依赖的安装。

环境安装走到这一步了,就可以对iOS模拟器进行自动化测试了。如果要连接控制iOS真机,还需要将webdriveragent构建至真机,Mac系统才能控制手机。

11、WebDriverAgent安装

WebDriverAgent简称WDA,是由Facebook推出的一款移动端测试框架。它是在iOS客户端实现了一个WebDriver的Server,借助这个server,可以远程控制iOS设备进行测试。官网介绍Appium驱动真实设备的地址:http://appium.io/docs/en/drivers/ios-xcuitest-real-devices/

Appium与iOS手机进行通讯就是借助的WDA,配置WDA至iOS手机之前,需要通过Xcode将苹果开发者证书编译进WDA才会生效。这个编译证书的过程是报错几率最高的步骤,我尝试好几次才找到最有效的方法。

11.1、申请苹果开发者证书

苹果开发者证书有免费和收费的,对于自动化测试来说免费版的就够用了,只不过通过Xcodego构建编译进WDA的证书只有7天有效期,7天后还需要重新构建一次。

11.2、WebDriverAgent目录

WebDriverAgent有两种来源,一种是从GitHub拉取,通过Xcode编译证书后替换掉appium里面的WebDriverAgent;另一种是直接使用appium集成的WebDriverAgent,Xcode编译证书后使用。

网络资源一般介绍第一种的比较多,但是这种方法已经不适用于新版本的Appium和Xcode。从GitHub(地址:git clone GitHub - facebookarchive/WebDriverAgent: A WebDriver server for iOS that runs inside the Simulator.)拉取的WebDriverAgent有很长时间没有更新了,通过Xcode编译证书时有很多兼容性问题。如果选择今年发布的Appium和Xcode,直接使用appium集成的WebDriverAgent基本不会报错,我选择的这种方式。

11.2.1、进入appium的WebDriverAgent目录

  • 桌面版appium的WDA路径:

/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-webdriveragent

  • 命令行版appium的WDA路径:

/usr/local/lib/node_modules/appium/node_modules/appium-webdriveragent

在appium官方文档中说明要执行下面的操作,具体起什么作用还不清楚,先按照步骤操作,以免后面报错。

以桌面版的appium为例,终端进入appium-webdriveragent目录,执行下面的命令:

复制代码
mkdir -p Resources/WebDriverAgent.bundle

如果你安装的appium版本在1.20以下,还需要执行下面这行命令:

复制代码
./Scripts/bootstrap.sh -d

还是以桌面版的appium为例,在Mac桌面左上角点击"前往"-->"前往文件夹"-->"输入WDA路径"-->点击"前往",即可进入appium-webdriveragent目录,找到"WebDriverAgent.xcodeproj"文件。

11.2.2、Xcode编译证书

双击"WebDriverAgent.xcodeproj"文件通过Xcode打开,然后对"WebDriverAgentLib"、"WebDriverAgentRunner"两个文件进行证书编译修改。在Xcode编译证书之前,需要先绑定申请过苹果开发者账号的Apple ID。进入Xcode的偏好设置后,按照下图配置ID:

在Xcode页面找到"WebDriverAgentLib",将"Signing"里面的Bundle Identifier改成自己命名的(与iOS手机已安装应用的bundleId要不一样),然后分别将"Build Settings"、"Info"里面的Bundle Identifier改成和第一步"Signing"里面的一样。如图所示3处:

设置好后当"Signing"分页出现"Signing Certificate Apple Development:xxxxxxxx"时表示证书编译成功。

然后同样的方法修改"WebDriverAgentRunner"里面的Bundle Identifier,注意此处的Bundle Identifier也是自己命名的。如下图:

Xcode选择WebDriverAgentRunner连接的iOS手机:

此时所有的设置都完成了,开始"Product-->Test"构建WebDriverAgent至iOS手机:

第一次构建时会报错,如下图样式,是因为构建至手机的WebDriverAgent需要信任该描述文件。手机设置路径:设置-->通用-->设备管理-->选择描述文件并信任

信任描述文件后,Xcode再次"Product-->Test"构建一次就会成功。手机里面会出现一个"WebDriverAgentRunner-Runner",走到这一步就可以对iOS真机进行自动化测试了。

11.2.3、环境验证-----转发端口

构建WebDriverAgent至手机成功后,Xcode控制台就会打印出手机的ip和端口。

终端输入: iproxy 8300 8100

-----------------该工具命令用于将手机的端口号映射到电脑上的某一个端口,其中8100是手机的端口,8300是映射至Mac电脑的端口

如果映射不成功,执行命令安装:brew install usbmuxd

端口转发成功后,在浏览器Safari中输入本地地址+转发端口:http://localhost:8300/status,得到类似下面的输出即表示WebDriverAgent服务器状态正常。

 1 {
 2   "value" : {
 3     "message" : "WebDriverAgent is ready to accept commands",
 4     "state" : "success",
 5     "os" : {
 6       "testmanagerdVersion" : 28,
 7       "name" : "iOS",
 8       "sdkVersion" : "14.5",
 9       "version" : "13.3"
10     },
11     "ios" : {
12       "ip" : "192.168.3.18"
13     },
14     "ready" : true,
15     "build" : {
16       "time" : "Aug  4 2021 10:13:40",
17       "productBundleIdentifier" : "com.facebook.WebDriverAgentRunner"
18     }
19   },
20   "sessionId" : null     # 这里显示null我也不知为啥,但不影响使用
21 }

11.24、Appium启动App

通过Appium启动app,并使用inspector查找app的元素,在"Desired Capabilities"中输入下面的预期参数即可。

 1 {
 2   "platformName": "iOS",
 3   "automationName": "XCUITest",
 4   "platformVersion": "iOS系统版本号",
 5   "deviceName": "iOS手机名称",
 6   "bundleId": "被测试app的bundleId",
 7   "udid": "iOS手机设备号",
 8   "xcodeOrgId": "<Team ID>",
 9   "xcodeSigningId": "iPhone Developer"
10 }

免费版的苹果开发者账号,Team ID在构建WebDriverAgent的Xcode可以查看。申请的付费账号,登录 developer.apple.com/account查找Team ID。

12、iOS手机设置

12.1、授权UI自动化测试

iOS手机端进入设置 --> 开发者 --> 开启"Enable UI Automation"

12.2、Safari浏览器开启远程自动化

iOS手机端进入设置 --> Safari浏览器 --> 页面最下方"高级" --> 开启"远程自动化"

13、ios-webkit-debug-proxy安装

在iOS手机上进行H5页面的自动化测试,需要安装ios-webkit-debug-proxy

命令:brew install ios-webkit-debug-proxy

重新安装:brew reinstall ios-webkit-debug-proxy

安装成功后,终端输入下面的命令查看是否能正常调起ios-webkit-debug-proxy

ios_webkit_debug_proxy -c [设备udid]:27753 -d

注意:在desired_capabilities参数中要加入:startIWDP: True

14、Python安装

Python官网下载地址:Python Releases for macOS | Python.org

Mac OSX自带有Python2,安装的是Python3时还需要更改环境变量,将Python3设为默认。

1.1、获取Python3的安装路径

终端输入命令:which python3

我的安装路径是:/Library/Frameworks/Python.framework/Versions/3.8/bin/python3

1.2、编辑 bash_profile 文件

终端输入命令:sudo vim ~/.bash_profile

输入Mac的登录密码后进入文本操作,输入 i 转为插入模式,写入下面命令:

PATH="/Library/Frameworks/Python.framework/Versions/3.8/bin:${PATH}"

export PATH

alias python="/Library/Frameworks/Python.framework/Versions/3.8/bin/python3"

输入完成后按"Esc", 然后 ':' 底线命令模式, 输入 wq! 退出环境变量配置。

1.3、读取和执行命令,使配置生效

终端输入命令:source .bash_profile

1.4、requirements.txt / requests / lxml组件安装

组件不装可能会报错,终端输入命令:

pip3 install -r requirements.txt

pip3 install requests

pip3 install lxml

1.5、验证

终端输入:Python 展示安装的Python的版本,即安装成功

15、Java安装

Java_Jdk下载地址:Index of java-local/jdk 此链接为国内镜像源。

我下载的版本为:jdk-8u202-macosx-x64.dmg

1.1、安装与验证

Mac OSX系统安装很简单,按步骤就行。

安装好后在"系统偏好设置"中会有Java图标,并且在终端中输入"java -version"后,可以验证安装版本。

1.2、获取安装路径

终端中使用"open + /路径"可以打开目标文件夹。

在终端中输入:open /Library/Java/JavaVirtualMachines/ 在访达中可以开启安装目录。

我的java1.8安装路径:/Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home

1.3、配置环境变量

1)终端输入命令:sudo vim ~/.bash_profile

2)输入Mac的登录密码后进入文本操作,输入 i 转为插入模式,写入下面命令:

JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home

PATH=PATH:JAVA_HOME/bin

export JAVA_HOME

export PATH

3)按Esc退出编辑模式,进入命令行模式 :wq! 保存退出。

4)在终端输入命令 source .bash_profile 来读取和执行命令,使配置生效。

5)在终端输入命令 echo $JAVA_HOME后显示配置的home路径,说明配置成功。

16、Android SDK

Android SDK下载地址:

国内源下载:http://tools.android-studio.org/index.php/sdk

官网下载:https://www.androiddevtools.cn

下载的包解压后,在目录中> tools > 执行脚本android 进行升级安装:

环境变量配置:

1)终端输入命令:sudo vim ~/.bash_profile

2)终端中获取android-sdk-macosx目录的路径

我的路径是:/Users/sinosun/Downloads/android-sdk-macosx

3)输入Mac的登录密码后进入文本操作,输入 i 转为插入模式,输入下面命令:

ANDROID_HOME=/Users/sinosun/AutoTestdat/android-sdk-macosx

PATH=PATH:ANDROID_HOME/tools:ANDROID_HOME/platform-tools:ANDROID_HOME/build-tools/29.0.3

export ANDROID_HOME

export PATH

4)按Esc退出编辑模式,进入命令行模式 :wq! 保存退出。

5)在终端输入命令 source .bash_profile 来读取和执行命令,使配置生效。

6)验证 adb devices

此时,也可以在Mac中对Android手机进行自动化测试了。

终端中输入:appium-doctor 验证下iOS自动化、Android自动化测试环境的搭建是否还有问题。只要前面所有的步骤没问题,基本不会出现环境问题。

相关推荐
不去幼儿园1 小时前
【MARL】深入理解多智能体近端策略优化(MAPPO)算法与调参
人工智能·python·算法·机器学习·强化学习
幽兰的天空2 小时前
Python 中的模式匹配:深入了解 match 语句
开发语言·python
网易独家音乐人Mike Zhou5 小时前
【卡尔曼滤波】数据预测Prediction观测器的理论推导及应用 C语言、Python实现(Kalman Filter)
c语言·python·单片机·物联网·算法·嵌入式·iot
安静读书5 小时前
Python解析视频FPS(帧率)、分辨率信息
python·opencv·音视频
小二·7 小时前
java基础面试题笔记(基础篇)
java·笔记·python
小喵要摸鱼8 小时前
Python 神经网络项目常用语法
python
比格丽巴格丽抱9 小时前
flutter项目苹果编译运行打包上线
flutter·ios
一念之坤10 小时前
零基础学Python之数据结构 -- 01篇
数据结构·python
网络安全-老纪10 小时前
iOS应用网络安全之HTTPS
web安全·ios·https
wxl78122710 小时前
如何使用本地大模型做数据分析
python·数据挖掘·数据分析·代码解释器