Với các kiểm thử Vòng lặp trò chơi, bạn có thể viết các kiểm thử gốc cho công cụ trò chơi của mình, sau đó chạy các kiểm thử đó trong Test Lab trên những thiết bị mà bạn chọn. Bằng cách này, bạn không cần lo lắng về việc viết cho các khung giao diện người dùng hoặc kiểm thử khác nhau. Thử nghiệm Vòng lặp trò chơi mô phỏng các hành động của một người chơi thực. Khi bạn chạy thử nghiệm này trên Test Lab, thử nghiệm sẽ cung cấp một cách nhanh chóng và có khả năng mở rộng để xác minh rằng trò chơi của bạn hoạt động hiệu quả cho người dùng.
Trang này hướng dẫn bạn cách chạy một bài kiểm thử Vòng lặp trò chơi, sau đó xem và quản lý kết quả kiểm thử trên trang Test Lab của bảng điều khiển Firebase. Bạn cũng có thể tuỳ chỉnh thêm các bài kiểm thử bằng các tính năng không bắt buộc, chẳng hạn như viết kết quả kiểm thử tuỳ chỉnh hoặc kết thúc bài kiểm thử sớm.
Thử nghiệm vòng lặp trò chơi là gì?
Vòng lặp là một lần chạy toàn bộ hoặc một phần quy trình kiểm thử trên ứng dụng trò chơi của bạn. Bạn có thể chạy kiểm thử Vòng lặp trò chơi cục bộ trên một trình mô phỏng hoặc trên một nhóm thiết bị trong Test Lab. Bạn có thể dùng các kiểm thử Vòng lặp trò chơi để:
Chơi thử trò chơi của bạn như một người dùng cuối. Bạn có thể viết kịch bản cho hoạt động đầu vào của người dùng, để người dùng ở trạng thái không hoạt động hoặc thay thế người dùng bằng AI (ví dụ: nếu triển khai AI trong một trò chơi đua xe, bạn có thể đặt một trình điều khiển AI phụ trách hoạt động đầu vào của người dùng).
Chạy trò chơi ở chế độ cài đặt chất lượng cao nhất để tìm hiểu xem thiết bị nào có thể hỗ trợ chế độ này.
Chạy một quy trình kiểm thử kỹ thuật, chẳng hạn như biên dịch nhiều chương trình đổ bóng, thực thi các chương trình đó và kiểm tra để đảm bảo đầu ra như mong đợi.
Bước 1: Đăng ký lược đồ URL tuỳ chỉnh của Test Lab
Trước tiên, bạn phải đăng ký giản đồ URL tuỳ chỉnh của Firebase Test Lab trong ứng dụng:
Trong Xcode, hãy chọn một mục tiêu dự án.
Nhấp vào thẻ Thông tin, sau đó thêm một Loại URL mới.
Trong trường URL Schemes (Lược đồ URL), hãy nhập
firebase-game-loop
. Bạn cũng có thể đăng ký giản đồ URL tuỳ chỉnh bằng cách thêm giản đồ đó vào tệp cấu hìnhInfo.plist
của dự án ở bất kỳ vị trí nào trong thẻ<dict>
:<key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleURLName</key> <string></string> <key>CFBundleTypeRole</key> <string>Editor</string> <key>CFBundleURLSchemes</key> <array> <string>firebase-game-loop</string> </array> </dict> </array>
Ứng dụng của bạn hiện được định cấu hình để chạy một kiểm thử bằng Test Lab.
Bước 2 (không bắt buộc): Định cấu hình ứng dụng để chạy nhiều vòng lặp
Nếu ứng dụng của bạn đã đăng ký nhiều lược đồ URL tuỳ chỉnh và bạn dự định chạy nhiều vòng lặp (còn gọi là các tình huống) trong kiểm thử, thì bạn phải chỉ định những vòng lặp mà bạn muốn chạy trong ứng dụng tại thời điểm khởi chạy.
Trong uỷ quyền ứng dụng, hãy ghi đè phương thức application(_:open:options:)
:
Swift
func application(_app: UIApplication,
open url: URL
options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
let components = URLComponents(url: url, resolvingAgainstBaseURL: true)!
if components.scheme == "firebase-game-loop" {
// ...Enter Game Loop Test logic to override application(_:open:options:).
}
return true
}
Objective-C
- (BOOL)application:(UIApplication *)app
openURL:(NSURL *)url
options:(NSDictionary <UIApplicationOpenURLOptionsKey, id> *)options {
if ([url.scheme isEqualToString:(@"firebase-game-loop")]) {
// ...Enter Game Loop Test logic to override application(_:open:options:).
}
}
Khi chạy nhiều vòng lặp trong quá trình kiểm thử, vòng lặp hiện tại sẽ được truyền dưới dạng một tham số đến URL dùng để chạy ứng dụng. Bạn cũng có thể lấy số vòng lặp hiện tại bằng cách phân tích cú pháp đối tượng URLComponents
dùng để tìm nạp giản đồ URL tuỳ chỉnh:
Swift
if components.scheme == "firebase-game-loop" {
// Iterate over all parameters and find the one with the key "scenario".
let scenarioNum = Int(components.queryItems!.first(where: { $0.name == "scenario" })!.value!)!
// ...Write logic specific to the current loop (scenarioNum).
}
Objective-C
if ([url.scheme isEqualToString:(@"firebase-game-loop")]) {
// Launch the app as part of a game loop.
NSURLComponents *components = [NSURLComponents componentsWithURL:url
resolvingAgainstBaseURL:YES];
for (NSURLQueryItem *item in [components queryItems]) {
if ([item.name isEqualToString:@"scenario"]) {
NSInteger scenarioNum = [item.value integerValue];
// ...Write logic specific to the current loop (scenarioNum).
}
}
}
Bước 3: Tạo và chạy thử nghiệm
Sau khi đăng ký giản đồ URL tuỳ chỉnh của Test Lab, bạn có thể chạy thử nghiệm trong bảng điều khiển Firebase hoặc bằng CLI gcloud beta. Nếu chưa, hãy tạo một tệp IPA cho ứng dụng của bạn (sau này bạn sẽ cần tìm tệp này).
Chạy kiểm thử trong bảng điều khiển Firebase
Nếu chưa có, hãy mở bảng điều khiển Firebase rồi tạo một dự án.
Trên trang Test Lab của bảng điều khiển Firebase, hãy nhấp vào Chạy thử nghiệm đầu tiên > Chạy một vòng lặp trò chơi iOS.
Trong phần Tải ứng dụng lên, hãy nhấp vào Duyệt qua, sau đó chọn tệp IPA của ứng dụng (nếu chưa, hãy tạo tệp IPA cho ứng dụng).
Không bắt buộc: Nếu bạn muốn chạy nhiều vòng lặp (còn gọi là kịch bản) cùng một lúc hoặc chọn các vòng lặp cụ thể để chạy, hãy nhập số vòng lặp vào trường Kịch bản.
Ví dụ: khi bạn nhập "1-3, 5", Test Lab sẽ chạy các vòng lặp 1, 2, 3 và 5. Theo mặc định (nếu bạn không nhập nội dung nào vào trường Scenarios (Tình huống)), Test Lab chỉ chạy vòng lặp 1.
Trong phần Thiết bị, hãy chọn một hoặc nhiều thiết bị thực mà bạn muốn kiểm thử ứng dụng, sau đó nhấp vào Bắt đầu kiểm thử.
Chạy kiểm thử bằng giao diện dòng lệnh gcloud beta
Nếu bạn chưa làm, hãy định cấu hình môi trường gcloud SDK cục bộ, sau đó nhớ cài đặt thành phần gcloud beta.
Chạy lệnh
gcloud beta firebase test ios run
và dùng các cờ sau để định cấu hình lượt chạy:
Cờ cho các thử nghiệm Vòng lặp trò chơi | |
---|---|
--type
|
Bắt buộc: Chỉ định loại thử nghiệm iOS mà bạn muốn chạy. Bạn có thể nhập các loại kiểm thử |
--app
|
Bắt buộc: Đường dẫn tuyệt đối (Google Cloud Storage hoặc hệ thống tệp) đến tệp IPA của ứng dụng. Cờ này chỉ hợp lệ khi chạy các bài kiểm thử Vòng lặp trò chơi. |
--scenario-numbers
|
Các vòng lặp (còn gọi là kịch bản) mà bạn muốn chạy trong ứng dụng. Bạn có thể nhập một vòng lặp, danh sách vòng lặp hoặc một dải vòng lặp. Số vòng lặp mặc định là 1.
Ví dụ: |
--device-model
|
Thiết bị thực mà bạn muốn chạy thử nghiệm (tìm hiểu xem bạn có thể dùng những thiết bị hiện có nào). |
--timeout
|
Thời lượng tối đa bạn muốn chạy thử nghiệm. Bạn có thể nhập một số nguyên để biểu thị khoảng thời gian tính bằng giây hoặc một số nguyên và phép liệt kê để biểu thị khoảng thời gian bằng một đơn vị thời gian dài hơn. Ví dụ:
|
Ví dụ: lệnh sau đây chạy một bài kiểm thử Vòng lặp trò chơi, thực hiện các vòng lặp 1, 4, 6, 7 và 8 trên iPhone 8 Plus:
gcloud beta firebase test ios run --type game-loop --app path/to/my/App.ipa --scenario-numbers 1,4,6-8 --device-model=iphone8plus
Để biết thêm thông tin về gcloud CLI, hãy xem tài liệu tham khảo.
Chạy thử nghiệm cục bộ
Để chạy kiểm thử cục bộ, hãy tải ứng dụng chơi trò chơi của bạn vào một trình mô phỏng rồi chạy:
xcrun simctl openurl SIMULATOR_UDID firebase-game-loop://
Bạn có thể tìm UDID của trình mô phỏng bằng cách chạy lệnh
instruments -s devices
.Nếu chỉ có một trình mô phỏng đang chạy, hãy nhập chuỗi đặc biệt
"booted"
thay cho SIMULATOR_UDID.
Nếu kiểm thử của bạn có nhiều vòng lặp, bạn có thể chỉ định vòng lặp mà bạn muốn chạy bằng cách truyền số vòng lặp đến cờ scenario
. Xin lưu ý rằng bạn chỉ có thể chạy một vòng lặp tại một thời điểm khi chạy kiểm thử cục bộ. Ví dụ: nếu muốn chạy các vòng lặp 1, 2 và 5, bạn phải chạy một lệnh riêng cho từng vòng lặp:
xcrun simctl openurl SIMULATOR_UDID firebase-game-loop://?scenario=1
xcrun simctl openurl SIMULATOR_UDID firebase-game-loop://?scenario=2
xcrun simctl openurl SIMULATOR_UDID firebase-game-loop://?scenario=5
Kết thúc sớm một kiểm thử
Theo mặc định, một thử nghiệm Vòng lặp trò chơi sẽ tiếp tục chạy cho đến khi đạt đến thời gian chờ là 5 phút, ngay cả khi tất cả các vòng lặp đã được thực thi. Khi hết thời gian chờ, quá trình kiểm thử sẽ kết thúc và huỷ mọi vòng lặp đang chờ xử lý. Bạn có thể tăng tốc quá trình kiểm thử hoặc kết thúc sớm bằng cách gọi lược đồ URL tuỳ chỉnh Test Lab của firebase-game-loop-complete
trong AppDelegate của ứng dụng. Ví dụ:
Swift
/// End the loop by calling our custom url scheme.
func finishLoop() {
let url = URL(string: "firebase-game-loop-complete://")!
UIApplication.shared.open(url)
}
Objective-C
- (void)finishLoop {
UIApplication *app = [UIApplication sharedApplication];
[app openURL:[NSURL URLWithString:@"firebase-game-loop-complete://"]
options:@{}
completionHandler:^(BOOL success) {}];
}
Thử nghiệm Vòng lặp trò chơi sẽ kết thúc vòng lặp hiện tại và thực thi vòng lặp tiếp theo. Khi không còn vòng lặp nào để chạy, quy trình kiểm thử sẽ kết thúc.
Viết kết quả kiểm thử tuỳ chỉnh
Bạn có thể định cấu hình kiểm thử Vòng lặp trò chơi để ghi kết quả kiểm thử tuỳ chỉnh vào hệ thống tệp của thiết bị. Bằng cách này, khi quá trình kiểm thử bắt đầu chạy, Test Lab sẽ lưu trữ các tệp kết quả trong thư mục GameLoopsResults
trên thiết bị kiểm thử (bạn phải tự tạo thư mục này). Khi quá trình kiểm thử kết thúc, Test Lab sẽ di chuyển tất cả các tệp từ thư mục GameLoopResults
sang nhóm của dự án. Khi thiết lập kiểm thử, hãy lưu ý những điều sau:
Tất cả các tệp kết quả đều được tải lên bất kể loại tệp, kích thước hay số lượng.
Test Lab sẽ không xử lý kết quả kiểm thử cho đến khi tất cả các vòng lặp trong kiểm thử của bạn đã chạy xong. Vì vậy, nếu kiểm thử của bạn có nhiều vòng lặp ghi đầu ra, hãy nhớ thêm các vòng lặp đó vào một tệp kết quả duy nhất hoặc tạo một tệp kết quả cho mỗi vòng lặp. Bằng cách này, bạn có thể tránh ghi đè kết quả từ một vòng lặp trước đó.
Cách thiết lập kiểm thử để ghi kết quả kiểm thử tuỳ chỉnh:
Trong thư mục
Documents
của ứng dụng, hãy tạo một thư mục có tên làGameLoopResults
.Từ bất kỳ vị trí nào trong mã của ứng dụng (ví dụ: uỷ quyền ứng dụng), hãy thêm nội dung sau:
Swift
/// Write to a results file. func writeResults() { let text = "Greetings from game loops!" let fileName = "results.txt" let fileManager = FileManager.default do { let docs = try fileManager.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true) let resultsDir = docs.appendingPathComponent("GameLoopResults") try fileManager.createDirectory( at: resultsDir, withIntermediateDirectories: true, attributes: nil) let fileURL = resultsDir.appendingPathComponent(fileName) try text.write(to: fileURL, atomically: false, encoding: .utf8) } catch { // ...Handle error writing to file. } }
Objective-C
/// Write to a results file. - (void)writeResults:(NSString *)message { // Locate and create the results directory (if it doesn't exist already). NSFileManager *manager = [NSFileManager defaultManager]; NSURL* url = [[manager URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]; NSURL* resultsDir = [url URLByAppendingPathComponent:@"GameLoopResults" isDirectory:YES]; [manager createDirectoryAtURL:resultsDir withIntermediateDirectories:NO attributes:nil error:nil]; // Write the result message to a text file. NSURL* resultFile = [resultsDir URLByAppendingPathComponent:@"result.txt"]; if ([manager fileExistsAtPath:[resultFile path]]) { // Append to the existing file NSFileHandle *handle = [NSFileHandle fileHandleForWritingToURL:resultFile error:nil]; [handle seekToEndOfFile]; [handle writeData:[message dataUsingEncoding:NSUTF8StringEncoding]]; [handle closeFile]; } else { // Create and write to the file. [message writeToURL:resultFile atomically:NO encoding:NSUTF8StringEncoding error:nil]; } }