获取我们在 Firebase 峰会上发布的所有信息,了解 Firebase 可如何帮助您加快应用开发速度并满怀信心地运行应用。了解详情

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

Có thể khó để tự động hóa thử nghiệm 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. Các bài kiểm tra Game Loop 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ị kiểm tra Vòng lặp trò chơi để chạy bằng Phòng thí nghiệm kiểm tra 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ì?

Kiểm tra Vòng lặp trò chơi mô phỏng hành động của một 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 của bạn một cách nhanh chóng và có thể mở rộng. Vòng lặp là phần chạy qua toàn bộ hoặc một phần quá trình thử nghiệm của bạ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 Phòng thí nghiệm thử nghiệm. 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 với tư cách là người dùng cuối sẽ chơi nó. Bạn có thể viết kịch bản đầu vào của người dùng, để người dùng 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, bạn có thể đặt mộ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 kiểm tra kỹ thuật, chẳng hạn như biên dịch nhiều trình tạo bóng, thực thi chúng và kiểm tra xem đầ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 một loại URL mới.

  3. Trong trường Lược đồ URL , hãy 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 ở bất kỳ đâ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 đị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 bạn định chạy nhiều vòng lặp (hay còn gọi là kịch bản) trong thử nghiệm của mình, bạn phải chỉ định các vòng lặp 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 ủy quyền ứng dụng của bạn, 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
}

Objective-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 trong thử nghiệm của mình, vòng lặp hiện tại được chuyể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ể 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).
}

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

Kết thúc 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 chờ là năm phút, ngay cả khi tất cả các vòng lặp đã được thực hiện. Khi hết thời gian chờ, quá trình kiểm tra kết thúc và hủy mọi vòng đang chờ xử lý. Bạn có thể tăng tốc quá trình kiểm tra của mình 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 là firebase-game-loop-complete trong AppDelegate của ứng dụng của bạn. 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)
}

Objective-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 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 nữa để chạy, quá trình kiểm tra 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 (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 vào nhóm dự án của bạn. Hãy ghi nhớ những điều sau khi thiết lập thử nghiệm 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ả thử nghiệm của bạn cho đến khi tất cả các vòng 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 ghi kết quả đầu ra, hãy đảm bảo bạn thêm chúng vào một tệp kết quả duy nhất 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ừ vòng lặp trước đó.

Để thiết lập thử nghiệm của bạn để viết kết quả thử nghiệm 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 là GameLoopResults .

  2. Từ bất kỳ vị trí 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 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.
      }
    }
    

    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];
        }
    }
    

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

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

  1. Trong Xcode, hãy chọn một cấu hình cấp phép cho ứng dụng đích.

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

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

  4. Tùy chọn: Để có được một bản dựng nhanh hơn, hãy bỏ chọn tùy chọn Tạo lại từ Bitcode , sau đó nhấp vào Tiếp theo . 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.

  5. 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 4 : Chạy thử nghiệm của bạn cục bộ

Bạn có thể chạy thử nghiệm cục bộ để kiểm tra hành vi của nó trước khi chạy nó 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 của mình 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 vào 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 lặp 1, 2 và 5, bạn phải chạy một lệnh riêng biệt 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 .