mock

Python unittest模块的使用笔记:对mock.patch()的被mock函数的说明

℡╲_俬逩灬. 提交于 2019-11-28 10:32:35
现在假设需要对get_app模块内的create_app函数做单元测试,同时create_app函数调用了另一模块utils的load_yaml函数。由于模块utils的load_yaml函数可能处于开发阶段或是需要通过网络传输数据,从而导致测试的不便。这时就需要对load_yaml做一个mock.patch,即伪造一个load_yaml的返回值来完成对其调用者的单元测试。 这里的关键在于mock.patch()中load_yaml的路径写法:从调用者(create_app)路径引入load_yaml而不是直接从load_yaml自身所在的模块路径引入。 演示文件共3个,均位于同一目录下。 i) test_get_app.py from unittest import TestCase, mock import unittest from get_app import create_app test_config = 'HHH' class GetappTestCase(TestCase): @mock.patch('get_app.load_yaml') # 注意这里的mock路径 def test_get_app(self, mock_load): mock_load.return_value = test_config self.assertEqual(create_app(

(Easy) Mock Interview LeetCode;

半世苍凉 提交于 2019-11-28 08:08:01
Description: Given two arrays arr1 and arr2 , the elements of arr2 are distinct, and all elements in arr2 are also in arr1 . Sort the elements of arr1 such that the relative ordering of items in arr1 are the same as in arr2 . Elements that don't appear in arr2 should be placed at the end of arr1 in ascending order. Example 1: Input: arr1 = [2,3,1,3,2,4,6,7,9,2,19], arr2 = [2,1,4,3,9,6] Output: [2,2,2,1,4,3,3,9,6,7,19] Constraints: arr1.length, arr2.length <= 1000 0 <= arr1[i], arr2[i] <= 1000 Each arr2[i] is distinct. Each arr2[i] is in arr1 . Solution: class Solution { public int[]

Mock Server之flask_restful(python+flask)

拥有回忆 提交于 2019-11-28 05:06:59
一、结构设计 上一篇,写了 Mock Server的基础实现与被测系统的对接 当我们要mock 的 api越来越多的时候,路由与相关的方法都堆在app.py中就不合适了,不可拔插,可读性也比较差,因此要调整下结构。 期望结果:   1、app.py中只负责server的配置信息   2、各个路由与对应的方法可在独立的文件中维护   3、方便拔插 如下图,resources中分别维护各个API,在app.py中配置server信息及拔插API(这个也可以分成两个文件),common中放公共方法 二、Flask-RESTful 这里我们引入Flask-RESTful来实现一中的内容。 首先安装:pip install Flask-RESTful 1、Resources Flask-RESTful 提供的最主要的基础就是资源(Resources)。资源(Resources)是构建在 Flask 可拔插视图 之上,只要在你的资源(Resource)上定义方法就能够容易地访问多个 HTTP 方法。 我们看一下API1中的代码: 1 __author__ = 'xumj' 2 from flask_restful import Resource 3 from flask import request,jsonify 4 5 6 def data_to_dict(data): 7 data

开发神技能 | Python Mock 的入门

自闭症网瘾萝莉.ら 提交于 2019-11-28 05:05:11
Mock是什么 Mock这个词在英语中有 模拟的 这个意思,因此我们可以猜测出这个库的主要功能是模拟一些东西。准确的说,Mock是Python中一个用于支持单元测试的库,它的主要功能是使用mock对象替代掉指定的Python对象,以达到模拟对象的行为。简单的说,mock库用于如下的场景: 假设你开发的项目叫a,里面包含了一个模块b,模块b中的一个函数c( 也就是a.b.c )在工作的时候需要调用发送请求给特定的服务器来得到一个JSON返回值,然后根据这个返回值来做处理。如果要为a.b.c函数写一个单元测试,该如何做? 一个简单的办法是搭建一个测试的服务器,在单元测试的时候,让 a.b.c 函数和这个测试服务器交互。但是这种做法有两个问题: 1. 测试服务器可能很不好搭建,或者搭建效率很低。 2. 你搭建的测试服务器可能无法返回所有可能的值,或者需要大量的工作才能达到这个目的。 那么如何在没有测试服务器的情况下进行上面这种情况的单元测试呢?Mock模块就是答案。上面已经说过了,mock模块可以替换Python对象。我们假设 a.b.c 的代码如下: import requests def c(url): resp = requests.get(url) # further process with resp 如果利用mock模块,那么就可以达到这样的效果

PowerMock用法[转]

允我心安 提交于 2019-11-28 02:14:11
转:http://agiledon.github.io/blog/2013/11/21/play-trick-with-powermock/ 当我们面对一个遗留系统时,常见的问题是没有测试。正如Michael Feathers在Working Effectively with Legacy Code一书中对“遗留代码”的定义。他将其简单归纳为“没有测试的代码”。真是太贴切了!正是因为没有测试,使得我们对遗留代码的任何重构都有些战战兢 兢,甚至成为开发人员抵制重构的借口。从收益与成本的比例来看,对于这样的系统,我一贯认为不要盲目进行重构。因为重构的真正适用场景其实是发生在开发期 间,而非维护期间。当然,提升自己的重构能力,尤其学会运用IDE提供的自动重构工具,可以在一定程度上保障重构的质量。然而,安全的做法,还是需要为其 编写测试。 测试是分层的,即使是针对自动化测试。面对遗留系统,成本相对较低的是针对功能特性编写的功能测试(或者说是验收测试),这可以运用一些BDD框架 如Cucumber、JBehave等。由于它的测试粒度较粗,可以以较少的测试用例覆盖系统的主要功能。然而,它的缺点同样存在,那就是反馈周期相对较 长。这就好像你置身一个陌生的城市,在找不到路的情况下,只是跟着感觉走。走了数十公里之后,方才幡然醒悟,想起要翻一翻带在手上的地图。倘若发现方向走 错,再要回转就已经晚了

