VSTS - Тестовая запись файлов пуста
Для экспертов VSTS (или TFS) среди нас...
У меня проблема с записью файлов, созданных с помощью Microsoft Expression Encoder SDK. Небольшое описание контекста:
Мы работаем в среде VSTS с настроенным определением сборки и несколькими определениями выпуска. Этот поток работает правильно. Регистрация завершена, сборки запускаются и заканчиваются, релизы запускаются и заканчиваются, вплоть до последнего выпуска, где тесты пользовательского интерфейса запускаются и заканчиваются с правильным результатом. Мы работаем с агентом сборки и отдельным тестовым агентом (обе ОС Windows 10), которые находятся в одном домене и могут без проблем подключаться друг к другу.
Я пытаюсь включить записи в тестовый сценарий. Я установил Microsoft Expression Encoder SP 2 на свой ноутбук (который также выполняет функции агента сборки) и на агент тестирования. На обеих системах я могу делать записи вручную без проблем. При выполнении теста, выполняемого локально (из самой Visual Studio), запись создается соответствующим образом.
Теперь проблема: когда тестовый агент запускает тестовые прогоны, создаются файлы записи, но все они заканчиваются как файлы размером 4,93 КБ без какого-либо содержимого. Я могу открыть их, но у них есть 0:00 времени выполнения. В журналах сборки или в окне просмотра событий ошибок нет: все, что я получаю, это пустые файлы.
Некоторые соответствующие коды для фона:
[SetUp]
public void Initialize()
{
testName = TestContext.CurrentContext.Test.Name;
var path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + @"\Recordings";
Directory.CreateDirectory(path);
recorder = new ScreenCaptureJob
{
OutputScreenCaptureFileName = path + @"\" + testName + @".xesc",
CaptureRectangle = new Rectangle(0, 0, 1024, 768),
ShowFlashingBoundary = false,
CaptureMouseCursor = false,
CaptureFollowCursor = false,
CaptureLargeMouseCursor = false,
CaptureLayeredWindow = false,
ShowCountdown = false
};
Logger.Logger.Log(recorder.OutputScreenCaptureFileName);
if (File.Exists(recorder.OutputScreenCaptureFileName))
{
File.Delete(recorder.OutputScreenCaptureFileName);
}
recorder.Start();
/* Navigation to baseUrl */
Driver.Navigate().GoToUrl(startUrl);
WaitForUrl(startUrl);
recorder.Stop();
}
Кто-нибудь имеет представление о том, что (отсутствие) магия вызывает эту проблему? Если для анализа потребуется больше информации, я буду рад предоставить ее.
Заранее спасибо!
-EDIT- В ответ на Wouter: я должен заметить, что агент сборки использует учетную запись администратора тест-агента для входа в систему, поэтому разрешения не должны (вероятно?) Быть проблемой.
-EDIT 2- Я добавил некоторые записи для всего процесса, и это показывает кое-что интересное:
2017-12-14 10: 51: 29.322 C: \ TestDrop * censored * \ drop \ bin \ Debug \ Recordings_LoadHomePage_ClickMenuQuestions_NavigatedToJobs.xesc
2017-12-14 10:51:29.322 posX : 0
2017-12-14 10:51:29.337 posY : 0
2017-12-14 10:51:29.337 width : 1024
2017-12-14 10:51:29.337 height: 768
2017-12-14 10:51:29.353 Size before starting: 0
2017-12-14 10:51:29.353 Status before starting: NotStarted
2017-12-14 10:51:29.353 Duration before starting: 00:00:00
2017-12-14 10:51:29.369 Framecount before starting: 0
2017-12-14 10:51:29.400 Size started : 0
2017-12-14 10:51:29.415 Status started : Running
2017-12-14 10:51:29.415 Duration started : 00:00:00.0111608
2017-12-14 10:51:29.415 Framecount started : 1
2017-12-14 10:51:44.315 Size close to ending: 0
2017-12-14 10:51:44.320 Status close to ending: Running
2017-12-14 10:51:44.324 Duration close to ending: 00:00:14.9117567
2017-12-14 10:51:44.332 Framecount close to ending: 190
2017-12-14 10:51:44.344 Size stopped : 0
2017-12-14 10:51:44.349 Status stopped : NotStarted
2017-12-14 10:51:44.354 Duration stopped : 00:00:00
2017-12-14 10:51:44.359 Framecount stopped : 0
Видимо, запись на самом деле запущена. Прямо перед Recorder.stop(), framecount равен 190, но размер файла остается 0. При локальном запуске теста я получаю следующее:
2017-12-14 10:48:31.861 posX : 0
2017-12-14 10:48:31.867 posY : 0
2017-12-14 10:48:31.872 width : 1024
2017-12-14 10:48:31.877 height: 768
2017-12-14 10:48:31.882 Size before starting: 0
2017-12-14 10:48:31.888 Status before starting: NotStarted
2017-12-14 10:48:31.893 Duration before starting: 00:00:00
2017-12-14 10:48:31.898 Framecount before starting: 0
2017-12-14 10:48:31.948 Size started : 0
2017-12-14 10:48:31.952 Status started : Running
2017-12-14 10:48:31.956 Duration started : 00:00:00.0090997
2017-12-14 10:48:31.963 Framecount started : 0
2017-12-14 10:48:53.630 Size close to ending: 9998272
2017-12-14 10:48:53.634 Status close to ending: Running
2017-12-14 10:48:53.640 Duration close to ending: 00:00:21.6936283
2017-12-14 10:48:53.647 Framecount close to ending: 322
2017-12-14 10:48:53.669 Size stopped : 0
2017-12-14 10:48:53.675 Status stopped : NotStarted
2017-12-14 10:48:53.681 Duration stopped : 00:00:00
2017-12-14 10:48:53.685 Framecount stopped : 0
Единственная разница здесь - размер файла, который равен 9998272 непосредственно перед концом. Я предполагаю, что это действительно указывает на проблему с разрешениями, хотя я все еще озадачен тем, почему видео может быть создано, но не записано...
1 ответ
Обходной путь был найден. Поскольку сам Expression Encoder отлично работает на Test-Agent, я написал небольшое приложение, которое запускается на самом Test-Agent и прослушивает вызовы от других устройств в сети. При получении простых команд, таких как "запуск" или "остановка", приложение использует Expression Encoder SDK локально (например, в Test-Agent) для запуска или остановки записи. Поскольку приложение запускается локально, любые возможные проблемы с разрешениями предотвращаются. В конце концов, мы преобразуем приложение в службу Windows, чтобы упростить его использование.
Хотя технически это не решение проблемы, по крайней мере, у нас есть кое-что, с чем мы можем работать. Спасибо всем за ваши ответы!
РЕДАКТИРОВАТЬ: Работая с упомянутым решением, мы обнаружили, что является реальной проблемой: процесс записи не нашел места в интерактивном сеансе. Он работал как служба Windows, поэтому не было реального экрана для записи.
Видимо VSTS имеет простое решение для этого. Задача "Развертывание агента Visual Studio Test" на самом деле имеет флажок, который буквально называется "Запуск тестов пользовательского интерфейса". По какой-то причине я пропустил это раньше, я думаю, что в TFS2015 он назывался "Запустить как интерактивный сеанс".
Проверьте эту кнопку, и (в моем случае) Expression Encoder не имеет проблем с сохранением записей.