Google is committed to advancing racial equity for Black communities. See how.
Trang này được dịch bởi Cloud Translation API.
Switch to English

Bắt đầu với các bài kiểm tra Game Loop cho iOS

Với các bài kiểm tra Game Loop, bạn có thể viết các bài kiểm tra riêng cho công cụ trò chơi của mình và sau đó chạy chúng trong Test Lab trên các thiết bị bạn chọn. Bằng cách này, bạn không cần phải lo lắng về việc viết cho các UI hoặc các khung kiểm tra khác nhau. Thử nghiệm Game Loop mô phỏng hành động của một người chơi thực sự và khi bạn chạy nó trên Test Lab, nó cung cấp một cách nhanh chóng và có thể mở rộng để xác minh rằng trò chơi của bạn hoạt động tốt cho người dùng của bạn.

Trang này cho bạn biết cách chạy thử nghiệm Vòng lặp trò chơi, sau đó xem và quản lý kết quả thử nghiệm của bạn trong trang Test Lab của bảng điều khiển Firebase. Bạn cũng có thể tùy chỉnh thêm các bài kiểm tra của mình với các tính năng tùy chọn, chẳng hạn như viết kết quả kiểm tra tùy chỉnh hoặc kết thúc sớm bài kiểm tra của bạn .

Kiểm tra vòng lặp trò chơi là gì?

Vòng lặp là toàn bộ hoặc một phần thử nghiệm trên ứng dụng chơi game của bạn. Bạn có thể chạy thử nghiệm Vòng lặp trò chơi cục bộ trên trình giả lập hoặc trên một bộ thiết bị trong Test Lab. Các bài kiểm tra Vòng lặp trò chơi có thể được sử dụng để:

  • Chạy qua trò chơi của bạn như một người dùng cuối sẽ chơi nó. Bạn có thể tạo kịch bản đầu vào của người dùng, để người dùng ở chế độ chờ hoặc thay thế người dùng bằng AI (ví dụ: nếu bạn triển khai AI trong trò chơi đua xe, bạn có thể đặt trình điều khiển AI phụ trách đầu vào của người dùng) .

  • Chạy trò chơi của bạn ở cài đặt chất lượng cao nhất để tìm ra thiết bị nào có thể hỗ trợ nó.

  • Chạy thử nghiệm kỹ thuật, chẳng hạn như biên dịch nhiều shader, thực thi chúng và kiểm tra xem đầu ra có như mong đợi không.

Bước 1: Đăng ký lược đồ URL tùy chỉnh của Test Lab

Trước tiên, bạn phải đăng ký lược đồ URL tùy chỉnh của Firebase Test Lab trong ứng dụng của mình:

  1. Trong Xcode, chọn mục tiêu dự án.

  2. Nhấp vào tab Thông tin , sau đó thêm loại URL mới.

  3. Trong trường Lược đồ URL , nhập firebase-game-loop . Bạn cũng có thể đăng ký lược đồ URL tùy chỉnh bằng cách thêm nó vào tệp cấu hình Info.plist của dự án của bạn ở bất cứ đâu trong <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 cấu hình để chạy thử nghiệm bằng Test Lab.

Bước 2 (tùy chọn): Định cấu hình ứng dụng của bạn để chạy nhiều vòng

Nếu ứng dụng của bạn có nhiều lược đồ URL tùy chỉnh được đăng ký và bạn dự định chạy nhiều vòng lặp (còn gọi là kịch bản) trong thử nghiệm của mình, bạn phải chỉ định vòng lặp nào bạn muốn chạy trong ứng dụng của mình khi khởi chạy.

Trong đại biểu ứng dụng của bạn, ghi đè application(_:open:options:) phương thức application(_:open:options:) :

Nhanh

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
}

