Chạy thử nghiệm Vòng lặp trò chơi

Có thể khó tự động hóa việc kiểm tra trò chơi khi các ứng dụng trò chơi được xây dựng trên các khung giao diện người dùng khác nhau. Kiểm tra vòng lặp trò chơi cho phép bạn tích hợp các bài kiểm tra gốc của mình với Test Lab và dễ dàng chạy chúng trên các thiết bị bạn chọn. Hướng dẫn này mô tả cách chuẩn bị thử nghiệm Vòng lặp trò chơi để chạy bằng Phòng thử nghiệm Firebase.

Giới thiệu về kiểm tra vòng lặp trò chơi

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

Thử nghiệm Vòng lặp trò chơi mô phỏng hành động của người chơi thực để xác minh rằng trò chơi của bạn hoạt động tốt cho người dùng theo cách nhanh chóng và có thể mở rộng. Vòng lặp là quá trình chạy thử toàn bộ hoặc một phần trên ứng dụng trò chơi 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 mô phỏng hoặc trên một bộ thiết bị trong Test Lab. 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 với tư cách là người dùng cuối sẽ chơi trò chơi đó. Bạn có thể tạo kịch bản cho thông tin đầu vào của người dùng, để người dùng ở chế độ rảnh 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 ô tô, 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 hiểu xem thiết bị nào có thể hỗ trợ trò chơi đó.
  • Chạy thử nghiệm kỹ thuật, chẳng hạn như biên dịch nhiều trình đổ bóng, thực thi chúng và kiểm tra xem kết quả đầu ra có như mong đợi hay không.

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

  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 lược đồ này vào tệp cấu hình Info.plist của dự án ở bất kỳ đâu 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 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 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 tại thời điểm khởi chạy.

Trong ứng dụng ủy quyền của bạn, hãy ghi đè 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 &lt;UIApplicationOpenURLOptionsKey, id&gt; *)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 lặp trong thử nghiệm của mình, vòng lặp hiện tại sẽ được chuyển dưới dạng tham số cho URL dùng để khởi 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 đượ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).
        }
    }
}

Kết thúc bài kiểm tra sớm

Theo mặc định, thử nghiệm Vòng lặp trò chơi sẽ tiếp tục chạy cho đến khi hết 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 tra sẽ kết thúc và hủy mọi vòng lặp đang chờ xử lý. Bạn có thể tăng tốc quá trình kiểm tra hoặc kết thúc sớm bằng cách gọi lược đồ URL tùy chỉnh của Test Lab firebase-game-loop-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];
  [app openURL:[NSURL URLWithString:@"firebase-game-loop-complete://"]
      options:@{}
completionHandler:^(BOOL success) {}];
}

Kiểm tra vòng lặp trò chơi của bạn sẽ kết thúc 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 nào để chạy nữa, quá trình kiểm tra sẽ 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 để 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 quá trình kiểm tra 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 tra của bạn (bạn phải tự tạo). Khi quá trình kiểm tra 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 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ả đều được tải lên bất kể loại, kích thước hoặc số lượng tệp.

  • 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 bài kiểm tra của bạn chạy xong, vì vậy nếu bài kiểm tra của bạn bao gồm nhiều vòng lặp ghi đầu ra, hãy đảm bảo bạn nối chúng 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ừ vòng lặp trước đó.

Để thiết lập bài kiểm tra của bạn nhằm 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 thư mục có tên GameLoopResults .

  2. Từ bất kỳ đâu 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 thông tin 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];
        }
    }
    

Bước 3 : Ký ứng dụng của bạn

  1. Đảm bảo rằng tất cả các tạo phẩm trong ứng dụng đều được ký. Ví dụ: bạn có thể thực hiện việc này thông qua Xcode bằng cách chỉ định cài đặt ký như cung cấp hồ sơ và danh tính. Để biết thêm thông tin, hãy xem: Apple Codedesigning

Bước 4 : Đóng gói ứng dụng của bạn để tải lên

Tạo tệp IPA cho ứng dụng của bạn (bạn sẽ cần xác định vị trí tệp đó sau).

  1. Từ menu thả xuống xuất hiện, nhấp vào Sản phẩm > Lưu trữ . Chọn kho lưu trữ gần đây nhất, sau đó nhấp vào Phân phối ứng dụng .

  2. Trong cửa sổ xuất hiện, nhấp vào Phát triển > Tiếp theo .

  3. Tùy chọn: Để có bản dựng nhanh hơn, hãy bỏ chọn tùy chọn Rebuild from Bitcode , sau đó nhấp vào Next . Test Lab không yêu cầu làm mỏng hoặc xây dựng lại ứng dụng của bạn để chạy thử nghiệm nên bạn có thể tắt tùy chọn này một cách an toàn.

  4. Nhấp vào Xuất , sau đó nhập thư mục mà bạn muốn tải xuống tệp IPA của ứng dụng.

Bước 5 : Xác minh chữ ký ứng dụng

  1. Xác minh chữ ký ứng dụng bằng cách giải nén tệp .ipa rồi chạy codesign --verify --deep --verbose /path/to/MyApp.app trong đó "MyApp" là tên của ứng dụng bên trong thư mục đã giải nén (khác nhau tùy theo từng dự án ). Đầu ra dự kiến ​​là MyApp.app: valid on disk .

Bước 6 : Chạy thử nghiệm cục bộ

Bạn có thể chạy thử nghiệm cục bộ để kiểm tra hoạt động của nó trước khi chạy thử nghiệm với Test Lab. Để kiểm tra cục bộ, hãy tải ứng dụng trò chơi của bạn trong trình mô phỏng và chạy:

xcrun simctl openurl SIMULATOR_UDID firebase-game-loop://
  • Bạn có thể tìm thấy 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 thử nghiệm 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 tới cờ scenario . Lưu ý rằng bạn chỉ có thể chạy một vòng lặp mỗi lần 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

Bước tiếp theo

Chạy thử nghiệm của bạn bằng bảng điều khiển Firebase hoặc gcloud CLI .