微信公众号测试生产环境分离实践

背景

最近开发微信公众号,部分功能上线后,为了保证不影响线上正常使用,新功能的开发测试遇到以及需要解决的问题如下:

  1. 调用微信公众号高级接口(授权,支付等)需要配置域名访问,本地测试繁琐,且不能覆盖线上已部署的链接,对已有服务造成影响

  2. 公众号前端业务逻辑涉及到缓存cookie,需要保证测试与生产环境的cookie不冲突

  3. 给需求方演示测试demo,最好要保证与即将上线的子菜单等交互一致,提高交流效率

  4. 测试数据(包括数据库,redis缓存,日志等)与线上数据进行分离

  5. 测试环境与线上部署分离,保证互不影响,提高线上的高可用

  6. 测试环境与生产环境实现自动化部署,提高开发测试效率

解决方案

申请测试公众号以及测试域名

为了满足给需求方演示测试demo,保证与即将上线的交互体验一致,想到最简单的方案就是重新申请公众号供测试使用(幸好以学校研究院的名义,,要不个人申请就没戏了,,,);并且为了保证前端cookie在两个公众号下不冲突,所以测试的时候使用了与生产环境不一样的二级域名,进行cookie隔离

后端的配置分离

目前由于只有一台云服务器,对于后台工程的配置分离,包括:测试与生产工程的端口号,数据库,redis库,微信开发者ID与秘钥,日志。

项目使用了springboot,配置文件目录如下截图:

将工程分为本地(dev),测试(online-test),生产(online)三种环境,并配合application.properties基础配置文件使用,将与环境相关的变量写入相应的properties中即可进行分离,如下列举application-online-test.properties中的配置内容:

注:数据库的分离即是新建不同的库进行区分访问,redis即通过库号区分访问,日志则通过日志名称来区分

后端的部署分离

后端部署脚本执行的流程为:

  1. 使用maven生成jar(本项目为springboot内嵌tomcat,直接执行生成的jar即可提供后台服务)

  2. 在云服务器上执行kill脚本,杀掉并删除待替换的jar进程

  3. 将新jar包传到云服务器上,执行相应jar的启动脚本(启动脚本包括执行jar在后台运行,指明相应的application-??.properties的文件)

因为只有一台云服务器,需要区分测试与生产环境的jar,使用的方案是两种环境生成不同名字的jar,这样也便于kill脚本与启动脚本通过名称来区分jar,进行部署的分离执行,相互不影响

使用maven来生成不同的jar名称,需要修改pom.xml

<profiles><profile><id>online-test</id><properties><project.name>"测试环境的jar名称"</project.name></properties></profile><profile><id>online</id><properties><project.name>"生产环境的jar名称"</project.name></properties></profile></profiles><build><finalName>${project.name}</finalName> // project.name即为profile中的properties的标签名
.....其他配置信息</build>

最后执行命令 mvn clean package -Ponline-test -Dmaven.test.skip=true,-P后面为profile的id名称,即可生成不同名称的jar

最后执行云服务器的启动脚本,即可启动新的jar服务

nohup java -jar  'jar包的文件位置' --spring.profiles.active='配置文件的后缀(online或online-test)'> /dev/null 2>&1 &

前端的配置分离

前端的配置变量包括:请求测试与生产端口号不同,域名不同(涉及授权等重定向链接的不同),微信公众号的ID不同。

代码上将这些变量写到全局一处调用,通过开关注释进行分离控制

前端的部署分离

因为使用单台云服务器,测试与生产环境的前端工程都需要使用到80端口,因为微信高级接口有些仅允许80端口程序调用,所以对于ngnix的配置,使用了配置虚机主机的方案。

