.netcore持续集成测试篇之测试方法改造 (2)

这里我们把controller的名称加到HttpClient的BaseUrl里面,然后发送get,post等请求的时候只要Action的名字,这里我们使用nameof关键字来获取action的名字,使用nameof关键字来获取的好处是:第一,我们点击方法名就可以快速定位到指定的方法.更为重要的是如果方法的名称改了,编译的时候就会出现编译错误,我们可以快速定位到错误然后修改.

改进三:资源路径改为相对路径

上面MyTestServerFixtrue类中的代码有一处有明显问题:那就是UseContentRoot里的路径是写死的,项目在本机上地址与在服务器上的或者与其它同事的绝大多数情况下是不一样的(因为大家项目所在的目录名不相同)这时候如果其它人调用这些代码就可能会出现错误.

我们可以使用相对路径来获取绝对路来解决这个问题,由于这两个项目的主文件夹在同一文件夹下面,因此测试项目向外退若干层就能够得到mvc项目的主目录了.

我们将MyTestServerFixtrue类的构造方法改为如下:

public MyTestServerFixtrue() { var rootPath = GetContentRootDir(); var builder = new WebHostBuilder() .UseContentRoot(rootPath) .UseEnvironment("Development") .UseStartup<CoreMvc.Startup>(); _server = new TestServer(builder); _client = _server.CreateClient(); }

这次我们不是再写死rootPath而是通过方法GetContentRootDir来获取.
下面我们来看这个GetContentRootDir方法

private string GetContentRootDir() { var currentPath = AppDomain.CurrentDomain.BaseDirectory; var relativePath = @"..\..\..\..\CoreMvc"; var combinedPath = Path.Combine(currentPath, relativePath); var absPath = Path.GetFullPath(combinedPath); return absPath; }

首先我们先获取当前程序域的目录,也就是程序的运行目录,获取到它之后我们看看向上移动多少层能够到达包含mvc项目和这个test项目的文件夹,经查是四层,下面的相对路径我们就写为如变量relativePath定义的那样.
我们把它们组合在一起,然后通过Path.GetFullPath来获取到相对路径的绝路径.

改进四 设置超时

有时候服务器故障会导致请求非常慢,服务器很长时间无法返回请求,这就会导致集成测试代码一直'卡'着无法完成,这时候可以设置一个超时.设置非常简单,HttpClient有一个Timeout属性,设置相应的超时时间即可.HttpClient的默认请求超时时间是100s,这个值应该大部分时候不需要修改的,但是关于具体的业务,可能有一些方法本身执行时间特别长(业务逻辑非常复杂,sql语句非常复杂等)这时候可以单元给本次请求设置一个超时时间.比如说是150s,设置如下

CancellationTokenSource cts = new CancellationTokenSource(TimeSpan.FromSeconds(150)); var response = await client.GetAsync("/Home/index", cts.Token);

这里定义一个CancellationTokenSource对象,并指定超时时间,然后把此对象的Token对象传给异步请求方法.

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wssdyp.html