XCTest не измеряет процессор и память

#ios #iphone #performance-testing #xctest

Вопрос:

У меня есть этот тест производительности, чтобы проверить использование памяти во время прокрутки.

 func testMemotyUsage() {
    let app = XCUIApplication()
    let measureOptions = XCTMeasureOptions()
    measureOptions.invocationOptions = [.manuallyStop]

    measure(
      metrics: [XCTMemoryMetric(application: app)],
      options: measureOptions
    ) {
      app.buttons["Listing Page"].tap()

      swipeUp()

      stopMeasuring()

      tapBack()
    }
  }

func tapBack() {
    app.navigationBars.buttons.element(boundBy: 0).tap()
  }

func swipeUp() {
    collectionView.swipeUp(velocity: .fast)
  }

func swipeDown() {
    collectionView.swipeDown(velocity: .fast)
  }

var collectionView: XCUIElement {
    app.collectionViews["collectionViewId"]
  }
 

Но когда я запускаю тест, он вообще не отображает никаких показателей.

введите описание изображения здесь

Я попытался обновить XCTMemoryMetric(application: app) -> до XCTMemoryMetric()

В этом случае он, по крайней мере, показывает некоторый результат, но результат неверен, потому что, как видно на скриншоте ниже, приложение потребляет около 130 МБ памяти, но тест показывает только 9 КБ. Кстати, реальное потребление памяти составляет около 130-150 МБ, потому что в представлении коллекции много изображений.

введите описание изображения здесь
введите описание изображения здесь

My guess that it doesn’t show the correct result, because the app is not passed as a parameter. Although when I pass the app , it doesn’t show any results at all 🙃

Same issue happens when I write the test to check CPU usage with XCTCPUMetric .

Questions:

  1. How to write a performance test that will show memory and CPU usage of some UI tests?
  2. (Optional) Why when I run the test in Debug mode, it shows that 2 processes are running ( ExampleUITests — the target for UI tests, and Example — the main target). Is it normal and when I measure the memory consumption, am I supposed to get the consumption of the main target Example , right?