测试利器之Mock server

发表于:2019-9-05 20:37

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Py    来源:搜狗测试

#
Mock
#
server
#
Server
分享:
  今天要和大家分享的是Mock server相关的知识,一大波知识来袭,请做好准备~
  什么是Mock server?
  Mock测试:就是在测试过程中,对于某些不容易构造或者 不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。
  Mock对象:使用Mock Object进行测试,主要是用来模拟那些在应用中不容易构造(如HttpServletRequest必须在Servlet容器中才能构造出来)或者比较复杂的对象(如JDBC中的ResultSet对象)从而使测试顺利进行的工具。
  为什么要用Mock?
  Mock本意就是模拟或者效仿。我们可以把Mock理解为一个替身,在软件开发领域,通常就是指模拟对象。
  Mock是为了解决不同的单元之间由于耦合而难于开发、测试的问题。所以Mock既能出现在单元测试中,也会出现在集成测试、系统测试过程中。
  如何选择Mlock server?
  EasyMock 是一套用于通过简单的方法对于给定的接口生成 Mock 对象的类库。它提供对接口的模拟,能够通过录制、回放、检查三步来完成大体的测试过程,可以验证方法的调用种类、次数、顺序,可以令 Mock 对象返回指定的值或抛出指定异常。通过 EasyMock,我们可以方便的构造 Mock 对象从而使单元测试顺利进行。
  JMock是一个使用模拟对象机制测试Java代码的开发包。模拟对象(Mock Object)可以取代真实对象的位置,用于测试一些与真实对象进行交互或依赖于真实对象的功能,模拟对象的背后目的就是创建一个轻量级的、可控制的对象来代替测试中需要的真实对象,模拟真实对象的行为和功能,方便我们的测试。JMock就是这种机制的实现,使用JMock我们可以快速创建模拟对象,定义交互过程中的约束条件等,同时JMock也是易扩展的,你可以很方便添加自定义的需求。
  Mockito 无需准备昂贵的前期启动。他们的目标是透明的,让开发人员专注于测试选定的行为。Mockito 拥有的非常少的 API,所有开始使用 Mockito,几乎没有时间成本。因为只有一种创造 mock 的方式。只要记住,在执行前 stub,而后在交互中验证。你很快就会发现这样 TDD java 代码是多么自然。
  为什么用Moco?
    Mock本意就是模拟或者效仿。我们可以把Mock理解为一个替身,在软件开发领域,通常就是指模拟对象。
  Mock是为了解决不同的单元之间由于耦合而难于开发、测试的问题。所以Mock既能出现在单元测试中,也会出现在集成测试、系统测试过程中。
  如何选择Mlock server?
  EasyMock 是一套用于通过简单的方法对于给定的接口生成 Mock 对象的类库。它提供对接口的模拟,能够通过录制、回放、检查三步来完成大体的测试过程,可以验证方法的调用种类、次数、顺序,可以令 Mock 对象返回指定的值或抛出指定异常。通过 EasyMock,我们可以方便的构造 Mock 对象从而使单元测试顺利进行。
  JMock是一个使用模拟对象机制测试Java代码的开发包。模拟对象(Mock Object)可以取代真实对象的位置,用于测试一些与真实对象进行交互或依赖于真实对象的功能,模拟对象的背后目的就是创建一个轻量级的、可控制的对象来代替测试中需要的真实对象,模拟真实对象的行为和功能,方便我们的测试。JMock就是这种机制的实现,使用JMock我们可以快速创建模拟对象,定义交互过程中的约束条件等,同时JMock也是易扩展的,你可以很方便添加自定义的需求。
  Mockito 无需准备昂贵的前期启动。他们的目标是透明的,让开发人员专注于测试选定的行为。Mockito 拥有的非常少的 API,所有开始使用 Mockito,几乎没有时间成本。因为只有一种创造 mock 的方式。只要记住,在执行前 stub,而后在交互中验证。你很快就会发现这样 TDD java 代码是多么自然。
  为什么用Moco?
  满足大多数应用场景
  简单高效,采用Stub code的方式
  支持http REST Socket等协议,支持API和独立运行两种方式,可以植入单元测试中
  代码开源(https://github.com/dreamhead/moco)
  支持Maven scala shell Gradle等集成
  使用过程中遇到的问题?
  Post类型请求,转发到Moco server 后返回400状态码
  【解决方案】Post请求response返回格式有json格式、forms格式,PC商城需要用forms格式。
  Moco 接收C端请求时,匹配reqeust 参数,为全匹配,如果不写则不会匹配参数 ?
  【使用场景】
  当接口请求中带有时间戳时,如图所示:
  配置Moco时,需要将这个参数在配置文件中去掉即可,如图所示:
  Moco server配置文件match uri字段无法正确匹配
  【解决方案】可以使用contain 关键字进行代替使用match 参数
  页面返回文件为XML, 直接访问地址返回一下错误,如图所示:
  【问题分析】
  通过Fiddler抓包查看请求,Moco Server已经返回了对应的XML文件,但是浏览器还是依然报错,如图所示:
  【问题根源】
  返回的文件就是一个文本,未指定其格式,所以会提示上述错误,服务器给出提示,如图所示:
  【解决方案】
  指定返回文件的格式即可,如图所示:
  Moco使用方法传送门
  Mock Server就写到这里了,下面是关于Moco的详细用法和详细Api使用,请大家笑纳~~!

      上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号