You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过单个Xcode Bot实现多语言区域自动化测试?

单个Xcode Server Bot实现多语言/多区域测试的方案

当然可以搞定!不用费劲给每种语言单独建Bot,我给你分享几个实用的方案,亲测有效:

方案1:用Xcode测试计划(Test Plan)(最推荐)

Xcode 11及以后推出的Test Plan简直是为这种场景量身定做的,操作直观还不用写额外代码:

  • 打开你的项目,通过 File > New > Test Plan 新建一个测试计划
  • 切换到「Configurations」标签,点击「+」添加新配置,比如命名为「Chinese (CN)」「English (US)」
  • 选中每个配置,在右侧「Options」面板里设置对应的「Application Language」和「Application Region」
  • 把你的单元测试/UI测试目标添加到每个配置中,确保每种语言环境都能跑全测试
  • 配置Bot时,在「Testing」模块选择这个Test Plan,替代默认的单个测试目标

这样Bot每次运行时,会自动遍历所有配置,用对应的语言和区域完整跑一遍测试,结果还会按配置分类展示,查看起来特别清晰!

方案2:通过Bot的Pre-Action脚本动态指定语言

如果你的Xcode版本较低,或者需要更灵活的自定义逻辑,可以在Bot的前置动作里加脚本,调用xcodebuild时指定语言参数:

  • 打开Bot配置页面,找到「Pre-Actions」,点击「+」选择「Run Script」
  • 编写循环脚本,遍历你要测试的语言列表,每次调用xcodebuild时指定不同的语言和区域:
# 定义要测试的语言区域组合
LANG_LOCALE_PAIRS=(
  "zh-Hans-CN zh_CN"
  "en-US en_US"
)

for pair in "${LANG_LOCALE_PAIRS[@]}"; do
  read lang locale <<< "$pair"
  xcodebuild test \
    -workspace YourApp.xcworkspace \
    -scheme YourAppScheme \
    -destination 'platform=iOS Simulator,name=iPhone 14' \
    -testLanguage "$lang" \
    -testRegion "$locale"
done
  • 注意:要禁用Bot默认的测试命令,改用脚本里的xcodebuild调用,避免重复执行。测试结果会合并到Bot报告中,你可以通过日志区分不同语言的测试情况。

方案3:在测试代码里动态切换语言(细粒度控制)

如果需要给单个测试用例指定特定语言,可以在测试代码里设置启动参数或修改UserDefaults:

UI测试示例

import XCTest

class LocalizationUITests: XCTestCase {
    func testChineseInterface() {
        let app = XCUIApplication()
        // 通过启动参数设置语言和区域
        app.launchArguments += ["-AppleLanguages", "(zh-Hans-CN)"]
        app.launchArguments += ["-AppleLocale", "\"zh_CN\""]
        app.launch()
        
        // 验证中文文案是否正确
        XCTAssertEqual(app.staticTexts["Welcome"].label, "欢迎")
    }
    
    func testEnglishInterface() {
        let app = XCUIApplication()
        app.launchArguments += ["-AppleLanguages", "(en-US)"]
        app.launchArguments += ["-AppleLocale", "\"en_US\""]
        app.launch()
        
        XCTAssertEqual(app.staticTexts["Welcome"].label, "Welcome")
    }
}

单元测试示例

import XCTest

class LocalizationUnitTests: XCTestCase {
    override func setUp() {
        super.setUp()
        // 设置语言和区域到UserDefaults
        UserDefaults.standard.set(["zh-Hans-CN"], forKey: "AppleLanguages")
        UserDefaults.standard.set("zh_CN", forKey: "AppleLocale")
        // 通知App语言变更(如果你的App监听了这个通知)
        NotificationCenter.default.post(name: NSNotification.Name("AppleLanguageChanged"), object: nil)
    }
    
    override func tearDown() {
        // 测试结束后恢复默认设置,避免影响其他测试
        UserDefaults.standard.removeObject(forKey: "AppleLanguages")
        UserDefaults.standard.removeObject(forKey: "AppleLocale")
        super.tearDown()
    }
    
    func testChineseStringLocalization() {
        XCTAssertEqual(NSLocalizedString("welcome", comment: ""), "欢迎")
    }
}

这种方式适合精准控制单个测试用例的语言环境,但要注意测试之间的状态隔离,避免语言设置残留影响其他测试。

一些注意事项

  • 确保你的App已经添加了对应语言的本地化文件(.strings),不然测试时会显示默认语言
  • UI测试中,每次切换语言都要重新启动App,否则语言设置不会生效
  • 使用Test Plan时,要确认每个配置都包含了所有需要测试的目标,避免漏测
  • 脚本方案中,要根据你的项目类型(workspace/scheme)调整xcodebuild的参数

内容的提问来源于stack exchange,提问作者Ericlm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:08:50