1.了解框架,特性
Prompt: 根据:苹果官网介绍文档,developer.apple.com/cn/xcode/sw…
根据LLM,人工总结:
Prompt: 解释一下,测试框架支持并发,带来哪些好处?
- 提高测试效率:通过并行执行测试用例,可以显著减少整体的测试时间,提高测试效率。
- 支持持续集成:并发测试与持续集成流程无缝集成(代码提交,触发构建和测试流程,并发支持减少代码提交拥塞)
- 提高测试覆盖率:在相同的时间内,可以执行更多的测试用例,提高测试覆盖率
2. 同类对比
3. 框架使用-时序图
Swift Testing 开发和测试工作流包括以下步骤:
4. 框架基本概念
Prompt: 根据官方文档:developer.apple.com/documentati… ,总结Swift Testing框架学习的基本概念
5. 单元测试和UI测试
示例代码
举例说明Swift Testing框架的使用, MVVM架构swift项目登录模块的单元测试和UI测试
- 单元测试
import SwiftTesting
@testable import YourProjectName
@Suite
struct LoginViewModelTests {
var sut: LoginViewModel! // 被测试对象
@SetUp
func setUp() {
sut = LoginViewModel() // 初始化 ViewModel
}
@Test("测试有效登录")
func testValidLogin() {
sut.username.value = "validUser"
sut.password.value = "validPassword"
sut.login() // 执行登录操作
#expect(sut.isLoggedIn.value == true, "登录应该成功")
#expect(sut.errorMessage.value.isEmpty, "不应该有错误消息")
}
@Test("测试无效登录(空用户名)")
func testInvalidLoginEmptyUsername() {
sut.username.value = ""
sut.password.value = "validPassword"
sut.login() // 执行登录操作
#expect(sut.isLoggedIn.value == false, "登录应该失败")
#expect(sut.errorMessage.value == "请输入用户名", "应该显示错误消息")
}
// 添加更多的测试用例...
}
- UI 测试(需额外引入XCTest)
import SwiftTesting
import XCTest
@testable import YourProjectName
@Suite
struct LoginViewControllerTests {
var app: XCUIApplication! // XCUIApplication 实例
@SetUp
func setUp() {
app = XCUIApplication() // 初始化 XCUIApplication
app.launch() // 启动应用
}
@Test("测试登录界面显示")
func testLoginScreenDisplay() {
#expect(app.staticTexts["登录"].exists, "应该显示登录标题")
#expect(app.textFields["用户名"].exists, "应该显示用户名输入框")
#expect(app.secureTextFields["密码"].exists, "应该显示密码输入框")
#expect(app.buttons["登录"].exists, "应该显示登录按钮")
}
@Test("测试有效登录流程")
func testValidLoginFlow() {
let usernameTextField = app.textFields["用户名"]
let passwordTextField = app.secureTextFields["密码"]
let loginButton = app.buttons["登录"]
usernameTextField.tap() // 点击用户名输入框
usernameTextField.typeText("validUser") // 输入有效用户名
passwordTextField.tap() // 点击密码输入框
passwordTextField.typeText("validPassword") // 输入有效密码
loginButton.tap() // 点击登录按钮
#expect(app.staticTexts["登录成功"].exists, "应该显示登录成功消息") // 根据你的应用逻辑进行断言
}
// 添加更多的 UI 测试用例...
}
6. Develop Flow(开发工作流)
需求开发Flow
自动化
Fastlane为例
default_platform(:ios)
platform :ios do
desc "Run UI tests"
lane :ui_tests do
scan(
scheme: "YourUITestScheme",
device: "iPhone 12",
configuration: "Debug",
clean: true,
code_coverage: true
)
end
desc "Run unit tests"
lane :unit_tests do
scan(
scheme: "YourUnitTestScheme",
device: "iPhone 12",
configuration: "Debug",
clean: true,
code_coverage: true
)
end
# 执行所有测试
lane :all_tests do
unit_tests
ui_tests
end
end
测试报告
7. CI/CD
团队协作,多人提交代码后,触发自动化测试(SwiftTesting支持并发,加快模块集成效率)
Github Actions为例
name: CI/CD
on: [push, pull_request]
jobs:
build-and-test:
runs-on: macOS-latest
steps:
- uses: actions/checkout@v2
- name: Install Fastlane
run: gem install fastlane
- name: Run UI tests
run: fastlane ui_tests
- name: Run unit tests
run: fastlane unit_tests