Windows App Certification Kit: запуск appcert.exe из командной строки

В 2016 году я проверял UWP-приложение перед отправкой в Store, и в Windows Server 2016 окно Windows App Certification Kit (WACK) даже не открылось:

The UI workflow of Windows App Certification Kit is not supported on this OS version.

The UI workflow of Windows App Certification Kit is not supported on this OS version.

Консольная версия, appcert.exe, там работает. Тесты у неё те же, а на сборочном сервере всё равно нужна она.

:: Командная строка, запущенная от имени администратора
cd /d "C:\Program Files (x86)\Windows Kits\10\App Certification Kit"

:: В документации Microsoft перед каждым тестом выполняют reset
appcert.exe reset

:: Проверить файл пакета, который не установлен
appcert.exe test -appxpackagepath "C:\build\MyApp_1.0.0.0_x64.msix" ^
    -reportoutputpath "C:\build\report.xml"

Кит ставится вместе с Windows SDK, папка по умолчанию — C:\Program Files (x86)\Windows Kits\10\App Certification Kit\. Все параметры показывает appcert.exe /?.

Проверить установленное приложение по полному имени пакета

Так я делал в 2016 году: сначала ставил пакет, потом передавал его полное имя.

  1. Установите пакет. Visual Studio кладёт скрипт Add-AppDevPackage.ps1 в папку пакета с суффиксом _Test внутри AppPackages: нажмите на него правой кнопкой и выберите Run with PowerShell.

Add-AppDevPackage.ps1 в AppPackages\Greetings_2.2.0.0_Test: Run with PowerShell

  1. Найдите PackageFullName:
Get-AppxPackage -Name "*Greets*"

Вывод Get-AppxPackage: PackageFullName приложения

  1. Запустите тест с этим именем:
appcert.exe reset
appcert.exe test ^
    -packagefullname "1257MixVlad.Greets_2.2.0.0_x64__v53m0nncvwpbt" ^
    -reportoutputpath "C:\build\report.xml"

Я держал это в bat-файле рядом с пакетом:

@echo off
set KIT=C:\Program Files (x86)\Windows Kits\10\App Certification Kit
set PKG=1257MixVlad.Greets_2.2.0.0_x64__v53m0nncvwpbt
set REPORT=%~dp0report.xml

:: Удалить прошлый отчёт: кит может не перезаписать его,
:: а вы не прочитаете старые результаты
del "%REPORT%" 2>nul

"%KIT%\appcert.exe" reset
"%KIT%\appcert.exe" test -packagefullname "%PKG%" -reportoutputpath "%REPORT%"
pause

%~dp0 — папка, где лежит bat-файл, обратный слэш в конце уже есть. Путь к отчёту должен заканчиваться на .xml, иначе кит его не примет.

Для десктопного приложения с установщиком в документации Microsoft такая команда:

appcert.exe test -apptype desktop -appusage peruser ^
    -setuppath "C:\build\setup.exe" ^
    -reportoutputpath "C:\build\report.xml"

Как читать отчёт

У корневого элемента REPORT есть атрибут OVERALL_RESULT: PASS, WARNING или FAIL. Каждый тест — элемент TEST внутри REQUIREMENTS/REQUIREMENT, его результат лежит в RESULT. В PowerShell:

[xml]$report = Get-Content -Raw "C:\build\report.xml"
$report.REPORT.OVERALL_RESULT

# Тесты, которые не прошли
$tests = $report.SelectNodes('/REPORT/REQUIREMENTS/REQUIREMENT/TEST')
foreach ($test in $tests) {
    $result = $test.SelectSingleNode('RESULT')
    if ($result -and $result.InnerText.Trim() -ne 'PASS') {
        '{0}: {1}' -f $test.GetAttribute('NAME'), $result.InnerText.Trim()
    }
}

HTML-копию отчёта с тем же именем кит сохраняет в %LOCALAPPDATA%\Microsoft\AppCertKit\.

На сборочном сервере

  • Запускайте от имени администратора.
  • По документации киту нужен активный сеанс пользователя: служба может запустить его только внутри сеанса вошедшего пользователя, не в Session 0. Если кит падает на сборочном агенте, установленном как служба Windows, запустите агент обычным процессом под вошедшим пользователем. На той же странице сказано, что новые версии кита работают в автотестах и без интерактивного сеанса, так что сначала проверьте свою.
  • Включите режим разработчика в параметрах Windows: он есть в требованиях кита.
  • Пороги тестов производительности рассчитаны на слабый компьютер. Быстрый сервер может пройти тесты, которые слабый ноутбук провалит, поэтому Microsoft советует тестировать на маломощном компьютере.
Консультирую по продукту, собираю MVP и учу делать продукты самостоятельно. Поработать со мной →