Локальное тестирование интеграции функций Azure - PullRequest
0 голосов
/ 25 июня 2019

Я пытаюсь запустить интеграционные тесты для проекта функций 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?

1 Ответ

0 голосов
/ 25 июня 2019

Я получил его на работу сейчас:

private Process process;
private RestClient client;

[OneTimeSetUp]
public void OneTimeSetUp()
{
    //Path to azure cli:
    const string functionHostPath = @"C:\Users\MyName\AppData\Local\AzureFunctionsTools\Releases\2.24.0\cli\func.exe"; 
    //Path to project build location:
    const string functionAppFolder = @"C:\Users\MyName\Source\Repos\ShyftApi\ShyftApi\bin\Debug\netstandard2.0"; 
    int port = 7001;

    process = new Process
    {
        StartInfo =
        {
            FileName = functionHostPath,
            Arguments = $"start -p {port}",
            WorkingDirectory =  functionAppFolder
        }
    };

    bool success = process.Start();
    Assert.AreEqual(true, success);
    client = new RestClient($"http://localhost:{port}/api");
    Thread.Sleep(5000); //Wait for server to initialize
}

[OneTimeTearDown]
public void OneTimeTearDown()
{
    process.CloseMainWindow();
    process.Dispose();
}

[Test]
public void SimpleTest()
{
    RestRequest request = new RestRequest("test", Method.GET);
    IRestResponse response = client.Execute(request);
    Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
}
...