#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:
- How to write a performance test that will show memory and CPU usage of some UI tests?
- (Optional) Why when I run the test in Debug mode, it shows that 2 processes are running (
ExampleUITests
— the target for UI tests, andExample
— the main target). Is it normal and when I measure the memory consumption, am I supposed to get the consumption of the main targetExample
, right?