Конечная цель - я хочу запустить приложение-функцию локально для автоматического тестирования. Я не знаю, как это сделать без использования func.exe
. Вот моя попытка:
/// <summary>
/// Setup environment for running integration tests on MyApp APIs
/// </summary>
/// <param name="testContext"></param>
[ClassInitialize]
public static void RunFileHubLocally(TestContext testContext)
{
// Do the programmatic equivalent of right-click "Debug -> Start new instance" on API.
// This uses Azure Functions Core CLI to deploy the Function App locally.
azureFunctionsCliShell = new Process();
azureFunctionsCliShell.StartInfo.UseShellExecute = false;
azureFunctionsCliShell.StartInfo.RedirectStandardOutput = true;
azureFunctionsCliShell.StartInfo.CreateNoWindow = true;
azureFunctionsCliShell.StartInfo.FileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"..\..\..\lib\azure-functions-core-tools\func.exe"); ;
var fileInTargettedWorkingDirectory = new FileInfo(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"..\..\..\..\..\..\src\MyApp.Api\bin\Debug\netcoreapp2.1\host.json"));
azureFunctionsCliShell.StartInfo.WorkingDirectory = fileInTargettedWorkingDirectory.Directory.FullName;
int port = FreeTcpPort();
azureFunctionsCliShell.StartInfo.Arguments = $"host start --port {port}";
apiUrl = $"http://localhost:{port}/api";
azureFunctionsCliShell.Start();
// Wait for "Application started", the line in the output that indicates the
// application is listening to the port
const string specialPhrase = "Application started";
for ( ; ; )
{
string line = azureFunctionsCliShell.StandardOutput.ReadLine();
Console.WriteLine(line);
if (line.Contains(specialPhrase))
{
break;
}
if (azureFunctionsCliShell.StandardOutput.EndOfStream)
{
throw new Exception($"Output did not contain special phrase '{specialPhrase}'. Last line: '{line}'.");
}
}
// Hold instance of HttpClient to be disposed of during cleanup
httpClient = new HttpClient();
}
Это не с выходом
ваша рабочая среда выполнения не установлена. Начиная с версии 2.0.1-beta.26, требуется настройка рабочего времени. Запустите
func settings add FUNCTIONS_WORKER_RUNTIME <option>
или добавьте FUNCTIONS_WORKER_RUNTIME в свой local.settings.json Доступные параметры: dotnet, node, python, powershell%%%%%% %%%%%% @ %%%%%% @ @@ %%%%%% @@ @@@ %%%%%%%%%%% @@@ @@ %%%%%%%%%% @@ @@ %%%% @@ @@ %%% @@ @@ %% @@ %% %
Основные инструменты функций Azure (2.6.666 хэш фиксации: 2ea98edb55cd2fc249765fcf3f5e30829c7c9932) Версия среды выполнения функции: 2.0.12408.0 Приложение завершает работу ...
Когда я запускаю ту же команду через консоль, она преуспевает с
ваша рабочая среда выполнения не установлена. Начиная с версии 2.0.1-beta.26 требуется настройка рабочего времени. Запустите
func settings add FUNCTIONS_WORKER_RUNTIME <option>
или добавьте FUNCTIONS_WORKER_RUNTIME в свой local.settings.json Доступные параметры: dotnet, node, python, powershell%%%%%% %%%%%% @ %%%%%% @ @@ %%%%%% @@ @@@ %%%%%%%%%%% @@@ @@ %%%%%%%%%% @@ @@ %%%% @@ @@ %%% @@ @@ %% @@ %% %
Основные инструменты функций Azure (2.6.666 хэш фиксации: 2ea98edb55cd2fc249765fcf3f5e30829c7c9932) Версия среды выполнения функции: 2.0.12408.0 [26 апреля 2019 г., 14:29:18] Запуск службы инициализации Rpc. [26.04.2019 14:29:18] Инициализация RpcServer…… Теперь слушаем: http://0.0.0.0:63819 Приложение запущено. Нажмите Ctrl + C, чтобы выключить.
process.StartInfo.FileName
. Вы говорите Когда я запускаю ту же команду через консоль, она выполняется - вы имеете в виду, что вызов func.exe с точно такой же командой работает в командном окне, но не при вызовеProcess.Start
? Вы пробовали вызывать код из консольной программы, а не из теста? - person stuartd   schedule 26.04.2019