mockjs 使用以及反向校验

主宰稳场 提交于 2019-11-27 21:49:15
一、背景 前端开发需要依赖后端接口 后端接口输出慢、接口规范随时可能会变,而前端毫无感知 前端需要自己 mock 假数据 json 文件 假数据 json 数据内容是静态的,测试不同返回情况需要修改 json 文件 ... 因此我们需要一种可以帮我们构造数据的工具,并解决以上的若干痛点 mock.js 是一个不错的工具 二、安装与使用 安装 yarn add mockjs -D 使用 // 使用 Mock import Mock from 'mockjs' Mock.mock('http://test.com/getjson.json', 'get', { // 属性 list 的值是一个数组,其中含有 1 到 10 个元素 'list|1-10': [{ // 属性 id 是一个自增数,起始值为 1,每次增 1 'id|+1': 1 }] }) 三、常用构造指令 以下示例可以在 http://mockjs.com/examples.html 网页上打开控制台 使用 Mock.mock({示例代码}) 查看生成的结果 1、时间戳: 'name|1564577990837-2564577990837': 0 2、id 'name|1-123456789': 0 // 6174430 3、指定长度范围,随机中文字符 name: '@cword(2, 6)' // 价亲三身千然

Spring框架搭建-mock(java)

瘦欲@ 提交于 2019-11-27 21:29:26
一、什么是mock,mock作用 mock是一种测试手段,通过用来模拟不可控或者比较复杂的的请求结果(比如第三方的请求),通过请求参数控制,来达到自己期望的结果。通俗得讲就是通过参数控制接口返回的是自己想要的“伪数据”。 二、mock服务设计 网上大都是通过js,jQuery实现的mock,这里重点说明后端服务的mock-模拟第三方服务。 1、设计前的分析考虑 (1)mock服务要尽量脱离业务服务,避免过度耦合。比如说在与第三方交互过程中肯定会存在与业务系统之间的业务或者数据之间的交互,mock应尽量做到接近真实,降低对业务系统的依赖。 (2)请求方式/触发方式:请求方式必须和业务中对于第三方的请求完全一致,比如header,body,url等;触发方式要能通过参数对返回结果进行控制,做到要什么返回什么。 (3)mock方式:我们在进行mock的时候,并不是替换第三方,更多的是替换后端服务,服务中对外提供的服务可能有多个,比如:https,dubbo,hession等。 2、数据处理 (1)、对于有影响业务连续性,后续需要使用的数据,还是要写入数据库。 (2)、对于单次数据,对数据没有任何影响的数据,建议写在缓存中,比如redis,mongo等缓存中,最好记录缓存周期(避免数据过大)。 3、场景设计 根据业务需要,场景将包含接口式处理方式和页面是处理方式。接口式的不在多说

Mock Server之与被测系统对接(python+flask)

旧时模样 提交于 2019-11-27 21:18:11
第一步:获取入参与返回结果   先通过postman、jmeter、自己写脚本之类的方式请求我们的mock server,试着获取入参与对应的返回值,这里我用的是robotframework + RequestsLibrary   mock server代码如下,其中多import了request,g,jsonify 1 #coding:utf-8 2 from flask import Flask,request,g,jsonify 3 app = Flask(__name__) 4 5 # 返回结果 6 @app.before_request 7 def set_result(): 8 g.test_result1 = 'hello world' 9 g.test_result2 = {'code':1000,'result':'test'} 10 #定义路由 11 @app.route('/api/test', methods=['GET']) 12 def get_request(): 13 print 'get request' 14 print request.args.to_dict() 15 print request.args.get('a') 16 print request.values.to_dict() 17 print request.values

python编写mock接口

风流意气都作罢 提交于 2019-11-27 16:20:56
在接口测试中,一个接口可能依赖另一个接口的功能,例如你现在测试一个电商的下单功能接口,而它需要调用第三方服务的接口,如微信支付或支付宝支付接口。但是测试时,又不允许使用真实金额进行支付,因此,我们可以开发mock接口进行模拟订单下单时调用第三方接口 而mock在python中,我们可以直接使用flask进行编写接口,flask模块是一个简单的web框架,与springMVC类似(备注:本人自己理解) 废言少说,直接上代码 1.首先可以先安装flask模块 pip install flask 2.引入flask模块 3.创建flask对象,使用该对象进行配置与运行 4.编写路由,即是API接口请求路径 5.编写主程序 来源: https://blog.csdn.net/weixin_38871478/article/details/99696729

从零学springboot—— 如何在junit测试中只mock一部分类

瘦欲@ 提交于 2019-11-27 16:06:27
假设有一个类A,我们要对其进行测试: class A{ private B b; private C c; @Value("${str}") private String str; } 如果我们想要mock调对B和C的调用,那么我们在测试类中只要这样写即可: @InjectMocks private A a; @Mock private B b; @Mock private C c; @Test public void test(){ Mockito.when(b.b的方法(Mockito.any())) .thenReturn(b方法的返回); } 通过上面的代码,我们就能mock调B的方法,并按我们的要求返回结果,但是这么做,C也会被mock调,并且@Value的str也会是空值,如果我们想要只Mock调对B的调用,我们可以这么做: @Autowired @InjectMocks private A a; @Mock private B b; @Autowired private C c; @Before public void setUp(){ MockitoAnnotations.initMocks(this); } @Test public void test(){ Mockito.when(b.b的方法(Mockito.any())) .thenReturn