yapi中的高级mock--期望

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了yapi中的高级mock--期望相关的知识,希望对你有一定的参考价值。

参考技术A 测试时,经常需要根据不同的请求参数和IP返回不同的HTTP 状态码、HTTP头、JSON数据等。期望就是根据设置的请求过滤规则返回期望数据。

首先选中一个接口,点击“高级Mock”,再点击“添加期望”,可以看到类似下图的弹出窗口。

所填写的信息分为两部分:基本信息,响应。

此处可以添加IP过滤规则和参数过滤规则。

上图中我们添加参数过滤规则:sgid,26。意味着访问mock接口时,url参数中必须有sgid=26(也可以有其它参数),才会返回该期望的响应值。比如:

如上图所示,响应中有很多选项可以设置。

按上图添加的响应,我们在浏览器中看到的返回值如下:

关于占位符,可以参看 《yapi中使用json-schema mock数据》 中的"3. 基于mockjs占位符的mock"。

模板是生成数据的规范,mockjs中的模板定义及模板形式可以 点击这里查看 。期望中并不支持所有的模板形式,比如属性值是Function的形式就不支持。个别模板的形式略有不同,比如正则。

下面介绍两种平时比较常用到模板。

从属性值 array 中随机选取 1 个元素,作为最终值。

从属性值 array 中顺序选取 1 个元素,作为最终值。

通过重复属性值 array 生成一个新数组,重复次数大于等于 min,小于等于 max。

通过重复属性值 array 生成一个新数组,重复次数为 count。

例:

该模板生成包含4个元素的数组,每个元素中的name,顺序取名字列表中的一项,age取10~20的整数,fruit随机取水果列表中的一项。生成数剧类似:

注意对比"|1”与“|+1”的区别。个人感觉"|1"也可以考虑用占位符@pick实现。

根据正则表达式反向生成可以匹配它的字符串。

例:

该模板随机生成包含2-6条json形式的订单数据。数据中的订单号,手机号由正则生成。生成数据类似:

注意:正则中不支持诸如\d, \w, \S等写法。

Jmockit之mock特性详解

本文是Jmockit学习过程中,根据官网所列的工具特性进行解读。

1、调用次数约束(Invocation count constraints)

可以通过调用计数约束来指定预期和/或允许匹配给定期望的调用数。

2、记录严格期望(Recording strict expectations)

一般记录在“new Expectations(){...}”块中的期望是比较常规的。 这意味着他们指定的调用预计在重播阶段至少会发生一次; 而且它们可能会发生不止一次,并且以与其他记录的期望不同的顺序发生; 另外,与任何记录的期望不匹配的调用也同样允许以任何数量和任何顺序发生。但是如果没有调用与给定的记录期望匹配,则在测试结束时抛出“Missing invocation”错误,从而导致测试失败,抛出异常类似如下信息:

技术分享

 

严格期望:当记录以后,仅允许在重放期间完全匹配记录(在明确指定的配额内,在需要时)进行调用,匹配调用数(默认情况下只有一个) 并按照它们发生的顺序。 在重播期间发生但未能匹配记录的严格期望的调用被认为是意外的,导致立即的“unexpected invocation”错误,从而导致测试失败。

非严格期望:顾名思义,对期望没有严格要求,mock的方法可以不调用。

 

1、明确验证(Explicit verification)

2、部分模拟(Partial mocking)

3、没有方法调用从记录切换到重播(No method call to switch from record to replay)

4、没有额外的代码用于隐式验证(No extra code for implicit verification)

5、没有额外的“准备测试”代码(No extra "prepare for test" code)

6、不需要使用@RunWith注释或基础测试类(No need to use @RunWith annotation or base test class)

7、void和非void方法之间的语法一致(Consistent syntax between void and non-void methods)

8、参数匹配仅适用于某些参数(Argument matchers for some parameters only)

9、基于值类型的属性使参数更容易匹配(Easier argument matching based on properties of value objects)

10、级联模拟(Cascading mocks)

11、支持模拟多个接口(Support for mocking multiple interfaces)

12、支持模拟注释类型(Support for mocking annotation types)

13、部分期望(Partially ordered expectations)

14、模拟构造函数和final / static / native / private方法(Mocking of constructors and final/static/native/private methods)

15、模拟/打桩的声明性应用在整个测试类(Declarative application of mocks/stubs to whole test classes)

16、自动注入模拟(Auto-injection of mocks)

17、模拟”新的”对象(Mocking of "new-ed" objects)

18、支持模拟枚举类型(Support for mocking enum types)

19、测试类的声明式模拟(模拟领域)(Declarative mocks for the test class (mock fields))

===================================================================

 

更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢!

 技术分享

感谢阅读,作者原创技术文章,转载请注明出处

以上是关于yapi中的高级mock--期望的主要内容,如果未能解决你的问题,请参考以下文章

Yapi平台之Mock服务

使用 YApi 管理 API 文档,测试, mock

yapi禁用注册功能

构造函数中的异常:Rhino.Mocks.Exceptions.ExpectationViolationException:期望#0,实际#1

高级软件工程2017第8次作业—个人总结

如何快速构建YApi平台完成接口测试中心