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

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

Giới thiệu về các bài kiểm thử Vòng lặp trò chơi

Bài kiểm thử Vòng lặp trò chơi là gì?

Bài kiểm thử 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 để 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ó khả năng mở rộng. Vòng lặp là một lần chạy toàn bộ hoặc một phần bài kiểm thử trên ứng dụng trò chơi. Bạn có thể chạy bài 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ể sử dụng các bài kiểm thử Vòng lặp trò chơi để:

  • Chạy trò chơi như cách người dùng cuối chơi. Bạn có thể viết tập lệnh cho thao tác nhập của người dùng, để người dùng ở trạng thái rảnh hoặc thay thế người dùng bằng một AI (ví dụ: nếu bạn triển khai AI trong một trò chơi đua xe, bạn có thể giao cho một trình điều khiển AI chịu trách nhiệm về thao tác nhập 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ợ trò chơi.
  • Chạy một bài kiểm thử kỹ thuật, chẳng hạn như biên dịch nhiều trình đổ bóng, thực thi các trình đổ bóng đó và kiểm tra để đảm bảo rằng kết quả đầu ra đúng như dự kiến.

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

  1. Trong Xcode, hãy chọn một mục tiêu dự án.

  2. Nhấp vào thẻ Info (Thông tin), sau đó thêm một URL type (Loại URL) mới.

  3. Trong trường URL Schemes (Lược đồ URL), hãy nhập firebase-game-loop. Bạn cũng có thể đăng ký lược đồ URL tuỳ chỉnh bằng cách thêm lược đồ này vào tệp cấu hình của dự án ở bất kỳ vị trí nào trong thẻ <dict> tag:Info.plist

    <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 bài kiểm thử bằng Test Lab.

Bước 2: Định cấu hình ứng dụng (không bắt buộc)

Chạy nhiều vòng lặp

Nếu dự định chạy nhiều vòng lặp (còn gọi là tình huống) trong bài kiểm thử, bạn phải chỉ định những vòng lặp mà bạn muốn chạy trong ứng dụng khi khởi chạy.

Trong đại biểu ứ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 &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 bài kiểm thử, vòng lặp hiện tại sẽ được truyền dưới dạng a tham số đến 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 dùng để tìm nạp lược đồ 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).
        }
    }
}

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

Theo mặc định, bài kiểm thử 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 đạt đến thời gian chờ, bài 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 bài kiểm thử hoặc kết thúc sớm bằng cách gọi lược đồ URL tuỳ chỉnh firebase-game-loop-complete trong AppDelegate của ứng dụng.Test Lab 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) {}];
}

Bài kiểm thử 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, bài 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 bài 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 bài 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 bài kiểm thử kết thúc, Test Lab di chuyển tất cả các tệp từ thư mục GameLoopResults sang nhóm của dự án. Hãy lưu ý những điều sau khi thiết lập bài kiểm thử:

  • 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 hoặc số lượng.

  • Test Lab không xử lý kết quả kiểm thử cho đến khi tất cả các vòng lặp trong bài kiểm thử của bạn chạy xong. Vì vậy, nếu bài kiểm thử của bạn có nhiều vòng lặp ghi kết quả đầu ra, hãy đảm bảo bạn 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 bài kiểm thử để ghi kết quả kiểm thử tuỳ 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ã của ứng dụng (ví dụ: đại biểu ứ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];
        }
    }
    

Bước 3: Ký ứng dụng

  1. Đảm bảo rằng tất cả các cấu phần phần mề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ác chế độ cài đặt ký như hồ sơ cung cấp và danh tính. Để biết thêm thông tin, hãy xem: Ký mã của Apple

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

Tạo tệp IPA cho ứng dụng (bạn sẽ cần tìm tệp này sau).

  1. Trên trình đơn thả xuống xuất hiện, hãy nhấp vào Product > Archive (Sản phẩm > Lưu trữ). Chọn bản lưu trữ gần đây nhất, sau đó nhấp vào Distribute App (Phân phối ứng dụng).

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

  3. Nhấp vào Export, sau đó nhập một 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, sau đó 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 (thay đổi cho từng dự án). Kết quả đầu ra dự kiến là MyApp.app: valid on disk.

Bước 6: Chạy bài kiểm thử cục bộ

Bạn có thể chạy bài kiểm thử cục bộ để kiểm tra hành vi của bài kiểm thử trước khi chạy bằng Test Lab. Để kiểm thử cục bộ, hãy tải ứng dụng trò chơi của bạn trong một 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 bài kiểm thử của bạn chứa 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 bài kiểm thử 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 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

Các bước tiếp theo

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