Mục tiêu-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 bạn chạy nhiều vòng trong bài kiểm tra của mình, vòng lặp hiện tại được truyền dưới dạng tham số cho URL được sử dụng để khởi chạy ứng dụng. Bạn cũng có thể có được số vòng lặp hiện tại bằng cách phân tích đối tượng URLComponents được sử dụng để tìm nạp lược đồ URL tùy chỉnh:

Nhanh

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).
}

Mục tiêu-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 bạn đăng ký lược đồ URL tùy 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 với CLI gcloud beta . Nếu bạn chưa có, hãy tạo tệp IPA cho ứng dụng của bạn (bạn sẽ cần xác định vị trí sau).

Chạy thử nghiệm trong bảng điều khiển Firebase

  1. Nếu bạn chưa có, hãy mở bảng điều khiển Firebase và tạo một dự án.

  2. Trên trang Test Lab của bảng điều khiển Firebase, bấm Chạy Thử nghiệm đầu tiên của bạn> Chạy Vòng lặp trò chơi iOS .

  3. Trong phần Tải lên ứng dụng , bấm Duyệt , sau đó chọn tệp IPA của ứng dụng (nếu bạn chưa có, hãy tạo tệp IPA cho ứng dụng của bạn).

  4. Tùy chọn : Nếu bạn muốn chạy nhiều vòng lặp (còn gọi là kịch bản) tại một thời điểm hoặc chọn các vòng lặp cụ thể để chạy, hãy nhập số vòng lặp trong trường Kịch bản .

    Ví dụ: khi bạn nhập "1-3, 5", Test Lab chạy các vòng 1, 2, 3 và 5. Theo mặc định (nếu bạn không nhập bất cứ thứ gì vào trường Kịch bản ), Test Lab chỉ chạy vòng 1.

  5. Trong phần Thiết bị , chọn một hoặc nhiều thiết bị vật lý mà bạn muốn kiểm tra ứng dụng của mình, sau đó bấm Bắt đầu Kiểm tra .

Chạy thử nghiệm với CLI gcloud beta

  1. Nếu bạn chưa có, hãy định cấu hình môi trường SDK gcloud cục bộ của bạn, sau đó đảm bảo cài đặt thành phần gcloud beta .

  2. Chạy lệnh gcloud beta firebase test ios run và sử dụng các cờ sau để định cấu hình chạy:

Cờ cho các bài kiểm tra Vòng lặp trò chơi
--type

Bắt buộc : Chỉ định loại thử nghiệm iOS bạn muốn chạy. Bạn có thể nhập các loại thử nghiệm xctest (mặc định) hoặc game-loop .

--app

Bắt buộc : Đường dẫn tuyệt đối (GCS hoặc hệ thống tệp) đến tệp IPA của ứng dụng của bạn. Cờ này chỉ có hiệu lực khi chạy thử nghiệm Game Loop.

--scenario-numbers

Các vòng lặp (còn gọi là kịch bản) bạn muốn chạy trong ứng dụng của mình. Bạn có thể nhập một vòng lặp, danh sách hoặc vòng lặp hoặc một loạt các vòng lặp. Vòng lặp mặc định là 1.

Ví dụ: --scenario-numbers=1-3,5 chạy các vòng 1, 2, 3 và 5.

--device-model

Thiết bị vật lý bạn muốn chạy thử nghiệm (tìm hiểu những thiết bị khả dụng nào bạn có thể sử dụng).

--timeout

Thời lượng tối đa bạn muốn thử nghiệm của bạn để chạy. Bạn có thể nhập một số nguyên để biểu thị thời lượng tính bằng giây hoặc số nguyên và liệt kê để biểu thị thời lượng dưới dạng đơn vị thời gian dài hơn.

Ví dụ:

  • --timeout=200 buộc bài kiểm tra của bạn chấm dứt khi nó chạy tối đa 200 giây.
  • --timeout=1h buộc bài kiểm tra của bạn chấm dứt khi nó chạy đến một giờ.

Ví dụ: lệnh sau chạy thử nghiệm Vòng lặp trò chơi thực thi các vòng 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ề CLI gcloud, xem tài liệu tham khảo .