具体步骤如下:

  1. 确保容器/etc/nginx/nginx.conf文件中有:include /etc/nginx/conf.d/*.conf;

  2. 在容器目录/etc/nginx/conf.d/下面新建文件site1.conf,site2.conf,文件名任意,后缀名需要与步骤1配置的一致,这里为.conf。site1代表我们的生产环境工程,site2代表我们的测试环境工程,该文件编写如下:

server {listen 80;server_name //代表该虚拟主机的二级域名root //前端工程代码在服务器中的位置;index index.html index.htm;...其他配置略
}

前端工程的部署脚本流程是将代码替换到相应配置的目录下,平滑重载ngnix即可

systemctl reload nginx.service  //reload重载文件,客户端无异常

方案总结

通过申请新的测试公众号,部署不同的域名配置到子菜单上,可以达到与线上公众号相同的交互,前端通过访问后端不同接口的服务,将数据库,redis缓存,日志信息通过后台配置实现了生产与测试的完全分离,可以说如上的解决方案,满足了开始列举的所有需求点,最终将前后端的部署实现脚本自动化,也节省了部署时间,提高开发测试的效率。

微信公众号测试生产环境分离实践相关推荐

  1. 微信公众号开发 - 开发环境搭建

    2019独角兽企业重金招聘Python工程师标准>>> 公众号简介 微信公众号有订阅号.服务号.企业号,在注册的时候看到这样的信息,只有订阅号可以个人申请,服务号和企业号要有企业资质 ...

  2. 微信公众号开发本地环境开发_如何在5分钟内使HTTPS在本地开发环境上工作

    微信公众号开发本地环境开发 Almost any website you visit today is protected by HTTPS. If yours isn't yet, it shoul ...

  3. 微信公众号测试账号总结

    微信公众号测试账号总结 微信公众号 微信公众号测试账号 申请测试账号 配置微信公众号测试账号 接口配置信息 JS接口安全域名,模板消息接口 网页授权获取用户基本信息 微信公众号 微信公众号测试账号 在 ...

  4. springmvc开发微信公众号接口 微信公众号测试账号配置接口Token验证

    转:springmvc开发微信公众号接口 微信公众号测试账号配置接口Token验证 开发前必读以及准备工作: 1.微信公众平台开发是指为微信公众号进行业务开发,为移动应用.PC端网站.公众号第三方平台 ...

  5. 微信公众号测试账号申请,后台获取公众号关注取关事件,获取用户发送消息

    目录 1.访问微信公众号平台 2.扫码登录 3.登录后进行接口信息配置 4.完成以上配置和代码,将代码部署到服务器上,后台就可以接收到公众号的关注.取关.用户发送的消息等等事件拉! 1.访问微信公众号 ...

  6. 1、微信公众号开发之环境搭建

    一.微信开发环境搭建 1.申请一个测试的公众号. 2.用来调式代码的开发环境. 1.1注册测试公众号(为什么要注册测试公众号:因为接口多,适合学习和研究.) 测试公众号的注册地址为:http://mp ...

  7. 微信公众号开发本地环境搭建

    我又来了,这次毕业设计要做微信公众号开发. 了解了一下,一般用PHP语言进行开发.在Windows 平台上一般采取Windows+Apache+MySQL+PHP. 配置起来比较麻烦,采取傻瓜式一键安 ...

  8. python+Appnium微信公众号测试实战(坑已填平)

    一.启动Appium服务 有两种方法启动Appium服务 1.客户端启动 启动appium-desktop,点击Start Server按钮 如下图,appium服务已启动 2.命令行启动 命令行输入 ...

  9. 微信公众号测试环境开发

    在公众平台沙箱环境中注册 https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index ...

最新文章

  1. 汇总|Yolo开源项目
  2. 白鹭php源码,白鹭/CDNDrive
  3. 除了“团队牛”还有“饭菜香”,百度 IDL 招聘算法实习生
  4. 2019年以后ArcGIS 调用天地图的资源URL
  5. clang 编译过程
  6. python识别复杂验证码2020_Python识别验证码!学会这步,百分之60的网站你基本都能识别了!...
  7. 基于深度学习和支持向量机的4种苜蓿叶部病害图像识别
  8. 宏基ACER Aspire R3600 REVO离子平台
  9. python语言程序设计教程答案赵璐_python语言程序设计教程课后答案赵璐
  10. C# 参数带this是什么意思(扩展方法)
  11. android 锤子桌面壁纸,锤子桌面使用技巧|锤子桌面 1.5.1 安卓版_久友下载站_壁纸美化...
  12. python qt5开发实例_python GUI库图形界面开发之PyQt5简单绘图板实例与代码分析
  13. 小米笔试题 风口的猪-中国牛市
  14. springboot工程中生成二维码(Java)
  15. C语言数字图像处理---2.1 二值图像形态学算法
  16. freemarker模板中long类型问题
  17. 用JS 来简单计算一下现在距离9月10号还有几天几时几分几秒
  18. VisionPro基础篇(一): VisionPro界面介绍
  19. URLLC关键技术和网络适应性分析
  20. 学计算机的心理300字,心理作文300字3篇

热门文章

  1. 校园网免认证登录连接软件
  2. ubuntu双屏幕显示设置
  3. 数组习题(7):电文加密
  4. 教学中利用计算机软件,【计算机应用论文】计算机应用软件教学方法(共2300字)...
  5. MOD17A3数据下载
  6. FPGA-任务五、十字路口交通控制灯器系统设计(二)
  7. 教师计算机网络培训总结报告,教师培训工作总结范文三篇
  8. python神器_Python的三大神器,你知道是哪三大吗?史上最详细的入门教程!
  9. group policy client 服务未能登录拒绝访问解决方案
  10. 【苹果推】软件安装证书在AppID配置中创建结构