本文将介绍如何将 Easy-Mock 部署到本地服务器或私有云环境中,并提供一些基本的使用指南。 介绍 Easy Mock 是一个可视化,并且能快速生成模拟数据的持久化服务。 /logs:/home/easy-mock/easy-mock/logs # 配置地址,请使用本地配置地址替换 - . 引入了 Mock.js,下面我们演示两个接口。 配置响应数据(随机数据) { "code": 200, "data|10": [{ "string|1-2": "@string", "integer": "@integer(10 , 30)", "float": "@float(60, 100, 2, 2)", "boolean": "@boolean", "date": "@date(yyyy-MM-dd
◆ moco介绍 moco框架是github上的一个开源项目,可模拟http,https,Socket协议的mock操作。 如果大家不了解什么是mock请参考文章: 什么是mock 这里重点介绍moco的standolone方式的用法! 这就是最简单的moco mock的实例!大家是不是感觉到使用moco创建mock 简直方便到起飞! 新添加的json文件,不能立即生效,需要重启moco-runner-<version>-standalone.jar,如果多人同时使用moco,新增或者更新mock时,需要协调通知。 2. Mock的请求不能存储到数据库中,对于统计mock历史请求结果不够友好,如果想进一步解决该问题,需要编写代码解析日志来完成对mock请求信息的统计 来源: https://www.toutiao.com
黎明的希望 直到有一天,我遇到这个神器。我的效率提升了 100%。 我可以用最省力最优雅的方式得到我需要的 Mock 数据,甚至不需要任何配置。 直到我遇到这个神器,我才明白好的工作习惯能给我提升多少效率。 现在的我已经不一样了。我认为这款神器能够把全中国前端程序员的工作效率都提升一倍。我也希望在读这篇文章的你,能够好好把这款工具用起来。 比如我请求的参数宠物ID 为 1 就返回一个在售的宠物数据,如果宠物ID 为 2 就返回一个已售的宠物数据。我前端可以把几种状态的页面都做出来。 比如我设定我的1号宠物是在售的,2号宠物是已售出的,3号宠物是记录不存在的,DDD 号宠物是“ ID 格式不正确”的。我把这些返回值都设好。 之后,我发送的请求参数是1的时候,就返回一个在售的宠物信息;2返回一个已售的;3返回一个“404 not found”,4返回一个“Invalid Param”。
一般有两种场景: 前端对后端接口的 mock, 后端服务之间的测试中涉及的mock,常常发生在单元测试的时候。 B,当敏捷开发中B接口还未开发完全时候这里会需要用到 Mock。 今天给大家介绍一款Python Mock工具:requests-mock 2、工具介绍 requests-mock是一个用于模拟HTTP请求的Python库,它可以帮助开发人员在测试和开发过程中模拟各种 pip install requests pip install requests_mock 4、使用示例 示例一:使用Mock模拟GET、Post请求 以下是一个使用requests-mock模拟GET 请求和POST请求的示例: import requests import requests_mock # 模拟GET请求 with requests_mock.Mocker() as m: #
2、 安装与配置Python、Pip 这种情况属于python3版本已经安装,安装的是3.6.3版本,但是没有为python3建立链接。 我这边以安装CUDA 8.0和CUDNN 5.1为例,命令如下: 下载CUDA 8.0 deb文件 wget https://developer.nvidia.com/compute/cuda/8.0/Prod2/ local_installers/cuda-repo-ubuntu1604-8-0-local-ga2_8.0.61-1_amd64-deb wget https://developer.nvidia.com /compute/cuda/8.0/Prod2/patches/2/cuda-repo-ubuntu1604-8-0-local-cublas-performance-update_8.0.61-1_amd64 -deb 安装CUDA 8.0 deb文件 sudo dpkg -i cuda-repo-ubuntu1604-8-0-local-ga2_8.0.61-1_amd64.deb sudo apt-get
问题2:@Autowired Gson 在一个服务类中使用了gson,不过是通过@Autowired方式依赖注入的。 假设不对Gson进行mock, 以下的用例就会抛空指针 public class BookServiceImplTest { @Mock private BookDao dao; 由于Gson在这里是个底层方法,不是应用的其它服务,理论上不应该被mock,就像我们不太会去mock StringUtil类似的。 那怎么解决呢? Cannot mock/spy class com.google.gson.Gson Mockito cannot mock/spy following: - final classes - anonymous classes - primitive types 因为Gson是一个final classes,因此不能被mock。
与真实 Server 环境的切换非常麻烦,一切需要侵入代码切换环境的行为都是不好的 方案2:接口管理工具 代表: rap(阿里,已停止维护,使用rap2) 地址: https://github.com/ _start=2&_end=5运算:使用 _gte 或 _lte 选取一个范围、使用 _ne 排除一个值、使用 _like 进行模糊查找 (支持正则表达式)...... Mock.mock({ "object|2-4": {"110000": "北京市","120000": "天津市","130000": "河北省","140000": "山西省" }})// 执行后, 随机获取对象中的2-4项{ "object": {"120000": "天津市","130000": "河北省" } } 生成指定数量的数组 Mock.mock({ "array|1": [ "AMD" )// 随机的结果{"list": [{"id": 1},{"id": 2}]} ......
前言前段时间,我们团队就单元测试是否采用 Mock 进行了一番交流,各有各的说法。本文就单元测试 Mock不Mock 给出我的观点,欢迎各位同仁提出不同的意见,共同探讨、相互交流。单元测试没必要? Mock不Mock?那什么是Mock?什么是Mock?简单来说,Mock就是模拟目标代码的行为,在实际测试过程中代替真实的调用目标。如下图这样做的意义何在?Mock的意义何在? 个人认为Mock只是模拟调用外部的行为,并不影响代码逻辑。所以,不存在“Mock是不是有效的单元测试”这种说法。如何Mock?应该Mock什么? 如果Mock方法1、2、3,那么方法4、5、6就不会被调用到,里面的逻辑不会被覆盖到,也就不是有效的单元测试。 如果模拟的函数实际被调用了多次,需要通过以下方式# 断言mocked_update被调用了2次self.assertEqual(mocked_update.call_count, 2)# 断言mocked_update
前言 AnyProxy不仅仅可以抓包,还可以拦截请求并修改服务端响应,实现接口mock功能。 面试时候经常会问到第三方支付如何测试这种,如果对接的第三方没提供测试环境,那么就需要搭建一个mock服务器,模拟支付接口返回的各种情况。 reject) => { setTimeout(() => { // delay resolve({ response: newResponse }); }, 5000); }); } }, }; Step 2,
部分mock 在测试过程中,有个类的部分方法可能需要实际调用,而某些方法则是被mock的,也就是部分mock的场景。在Mockito中,可以使用Spy来实现。 换一种写法,使用doReturn.when的方式, @Test public void TestSayHello2() { doReturn("Ni hao r u").when(demo).hello 2)doXX().when(obj).do()方法可以避免在spy时默认执行真实方法 3)可以通过reset方式去掉测试桩
部分mock 在测试过程中,有个类的部分方法可能需要实际调用,而某些方法则是被mock的,也就是部分mock的场景。在Mockito中,可以使用Spy来实现。 换一种写法,使用doReturn.when的方式, @Test public void TestSayHello2() { doReturn("Ni hao r u").when(demo).hello 2)doXX().when(obj).do()方法可以避免在spy时默认执行真实方法 3)可以通过reset方式去掉测试桩
说下我推荐的 2个阅读神器。 为什么说是阅读,而不是看书呢。在我朋友圈的读者们,可能已经知道了。比起看书,我平常阅读更多的是,期刊论文或者博硕毕设。偶尔,要学点新技术,看书才会成为我的选择。 所以,我要推荐的,1个神器,是微信读书,用来看书;第2个神器,是知网和谷歌学术。 微信读书,是我的年度最佳 app ,绝对可以排前三。 下图层1,是谷歌学术搜索;图层2/3,是知网的。但,他俩代表的是两个世界 如果你有好的看书,阅读神器,也欢迎留意,与大家一起分享! 不出意外,这是农历2022年前,最后一篇文章了。
作者:小腊月 地址:http://www.jianshu.com/p/dce5382fec5d 声明:本文是小腊月原创,已获其授权发布,未经原作者允许请勿转载 前言 网上随便搜索一下Dragger2, 首先,如果想要学好dagger,就必须要了解什么是“依赖注入”,因为dagger2是实现依赖注入的一个框架。 那么,我们的Dagger2能给我们带来什么呢?能达到什么效果呢?为什么要使用Dagger2呢?这一大堆问题我们将需要一个一个突破,弄懂一个问题之后,再进行下一个问题,不然,讲完之后,会让你云里雾里。 public class Person { // dagger2直接使用@Inject @Inject Car car; public Person(Car car) { 待我们学完之后,再回过头来回答为什么要使用Dagger2?和前面的注入方式相比,有什么好处? 下面的我们将通过demo代码形式来使用Dagger2,因为我们都是程序员,代码胜过千言万语~~
ajax的url地址指向该json文件,记得这里是坑,要带上仓库名/mock/home.html 设置githubpage,通过浏览器查看mock的数据 ? 打开gitbash,通过http-server打开静态服务器,通过浏览器用返回的本机ip打开html,查看mock的数据 三、通过easy mock网址mock数据 1、打开网址,登陆 ? 2、点击右下角的+号创建项目,输入项目名,有时在url后加一个后缀。我写的是项目名game,url:music ? 3、项目创建好,点击game创建接口 ? https://easy-mock.com/mock/5c... (1)gitbashmock数据 打开gitbash,输入curl url对应的地址。 ? (2)浏览器验证 通过写html文件,把url更换为生成的url,通过浏览器查看 demo:https://github.com/0612bamboo... ?
接口 Mock 工具对比:Mock.js、Easy Mock、Apifox 的使用场景与配置 为什么需要接口 Mock 前端开发中,后端未就绪、接口不稳定或联调周期长,都会拖慢交付。 Easy Mock:基于 Web 的接口 Mock 平台,支持项目/接口管理与规则配置,适合需要简单平台化的团队或内网部署。 Apifox:集 API 设计、文档、Mock、测试于一体,自动从接口定义生成 Mock,适合中大型团队协作与质量闭环。 安装与使用: npm i -D mockjs 前端拦截示例(XHR/Fetch): import Mock from 'mockjs' Mock.mock('/api/user', 'get', { 用例测试可直接引用 Mock 数据,联动断言与 CI。 优点与注意:强协作、自动 Mock 与测试闭环;团队需采纳统一接口定义流程,Mock 与真实后端差异需定期校准。
Martin大师在文章中详细的解释了Mock与Stub的区别,以及怎样使用它们进行TDD实践等等一系列干货,强烈推荐阅读,猛击这里阅读原文。 我无意把大师的话再复述一遍,所以在本文中我就聊聊我对Mock与Stub的理解以及一些实践。 相同点 先看看两者的相同点吧,非常明确的是,Mock和Stub都可以用来对系统(或者将粒度放小为模块,单元)进行隔离。 先看看两者的相同点吧,非常明确的是,Mock和Stub都可以用来对系统(或者将粒度放小为模块,单元)进行隔离。 不同点 Mock和Stub有两个主要区别: 校验测试结果的方式不同,Mock倾向于校验行为(Beahavior verification),Stub倾向于校验状态; Mock和Stub也代表了两种将测试与设计结合在一起的理念
本文介绍了 PHPUnit Mock 测试。 Mock 测试就是为了解决上面的问题而出现的,使用 Mock 我们可以虚拟出一个 bar 的调用,并且假设 bar 调用返回结果。如果还是听不懂,上一段代码就知道了。 = $this->createMock(\App\UserService::class); //1 $stub->method('get')->willReturn(3); //2 $this->assertEquals(3,$stub->get(1)); //3 } } 上面的测试函数就使用到了 Mock,一行一行代码来分析: 第一行创建了一个虚拟的 UserService
作者:小腊月 地址:http://www.jianshu.com/p/c673e6e73c8b 声明:本文是小腊月原创,已获其授权发布,未经原作者允许请勿转载 前言 在Dagger2神器入门(一)中,我们了解了什么是依赖注入 ,那么在这一章中,我们将逐渐入门Dagger2。 那么接下来我们用Dagger2的方式,来做做试试,先不管他们之间的区别,just do it。做出来效果之后再回过头来反思。 但是Dagger2为了解耦,提供了一个中介,@Component注解,也就是我们的第4步。 这章主要是入门了Dagger2,下面我们会了解 1 为什么要使用Dagger2来替代文章一开头的写法? 2 如果@Inject注解的构造器有多个怎么办? 3 如果存在依赖链怎么办呢?
/qyapi.weixin.qq.com/cgi-bin/' # 企业微信api接口,统一定义 send_resolved: true # 设置发送警报恢复信息 to_party: '2' # 部门id,比如我的叫警报组,因此显示的是2,如果你DB组,就可能会是3,WEB组就是4,依次类推,另外需要接收警报的相关人员必须在这个部门里。 ww5421dksajhdasjkhj' api_url: 'https://qyapi.weixin.qq.com/cgi-bin/' send_resolved: true to_party: '2'
数据处理神器tidyverseggplot2 ? tidyverse包其中包含着一个重要的可视化包---ggplot2。 Ggplot2是由Hadley Wickham制作的数据可视化软件包,它基于一组称为图层的原则。 基本思想是ggplot2将数据的几何对象(圆圈,线条等),主题和比例放在上面。 在这里,你可以通过总结每年的预期寿命并将结果输入ggplot而不必定义任何中间变量来对dplyr操作与ggplot2进行一些巧妙的组合。 continent year avg_lifeExp ## <fct> <int> <dbl> ## 1 Africa 1952 39.1 ## 2 自定义ggplot2 虽然我们在这里保留了默认的ggplot2功能,但是你可以用ggplot2来做很多事情。 例如,通过练习,您将学习如何通过将多个层组合在一起来生成高度自定义的绘图。