Почему мой модульный тест работает в Visual Studio 2010, а не в Jenkins? - PullRequest
3 голосов
/ 29 февраля 2012

У меня есть модульный тест, который работает с Microsoft Excel , используя сборку взаимодействия от Microsoft. При выполнении модульного теста из Visual Studio все нормально и тест проходит. Когда я запускаю один и тот же тест на той же машине с использованием Jenkins, тест не пройден.

О тесте: По сути, он просто создает новую таблицу данных Excel, немного ее манипулирует, а затем сохраняет в файле Excel. Я знаю, что есть много проблем с interop и excel, но поскольку тест работает в Visual Studio, это больше касается различий с Jenkins. Тест называется «Пакетная команда Windows» со следующим кодом:

echo Executing Unit Tests...
del /f/q results.trx 
call "%MSTEST%\mstest.exe" /testcontainer:"%WORKSPACE%\xxx.Test\bin\Debug\xxx.Test.dll" /testsettings:Local.Testsettings /resultsfile:results.trx

Следующая строка, которая сохраняет рабочую книгу Excel в файл (который еще не существует):

excelWorkbook.SaveAs(destFilePath, Excel.XlFileFormat.xlWorkbookNormal, Missing.Value, Missing.Value, false, false, Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);

Получено исключение:

System.Runtime.InteropServices.COMException: Exception from HRESULT: 0x800A03EC

Об установке Jenkins: На машине (с Windows 7), на которой я установил Jenkins, также установлена ​​полная версия Visual Studio, используемая для сравнения, и, конечно, Microsoft Office Excel. Я ожидал неприятностей, связанных с тем, что при запуске с Jenkins тест не может должным образом взаимодействовать с рабочим столом, , как того требует Excel согласно Microsoft . Я настроил службу Jenkins для тестирования следующими способами.

  • Стандартный способ, как услуга
  • Как служба, с поддержкой рабочего стола
  • Как администратор (то же, что я вошел в систему при использовании Visual Studio)

Ни один из этих 3 вариантов не работал. РЕДАКТИРОВАТЬ: По malenkiy_scot, я узнал, что запуск его явно, как вошел в систему пользователя, это работает. Таким образом, вопрос теперь: В чем разница любого из вышеперечисленных вариантов с этим способом?

Кто-нибудь принёс это на работу? В чем разница между Visual Studio и Jenkins при выполнении этого теста?

Спасибо за подсказки!

Ответы [ 2 ]

1 голос
/ 29 февраля 2012

Как я отметил в комментарии, вы можете создать ведомый экземпляр (даже на той же машине), который будет работать как обычный пользователь на переднем плане.Свяжите задания, которые не будут выполняться в экземпляре службы, с этим ведомым.

0 голосов
/ 26 марта 2012

Дважды проверьте, что учетная запись пользователя, под которой работает Jenkins, может взаимодействовать с рабочим столом.

Т.е. запустите services.msc, выберите службу Jenkins, откройте свойства, переключитесь на «Вход в систему».и убедитесь, что установлен флажок «Разрешить службе взаимодействовать с рабочим столом».

Как правило, вы захотите сделать это, если есть какой-либо вид диалогового окна, которое появляется, когда что-то выполняется в вашем тесте (даже еслине требует ввода каких-либо данных).

...