本文作者:IMWeb zzbozheng 原文出处:IMWeb社区 未经同意,禁止转载 nock 是前端常用来模拟http请求响应的工具,它基于nodejs的原生http模块,并且他可以让我们写一些轻逻辑的代码 ,我们先看一个简单的例子: nock('http://www.example.com') .post('/login', 'username=pgte&password=123456') .reply Nock将会拦截这个请求并立即返回你预先定义好的响应。 当我第一次开始使用Nock时,我急切地开始使用它进行单元测试。 然而,我很快就感觉到我花了更多时间编写Nocks而不是实际测试业务逻辑。 此功能的测试代码可能如下所示: it('should properly decorate the fullName', async () => { nock('http://localhost') 我们已经最小化地完成了HTTP传输,最大限度地减少了使用 Nock 来测度 。
方法一:字典自带属性has_key Python2下: nock:work nock$ python2.7 Python 2.7.10 (default, Jul 14 2015, 19:46:27) :work nock$ python3 Python 3.5.1 (default, Dec 26 2015, 18:08:53) [GCC 4.2.1 Compatible Apple LLVM 7.0.2 方法二: in关键字 一般我们刚开始学习认识Python的时候我们都会先字典列表对象的形式把字典所有键返回,再判断该key是否存在于键列表中: nock:work nock$ python3 Python Python2下: nock:work nock$ python2.7 Python 2.7.10 (default, Jul 14 2015, 19:46:27) [GCC 4.2.1 Compatible print('in') ... not in Python3下: nock:work nock$ python3 Python 3.5.1 (default, Dec 26 2015, 18:08:53
No.1 查看内核版本信息 方法一: [root@labhost1 nock]# cat /proc/version Linux version 2.6.32-431.11.5.el6.ucloud.x86 version 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) ) #1 SMP Thu Jul 3 09:42:34 CST 2014 方法二: [root@labhost1 nock #1 SMP Thu Jul 3 09:42:34 CST 2014 x86_64 x86_64 x86_64 GNU/Linux No.2 查看系统版本信息 方法一: [root@labhost1 nock 比如debian: root@debian9:~# cat /etc/issue Debian GNU/Linux 9 \n \l 方法二: [root@labhost1 nock]# lsb_release ,包括Redhat、SuSE、Debian等发行版,不过可能你的系统没有这个命令,安装如下所示: yum -y install redhat-lsb-core 方法三: [root@labhost1 nock
Nock 诺克 HTTP响应mock工具 有时,我们可能需要模拟HTTP请求的响应数据 是否有工具可以简化呢? 那就是Nock啦, Nock使用起来十分方便,API都十分简单名利 var should = require('should'); var nock = require('nock'); var /这里定义,get请求XXX.qq.com域名下的/cgi-bin/teacher/get_about的数据能返回200 //并且返回结果是cgiData nock data.retcode.should.equal(0, 'teacher数据拿到, 不能正确处理'); }) }); }); 通过nock
# _*_ coding:utf-8 _*_name = "nock" 如上代码中声明了一个变量,变量名称为name,变量name的值为'nock'. /bin/env python3 # _*_ coding:utf-8 _*_ # Author: nockgod@gmail.com # Date: 2017-07-28 10:30Name = 'nock ' Phone = ’13681042939‘ 解释:当Python解释器解析到 Name = 'nock'的时候会在内存中开辟一个空间存放'nock'字符串,然后Name变量指向存储'nock'字符串的内存地址 : 创建一个变量name,指向'nock'的内存地址; 如果'nock'这个值之前没有在内存中创建,那么现在创建它,并让这个内存地址的引用数+1,此时等于1; 然后我们对变量name进行重新赋值,让其执行 'lucky'的内存地址; 那么此时'nock'值的引用数现在就变成0了,当Python一旦检测到某个内存地址的引用数为0时,就会把这个内存地址给删掉,从而释放内存空间。
/usr/bin/env python2.6 #Author: nock.chen from types import * mylist = ['nock', 100, '100', 'IT']def if type(item) is IntType: mylist.remove(item)delete(mylist, 100) print(mylist) Result: ['nock nock:ucode nock$ python3 Python 3.5.1 (default, Dec 26 2015, 18:08:53) [GCC 4.2.1 Compatible Apple LLVM True >>> isinstance((2, 3), list) False >>> isinstance((2, 3), tuple) True >>> isinstance({'name': 'nock '}, tuple) False >>> isinstance({'name': 'nock'}, dict) True >>> isinstance([1, 100, 101], (str, list
Nock特点:专门用于模拟 Node.js 环境中的 HTTP 请求,通过拦截 http/https 模块实现。 示例:模拟 HTTP 请求import nock from 'nock';import { renderHook, waitForNextUpdate } from '@testing-library/ /useFetch';test('mocks HTTP request with nock', async () => { // 拦截并模拟请求 nock('https://api.example.com ') .get('/data') .reply(200, { id: 1, name: 'Nock Mock' }); const { result } = renderHook(() = API 模拟:优先 MSW(真实环境模拟,前后端通用),Node 环境可选 Nock。 多框架兼容:选择 Sinon.js(支持 Mocha、Jasmine 等)。
>>> info = "My job is %s, My name is %s" % ("IT", "nock") >>> info 'My job is IT, My name is nock' >> , I am {} years old, Job is {}".format(*("nock", 18, "IT")) >>> info 'My name is: nock, I am 18 years 1} years old, Job is {2}".format(*["nock", 18, "IT"]) >>> info 'My name is: nock, I am 18 years old, : nock, I am 18 years old, Job is DevOps' 制定参数类型 >>> info = "I am {:s}, age {:d}".format(*("nock", 18 )) >>> info 'I am nock, age 18' >>> >>> info = "I am {:s}, age {:d}".format(*["nock", 18]) >>> info '
*UNKNOWN* (*UNKNOWN*:*UNKNOWN*): *UNKNOWN* 接收到告警信息,那就登录到服务器看看怎么回事,什么东西占用了/分区: [nock@app-ali-prod-db1 nock]# sudo df -h Filesystem Size Used Avail Use% Mounted on /dev/vda1 20G 15G 3.6G 87% / tmpfs 7.8G 0 7.8G 0% /dev/shm /dev/vdb 394G 124G 251G 34% /data [nock @app-ali-prod-db1 nock]# sudo df -h Filesystem Size Used Avail Use% Mounted on /dev/vda1 @app-ali-prod-db1 nock]# sudo df -h Filesystem Size Used Avail Use% Mounted on /dev/vda1
>>> info_dict = {} >>> print(type(info_dict)) <class 'dict'> 2、赋值直接生成 >>> student_info = {'name': 'nock ', 'age': 18, 'class': 18} >>> student_info {'name': 'nock', 'class': 18, 'age': 18} 3、通过二元素元组列表创建 >> > info_list = [('name', 'nock'), ('age', 18), ('job', 'IT')] >>> info_dict = dict(info_list) >>> info_dict {'job': 'IT', 'name': 'nock', 'age': 18} 4、通过dict关键字和关键字参数创建 >>> info_dict = dict(name='nock', age=18 , job='IT') >>> info_dict {'job': 'IT', 'name': 'nock', 'age': 18} 5、通过字典推导式创建 >>> num_info = { i:2*i
> print('find nock ok') if msg.rindex('nock') ! name is nock name is nock" >>> msg.rsplit('name') ['my ', ' is nock ', ' is nock ', ' is nock'] >>> msg.rsplit('name', 2) ['my name is nock ', ' is nock ', ' is nock'] split : 使用指定分隔符对字符串进行分割,最后得到一个列表 name is nock name is nock" >>> msg.split() ['my', 'name', 'is', 'nock', 'name', 'is', 'nock', 'name' , 'is', 'nock'] >>> msg.split('name') ['my ', ' is nock ', ' is nock ', ' is nock'] 长度补全 ljust : 打印固定长度的字符串
因此,我们在上面的测试用例添加断言:如下 Nock 诺克 HTTP响应mock工具 有时,我们可能需要模拟HTTP请求的响应数据 是否有工具可以简化呢? 那就是Nock啦, Nock使用起来十分方便,API都十分简单名利 var should = require('should'); var nock = require('nock'); var /这里定义,get请求XXX.qq.com域名下的/cgi-bin/teacher/get_about的数据能返回200 //并且返回结果是cgiData nock data.retcode.should.equal(0, 'teacher数据拿到, 不能正确处理'); }) }); }); 通过nock
Nock 诺克 HTTP响应mock工具 有时,我们可能需要模拟HTTP请求的响应数据 是否有工具可以简化呢? 那就是Nock啦, Nock使用起来十分方便,API都十分简单名利 var should = require('should'); var nock = require('nock'); var /这里定义,get请求XXX.qq.com域名下的/cgi-bin/teacher/get_about的数据能返回200 //并且返回结果是cgiData nock data.retcode.should.equal(0, 'teacher数据拿到, 不能正确处理'); }) }); }); 通过nock
查询软件包依赖哪些软件 这里演示的案例是postfix软件包 1.1 rpm方式 [root@nock ~]# rpm -qa postfix # 查看对应的rpm包 postfix-2.10.1- 6.el7.x86_64 [root@nock ~]# rpm -qR postfix # R参数的意思就是requires就是依赖哪些软件包 /bin/bash /bin/sh /bin/sh / systemd systemd systemd systemd-sysv rpmlib(PayloadIsXz) <= 5.2-1 以上查询出来的就是依赖的软件包 1.2 yum方式 [root@nock _64 [root@nock ~]# rpm -e --test rpcbind # 通过--test进行测试删除,查看是否有依赖关系,如果有会阻止删除 错误:依赖检测失败: rpcbind [root@nock ~]# rpm -e --test postfix # 测试删除postfix没有报错,也就是没有别的地方依赖它,可以进行删除 [root@nock ~]# rpm -q postfix
/usr/bin/env python3 #Author: nock.chenstr_info = "{'name': 'nock', 'age': 14}" dict_info = eval(str_info /usr/bin/env python3 #Author: nock.chenstr_info = input('input str info: ') dict_info = eval(str_info /usr/bin/env python3 #Author: nock.chenimport jsonstr_info = '{"name": "nock", "age": 18}' dict_info /usr/bin/env python3 #Author: nock.chenimport json str_info = "{'name': 'nock', 'age': 18}" dict_info /usr/bin/env python3 #Author: nock.chenimport ast str_info = '{"name": "nock", "age": 18}' dict_info
/usr/local/bin/python3 # Author: nock """ 首先在Python3版本中,直接使用reduce()的话,系统会报错,提示不存在reduce()函数, 在Python3 /usr/local/bin/python3 # Author: nock from functools import reduce num_list = [1, 2, 3, 4, 5] result /usr/local/bin/python3 # Author: nock num_list = [1, 2, 3] new_list = list(map(lambda i: i + 1, num_list /usr/local/bin/python3 # Author: nock list_one = [1, 2, 3] list_two = [4, 5, 6] new_list = list(map( /usr/local/bin/python3 # Author: nock num_list = [100, 20, 24, 50, 110] new_list = list(filter(lambda
为什么Python3下需要需要list()操作,分析如下: nock:lab nock$ python2.6 Python 2.6.9 (unknown, Jul 14 2015, 19:46:31) {12: 'taiwan', 13: 'hongkong', 15: 'guizhou'} >>> print(cn_map_info.keys()) [12, 13, 15] >>> exit()nock :lab nock$ python3 Python 3.5.1 (default, Dec 26 2015, 18:08:53) [GCC 4.2.1 Compatible Apple LLVM 7.0.2
因此,我们在上面的测试用例添加断言:如下 Nock 诺克 HTTP响应mock工具 有时,我们可能需要模拟HTTP请求的响应数据 是否有工具可以简化呢? 那就是Nock啦, Nock使用起来十分方便,API都十分简单名利 通过nock,直接模拟请求结果,这样我们就可以不考虑cgi的状态,而专注于model的逻辑测试 Istanbul 伊斯坦布尔 代码覆盖率检验工具
先讲一下用到了哪些测试框架和工具,主要内容包括: jest ,测试框架 enzyme ,专测 react ui 层 sinon ,具有独立的 fakes、spies、stubs、mocks 功能库 nock 接着就是测试自己封装的 fetch 工具库了,这里 fetch 我是用的 isomorphic-fetch ,所以选择了 nock 来模拟 Server 进行测试,主要是测试正常访问返回结果和模拟服务器异常等 ,示例片段如下: import nock from 'nock'; import { fetcher, FetchError } from '@/utils/fetcher'; /* 测试 fetcher */ describe('fetcher', () => { afterEach(() => { nock.cleanAll(); }); afterAll ', () => { nock('http://some') .get('/test') .reply(200, {success: true
如果你的代码需要做文件名的匹配,最好使用glob模块, 简单示例如下: [root@nock opt]# pwd /opt [root@nock opt]# ls file1.py file2.py file3.py file4.py [root@nock opt]# python Python 3.5.1 (default, Nov 20 2015, 02:00:19) [GCC 4.8.5 20150623