Я пытаюсь запустить интеграционные тесты для проекта функций Azure локально.Мой метод - запустить сервер Azure программно, используя процесс.По какой-то причине это не работает.
Вот как я настраиваю процесс:
private Process process;
private RestClient client;
[OneTimeSetUp]
public void OneTimeSetUp()
{
const string dotnetExePath = @"C:\Program Files\dotnet\dotnet.exe";
const string functionHostPath = @"C:\Users\MyName\AppData\Local\AzureFunctionsTools\Releases\2.24.0\cli\func.dll";
const string functionAppFolder = @"C:\Users\MyName\Source\Repos\ShyftApi\ShyftApi\bin\Debug\netstandard2.0";
process = new Process
{
StartInfo =
{
FileName = dotnetExePath,
Arguments = $"\"{functionHostPath}\" start -p {7001}",
WorkingDirectory = functionAppFolder
}
};
bool success = process.Start();
Assert.AreEqual(true, success);
client = new RestClient($"http://localhost:{7001}/api");
Thread.Sleep(8000);
}
OneTimeSetup
успешно завершается без ошибок, поэтому я предполагаю, что процесс запущен правильно (но я вижу,нет лазурной оболочки, странно?)
Я запускаю простой http-вызов (используя restsharp):
[Test]
public void SimpleTest()
{
RestRequest request = new RestRequest("/test", Method.POST);
IRestResponse response = client.Execute(request);
Assert.AreEqual(200, response.StatusCode);
}
Это функция лазури, которую я пытаюсь проверить:
[FunctionName("test")]
public static IActionResult Test([HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = null)]HttpRequest req, TraceWriter log)
{
return new OkObjectResult("ok");
}
Тест не пройден, потому что response.StatusCode
равен 0, поэтому я предполагаю, что сервер не работает.
Я следовал формату, используемому в https://blog.kloud.com.au/2018/11/08/integration-testing-precompiled-v2-azure-functions/ для аргументов процесса.Я вручную проверил, что пути правильные (но процесс начинается успешно, поэтому я не думаю, что пути являются проблемой?).
Конечная точка, к которой я пытаюсь попасть, - http://localhost:7071/api/test
, и когда я запускаю сервер Azure Regurarly (F5) и обращаюсь к нему через мой браузер, я получаю 200 ok.
Что, по вашему мнению, можетбыть проблемой?Начальные аргументы процесса или я просто использую неправильный URL?