Chạy thử nghiệm cục bộ

Để chạy thử nghiệm cục bộ, hãy tải ứng dụng chơi trò chơi của bạn trong trình giả lập và chạy:

xcrun simctl openurl SIMULATOR_UDID firebase-game-loop://
  • Bạn có thể tìm UDID giả lập của mình bằng cách chạy lệnh instruments -s devices .

  • Nếu chỉ có một trình giả lập đang chạy, hãy nhập chuỗi đặc biệt "booted" thay cho SIMULATOR_UDID .

Nếu bài kiểm tra của bạn chứa nhiều vòng lặp, bạn có thể chỉ định vòng lặp nào bạn muốn chạy bằng cách chuyển số vòng lặp cho cờ scenario . 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 thử nghiệm cục bộ. Ví dụ: nếu bạn muốn chạy các vòng 1, 2 và 5, bạn phải chạy một lệnh riêng cho mỗi 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 một bài kiểm tra sớm

Theo mặc định, kiểm tra Vòng lặp trò chơi tiếp tục chạy cho đến khi hết thời gian năm 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ờ, thử nghiệm kết thúc và hủy bỏ mọi vòng lặp đang chờ xử lý. Bạn có thể tăng tốc độ kiểm tra của mình hoặc kết thúc sớm bằng cách gọi sơ đồ URL tùy chỉnh của Lab Lab là firebase-game-loop-complete Complete trong AppDelegate của ứng dụng. Ví dụ:

Nhanh

/// End the loop by calling our custom url scheme.
func finishLoop() {
let url = URL(string: "firebase-game-loop-complete://")!
UIApplication.shared.open(url)
}

Mục tiêu-C

  • (void) finishLoop {UIApplication * app = [UIApplication sharedApplication]; [ứng dụng openURL: [NSURL URLWithString: @ "firebase-game-loop-Complete: //"] tùy chọn: @ {} xongHandler: ^ (BOOL thành công) {}]; }

Kiểm tra Vòng lặp trò chơi của bạn chấm dứt vòng lặp hiện tại và thực hiện vòng lặp tiếp theo. Khi không còn vòng lặp để chạy, thử nghiệm kết thúc.

Viết kết quả kiểm tra tùy chỉnh

Bạn có thể định cấu hình kiểm tra Vòng lặp trò chơi của mình để ghi kết quả kiểm tra tùy chỉnh vào hệ thống tệp của thiết bị. Bằng cách này, khi thử nghiệm bắt đầu chạy, Test Lab lưu trữ các tệp kết quả trong thư mục GameLoopsResults trên thiết bị thử nghiệm của bạn (mà bạn phải tự tạo). Khi thử nghiệm kết thúc, Test Lab sẽ chuyển tất cả các tệp từ thư mục GameLoopResults sang nhóm dự án của bạn. Hãy ghi nhớ những điều sau khi thiết lập bài kiểm tra của bạn:

  • Tất cả các tệp kết quả được tải lên bất kể loại tệp, kích thước hoặc số lượng.

  • Test Lab không xử lý kết quả kiểm tra của bạn cho đến khi tất cả các vòng lặp trong thử nghiệm của bạn đã chạy xong, vì vậy nếu thử nghiệm của bạn bao gồm nhiều vòng lặp ghi đầu ra, hãy đảm bảo bạn thêm chúng vào tệp kết quả hoặc tạo 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.

Để thiết lập thử nghiệm của bạn để viết kết quả kiểm tra tùy chỉnh:

  1. Trong thư mục Documents của ứng dụng, hãy tạo một thư mục có tên GameLoopResults .

  2. Từ bất cứ nơi nào trong mã ứng dụng của bạn (ví dụ: đại biểu ứng dụng của bạn), hãy thêm vào như sau:

    Nhanh

    /// 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.
    }
    }
    

    Mục tiêu-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]; } }