当前位置: 首页 > 知识库问答 >
问题:

以编程方式启动函数App失败,没有描述性输出

都乐逸
2023-03-14

最终目标是我想在本地运行一个功能应用程序进行自动化测试。我不知道如何在不使用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β。26需要工作运行时设置。请运行<code>函数设置添加函数_WORKER_RUNTIME

              %%%%%%
             %%%%%%
        @   %%%%%%    @
      @@   %%%%%%      @@
   @@@    %%%%%%%%%%%    @@@
 @@      %%%%%%%%%%        @@
   @@         %%%%       @@
     @@      %%%       @@
       @@    %%      @@
            %%
            %

Azure Functions核心工具(2.6.666提交哈希:2ea98edb55cd2fc249765fcf3f5e30829c7c9932)函数运行时版本:2.0.12408.0应用程序正在关闭...

当我通过控制台运行相同的命令时,它会成功

未设置工作运行时。自2.0.1β。26需要工作运行时设置。请运行<code>函数设置添加函数_WORKER_RUNTIME

              %%%%%%
             %%%%%%
        @   %%%%%%    @
      @@   %%%%%%      @@
   @@@    %%%%%%%%%%%    @@@
 @@      %%%%%%%%%%        @@
   @@         %%%%       @@
     @@      %%%       @@
       @@    %%      @@
            %%
            %

Azure Functions核心工具(2.6.666提交哈希:2ea98edb55cd2fc249765fcf3f5e30829c7c9932)函数运行时版本:2.0.12408.0[4/26/2019 2:29:18 PM]启动Rpc初始化服务。[4/26/2019 2:29:18 PM]初始化RpcServer......现在收听:http://0.0.0.0:63819应用程序启动。按Ctrl C关闭。

共有1个答案

冀啸
2023-03-14

funcCLI本身就是Azure Functions运行时的包装器。

您可以选择docker路由,而不是围绕funcCLI编写另一个包装器,该路由与在Azure本身上运行它一样接近。

使用docker,您将大大简化整个CI管道,因为大多数CI服务器都支持使用容器运行工作流。

此外,如果你愿意,你也可以将这些容器部署到Azure,但请注意,Linux还不支持消费计划,因此你必须使用Linux应用服务计划。

 类似资料:
  • 问题内容: 我直接使用默认的os拨号器通过以下方式创建呼叫: 是否可以直接从我的应用程序启动Skype? 我尝试传递一个数字,如下所示: 传递数字失败。 问题答案: 您需要知道Skype软件包名称(例如com.skype.android),然后才能启动它:

  • 问题内容: 请看下面的代码 数据库连接器 数据库UI 在这种情况下,我需要通过右键单击 _数据库节点 启动服务器_来手动启动derby(我正在使用NetBeans)。这是一个嵌入式数据库,这意味着我要将其从一台计算机转移到另一台计算机,并愿意通过双击jar文件来开始,而不是在每台计算机上都配置数据库并手动启动它们。但是,如果我没有手动启动数据库,则会收到错误消息 java.sql.SQLNonTr

  • 请看一下下面的代码 数据库连接器。JAVA 用户界面 在这种情况下,我需要通过右键单击数据库节点手动启动derby(我使用的是NetBeans) JAVAsql。SQLNonTransientConnectionException:java。网ConnectException:连接到端口1527上的服务器本地主机时出错,消息“连接被拒绝:连接”。 无论是在NetBeans内部,如果我没有手动启动它

  • 问题内容: 我正在用Java编写服务器-客户端应用程序的代码,我需要在服务器端实现本地数据库,因此我决定使用H2数据库引擎。 要添加的另一件事是,我使用TCP连接来启动和运行数据库。到目前为止,这是我整理的内容: 连接字符串在哪里。 这段代码返回一个异常: 我关注了这篇文章。 问题答案: 这样的事情应该工作 并且输出是已建立的连接:H2 / STACKOVERFLOW 已通过h2-1.4.184测

  • 我们有一个带有Spring MVC的现有REST API版本。我们现在正在飙升,看看我们是否可以使用Swagger(快速)生成内部文档。 我们的 REST 实现的问题在于,我们确实使用 Spring MVC 将业务对象转换为 json,但是我们有自定义的 json 转换器,它们基本上从业务对象创建 Jettison json 对象(键/值)。不幸的是,目前没有办法改变这一点。顺便说一句,输入也是如

  • 我有一个按钮,有两种状态,开始和停止。在使用对讲的可访问性模式下,当用户双击按钮时,我会将按钮的文本更改为停止,因此我必须以某种方式对对讲说这发生了。我通过以下操作成功地将焦点移除并读取到按钮: 这样做的问题是,TalkBack只会读取内容描述,而不会说“双击激活”,当您手动选择按钮时,会阅读该内容。 以下操作无效: button.sendAccessibilityEventAccessibili