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.
Консольная версия, 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 году: сначала ставил пакет, потом передавал его полное имя.
- Установите пакет. Visual Studio кладёт скрипт
Add-AppDevPackage.ps1в папку пакета с суффиксом_TestвнутриAppPackages: нажмите на него правой кнопкой и выберите Run with PowerShell.
- Найдите
PackageFullName:
Get-AppxPackage -Name "*Greets*"
- Запустите тест с этим именем:
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 советует тестировать на маломощном компьютере.