测试技术之WebAPI的一种单元测试方案
白羽 2019-01-07 来源 :网络 阅读 967 评论 0

摘要:本文将带你了解测试技术WebAPI的一种单元测试方案,希望对大家学测试技术有所帮助。

    本文将带你了解测试技术WebAPI的一种单元测试方案,希望对大家学测试技术有所帮助。




   

  大家是如何对webApi写测试的呢?

  1.利用Fiddler直接做请求,观察response的内容。

  2.利用Httpclient做请求,断言response的内容。

  3.直接调用webApi的action,这种方式的测试跟真实的调用还是有一定差距,不够完美。

  接下来我介绍一种webApi的in-memory调用方法,也能够达到对webApi的测试,并且由于是in-memory调用,效率也比较高,非常适写单元测试。本文参考了In   memory client, host and integration testing of your Web   API   service。

  一、首先写一个OrderController用来做测试用

  public   class OrderController :   ApiController

  {

  // GET   api/order

  public Order Get()

  {

  return   new Order(){Id = 1,Descriptions = "descriptions",Name =   "name"};

  }

  // GET   api/order/5

  public string Get(int id)

  {

  return   "value";

  }

  // POST   api/order

  public Order Post(Order   order)

  {

  return   order;

  }

  // DELETE   api/order/5

  public void Delete(int   id)

  {

  }

  }

   

  二、WebApi的请求过程

  webApi的核心是对消息的管道处理,整个核心是有一系列消息处理器(HttpMessageHandler)首尾连接的双向管道,管道头为HttpServer,管道尾为HttpControllerDispatcher,HttpControllerDispatcher负责对controller的激活和action的执行,然后相应的消息逆向流出管道。

  所以我们可以利用HttpMessageInvoker将一个请求消息HttpRequestMessage发送到管道中,最后收到的消息HttpResponseMessage就代表一个真实的请求响应。

  三、Get请求的测试

  [Test]

  public   void GetTest()

  {

  string   baseAddress =   "//localhost:33203/";

  HttpConfiguration   config = new   HttpConfiguration();

  WebApiConfig.Register(config);

  config.IncludeErrorDetailPolicy   = IncludeErrorDetailPolicy.Always;

  HttpServer server   = new HttpServer(config);

  HttpMessageInvoker   messageInvoker = new   HttpMessageInvoker(server);

  CancellationTokenSource   cts = new   CancellationTokenSource();

  HttpRequestMessage request   = new HttpRequestMessage(HttpMethod.Get, baseAddress +   "api/order");

  using (HttpResponseMessage   response = messageInvoker.SendAsync(request,   cts.Token).Result)

  {

  var   content = response.Content.ReadAsStringAsync().Result;

  var   result =   JsonConvert.DeserializeObject<Order>(content);

  result.Name.Should().Be("name");

  }

  }

   

  四、Post请求的测试

  [Test]

  public   void PostTest()

  {

  string   baseAddress =   "//localhost:33203/";

  HttpConfiguration   config = new   HttpConfiguration();

  WebApiConfig.Register(config);

  config.IncludeErrorDetailPolicy   = IncludeErrorDetailPolicy.Always;

  HttpServer server   = new HttpServer(config);

  HttpMessageInvoker   messageInvoker = new   HttpMessageInvoker(server);

  CancellationTokenSource   cts = new   CancellationTokenSource();

  HttpRequestMessage request   = new HttpRequestMessage(HttpMethod.Post, baseAddress +   "api/order");

  var order = new Order() { Id   = 1, Name = "orderName", Descriptions =   "orderDescriptions" };

  request.Content =   new ObjectContent<Order>(order, new   JsonMediaTypeFormatter());

  using (HttpResponseMessage   response = messageInvoker.SendAsync(request,   cts.Token).Result)

  {

  var   content = JsonConvert.SerializeObject(order, new JsonSerializerSettings() {   ContractResolver = new CamelCasePropertyNamesContractResolver()   });

  response.Content.ReadAsStringAsync().Result.Should().Be(content);

  }

  }

   



                   

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标软件测试之测试技术频道!


本文由 @白羽 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程