Continuous integration Microsoft.AspNet.TestHost.TestServer需要多个核心/处理器?
在一次测试之后,我最近在我的DNX项目中添加了一些集成测试。在本地,这些服务器运行良好(对于内存中的web服务器来说是这样) 但是,在运行时,集成测试会无限期挂起(最终会失败,因为appveyor构建的时间限制为60分钟) 奇怪的是,当运行该程序时,一切都运行良好Continuous integration Microsoft.AspNet.TestHost.TestServer需要多个核心/处理器?,continuous-integration,cpu,dnx,appveyor,Continuous Integration,Cpu,Dnx,Appveyor,在一次测试之后,我最近在我的DNX项目中添加了一些集成测试。在本地,这些服务器运行良好(对于内存中的web服务器来说是这样) 但是,在运行时,集成测试会无限期挂起(最终会失败,因为appveyor构建的时间限制为60分钟) 奇怪的是,当运行该程序时,一切都运行良好 显而易见的结论是,Microsoft.AspNet.TestHost.TestServer可能需要一个以上的内核(或至少一个以上的逻辑处理器)。是否有人对此有任何经验可以确认/拒绝?正如@Tratcher作为评论回复: xUnit支持
显而易见的结论是,Microsoft.AspNet.TestHost.TestServer可能需要一个以上的内核(或至少一个以上的逻辑处理器)。是否有人对此有任何经验可以确认/拒绝?正如@Tratcher作为评论回复: xUnit支持异步,因此使您的测试异步并返回任务(否则xUnit不知道测试结果,甚至在完成运行之前它都会通过): 既然您的测试是异步的,那么您可以使用wait,而不是对任务调用.Result(这就是导致问题的原因):
另外,值得注意的是为什么会发生这种情况。仅供参考:Katana是DNX应用程序的前身。您使用的是DNX/ASP.NET5,而不是Katana。共享测试代码可能会有所帮助。感谢Tratcher-编辑此帖子以删除Katana。测试代码是-这是一个开源项目,因此测试的代码也在该repo中。啊,这是
。结果
>这会让你崩溃,它会挂断你唯一核心上的线程,使其他线程无法执行。将测试切换到公共异步任务,并使用等待。真棒@Tratcher-这就成功了!谢谢。单核不能处理多线程(多线程早于多核体系结构)有点奇怪但我想我需要多读一些关于异步的书才能理解这一点。无论如何,谢谢你的帮助!
[Fact]
public async Task Get_hello_should_ignore_bob()
{
// Given a sample client
var client = SampleClient();
// When I call POST /account/signin
var value = new StringContent("");
var response = await client.PostAsync("/account/signin", value);
// Then the result should be Hello
string result = await response.Content.ReadAsStringAsync();
result.Should().Be("\"Hello\"");
}