mock管理之本地部署:centos+nodejs+redis+easymock
1.EasyMock简介:
手动的构造 Mock 对象会给开发人员带来额外的编码量,而且这些为创建 Mock 对象而编写的代码很有可能引入错误。目前,有许多开源项目对动态构建 Mock 对象提供了支持,这些项目能够根据现有的接口或类动态生成,这样不仅能避免额外的编码工作,同时也降低了引入错误的可能。
EasyMock是一套用于通过简单的方法对于给定的接口生成 Mock 对象的类库。它提供对接口的模拟,能够通过录制、回放、检查三步来完成大体的测试过程,可以验证方法的调用种类、次数、顺序,可以令 Mock 对象返回指定的值或抛出指定异常。通过 EasyMock,我们可以方便的构造 Mock 对象从而使单元测试顺利进行。这次我们要在本地搭建easymock服务,方便使用。
2.安装配置
前提:centos 64位
2.1 nodejs安装
#下载安装包 wget https://nodejs.org/dist/v9.9.0/node-v9.9.0-linux-x64.tar.gz #解压 tar zxvf node-v9.9.0-linux-x64.tar.gz #移动到/usr/local/目录下并改名 mv node-v9.9.0-linux-x64 /usr/local/node
配置环境变量:
#打开系统配置文件 vi /etc/profile #最下方添加如下代码: #set node export NODE_HOME=/usr/local/node export PATH=$PATH:$NODE_HOME/bin #保存并退出 #使环境变量生效 source /etc/profile
校验是否成功:
node -v
坑一:报错-----bash: /usr/local/node/bin/node: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory
解决办法:执行如下命令
yum -y install glibc.i686
坑二:报错-----node: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory
解决办法:执行如下命令
yum -y install libstdc++.so.6
再次运行:node -v,出现以下页面说明成功;
2.2 更新npm
npm install npm@latest -g
2.3 安装redis
#选择目录(如opt) cd /opt #下载redis压缩包 wget http://download.redis.io/releases/redis-4.0.10.tar.gz #解压 tar zxvf redis-4.0.10.tar.gz #重命名 mv redis-4.0.10 redis #切换目录 cd redis #编译 make make install
配置初始化脚本启动redis:
# 1.配置初始化脚本 #复制utils下的redis_init_script初始化脚本文件到/etc/init.d目录下bin改名,文件名为redis_端口号 cp /opt/redis/utils/redis_init_script /etc/init.d/redis_6379 #修改脚本第6行的REDISPORT变量的值为同样的端口号。 #2.新建文件夹 #存放Redis的配置文件 mkdir /etc/redis #存放Redis的持久化文件 mkdir /var/redis mkdir /var/redis/6379 #3.修改配置文件 cp /opt/redis/redis.conf /etc/redis/6379.conf vi /etc/redis/6379.conf
修改配置文件如下:
redis开机启动:
vi /etc/init.d/redis_6379 #在打开的redis初始化脚本文件头部第四行的位置,追加下面两句: # chkconfig: 2345 90 10 # description: Redis is a persistent key-value database
追加后效果如下:
设置开机执行redis脚本:
chkconfig redis_6379 on
更改redis为所有用户均可访问:
#打开配置文件 vi /etc/redis/6379.conf #找到bind 127.0.0.1这一行,修改为:bind 0.0.0.0 #保存后重启redis service redis_6379 stop service redis_6379 start
2.4 安装mongdb
mongdb安装包:链接:https://pan.baidu.com/s/1Xu8qfgcdn2b-VvPHifIIpQ 密码:51j5
上传并解压安装包,复制到对应目录中;
#先将安装包上传到服务器 #选择存储安装包目录 cd /opt #解压 tar zxvf mongodb-linux-x86_64-rhel70-3.6.5.tgz #移动安装包并改名 mv mongodb-linux-x86_64-rhel70-3.6.5 /usr/local/mongodb #切换到目录下 cd /usr/local/mongodb
创建数据库目录和日志文件:
#/usr/local/mongodb/创建数据库目录和日志目录 mkdir data #进入data目录 cd data #创建两个文件夹 mkdir db mkdir log cd log #建立日志文件 touch logs.log
创建开机自启动脚本文件:
vi /etc/init.d/mongodb
添加脚本内容:
#!/bin/bash # chkconfig: - 85 15 name=mongod path_bin=/usr/local/mongodb/bin/ path=/usr/local/mongodb/ case "$1" in start) ${path_bin}${name} --dbpath=${path}data/db --logpath=${path}data/log/logs.log --logappend --fork if [ $? -eq 0 ];then echo "${name}启动成功..." else echo "${name}启动失败..." fi ;; stop) if [ $(ps -ef|grep "mongod" |grep "fork"|awk {'print $2'}) -gt 0 ];then kill `ps -ef|grep "mongod" |grep "fork"|awk {'print $2'}` if [ $? -eq 0 ];then echo "${name}停止成功" else echo "${name}停止失败" fi else echo "${name}进程已经停止" fi ;; restart) if [ $(ps -ef|grep "mongod" |grep "fork"|awk {'print $2'}) -gt 0 ];then kill `ps -ef|grep "mongod" |grep "fork"|awk {'print $2'}` if [ $? -eq 0 ];then echo "${name}停止成功" else echo "${name}停止失败" fi else echo "${name}进程已经停止" fi echo "${name}启动中..." sleep 3s ${path_bin}${name} --dbpath=${path}data/db --logpath=${path}data/log/logs.log --logappend --fork if [ $? -eq 0 ];then echo "${name}重启成功" else echo "${name}重启失败" fi ;; *) echo "${name}start|stop|restart" ;; esac
加入系统服务和开机启动:
cd /etc/init.d/ #设置执行权限 chmod a+x mongodb #加入系统服务 chkconfig --add mongodb #开机服务自启 chkconfig mongodb on #重启系统生效 reboot now
坑一:启动mongodb时会报错libc.so.6: version `GLIBC_2.15' not found
#查看glibc库版本 strings /lib64/libc.so.6 |grep GLIBC_ #可以看到最高支持GLIBC_2.12,而程序需要GLIBC_2.15,所以需要升级 #选择存储目录 cd /opt #下载gilbc2.15 wget http://ftp.gnu.org/gnu/glibc/glibc-2.15.tar.gz wget http://ftp.gnu.org/gnu/glibc/glibc-ports-2.15.tar.gz #解压 tar -xvf glibc-2.15.tar.gz tar -xvf glibc-ports-2.15.tar.gz #将glibc-ports-2.15移动到glibc-2.15/ports目录下 mv glibc-ports-2.15 glibc-2.15/ports #新建构建目录 mkdir glibc-build-2.15 #切换目录 cd glibc-build-2.15/ #编译 ../glibc-2.15/configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin make make install #查看软链 ll /lib64/libc.so.6 #再次查看支持的版本 strings /lib64/libc.so.6 |grep GLIBC_
再次启动:
service mongodb start
坑2:child process failed, exited with error number 100
#一般出现这个报错都是因为锁了 rm -rf /usr/local/mongodb/data/db/mongod.lock
坑3:child process failed, exited with error number 48
#进入到mongod的执行目录,以修复模式启动 cd /usr/local/mongodb/bin ./mongod --dbpath=/usr/local/mongodb/data/db/ --logpath=/usr/local/mongodb/data/log/logs.log --repair #进入到日志目录,删除自动生成的日志文件 cd ../data/log/ rm -rf logs.log.* #回到mongod的执行目录,再次启动 cd /usr/local/mongodb/bin ./mongod --dbpath=/usr/local/mongodb/data/db/ --logpath=/usr/local/mongodb/data/log/logs.log --fork
PS:手动启动和关闭mongodb的命令:
service mongodb start service mongodb stop
2.5 安装EasyMock
#git下载安装包 git clone https://github.com/easy-mock/easy-mock.git #切换目录 cd easy-mock/ #安装依赖 npm install ajv@^5.0.0 --unsafe-perm #安装 npm install --unsafe-perm
新建配置文件:
vi config/local.json
文件内容如下:(其中APIPrefix改为自己对应的IP地址)
{ "port": 7300, "host": "0.0.0.0", "pageSize": 30, "proxy": false, "db": "mongodb://localhost:27017/easymockdb", "unsplashClientId": "", "APIPrefix":"http://192.168.198.132:7300/api", "redis": { "keyPrefix": "[Easy Mock]", "port": 6379, "host": "localhost", "password": "", "db": 0 }, "blackList": { "projects": [], "ips": [] }, "rateLimit": { "max": 1000, "duration": 1000 }, "jwt": { "expire": "14 days", "secret": "easy-mock-jwt-secret" }, "upload": { "types": [".jpg", ".jpeg", ".png", ".gif", ".json", ".yml", ".yaml"], "size": 5242880, "dir": "../public/upload", "expire": { "types": [".json", ".yml", ".yaml"], "day": -1 } }, "ldap": { "server": "", "bindDN": "", "password": "", "filter": { "base": "", "attributeName": "" } }, "fe": { "copyright": "", "storageNamespace": "easy-mock_", "timeout": 25000, "publicPath": "/dist/" } }
再次执行以下命令运行:
npm run build nohup npm run start &
访问http://ip:7300,界面如下所示: