如何做好前端端联调

认知(讨论)

  • 为什么要联调?
  • 联调都干些什么?

联调的问题

联调就是后端不好好写单元测试与集成测试,让前端发请求调用以达到测试的目的;前端不好好写Mock和测试,让后端输出数据以达到测试的目的。

更正确地认识

  • 联调是前后端一起见证靠谱的测试结果
  • 给需求方提供一个正确的需求验证环境
  • 尽早暴露前后端实现的问题

联调必备技能

  • DNS与HOSTS
  • DNS(Domain Name System)的认识
  • DNS提供将域名解析为IP
  • 域名只是便于记忆,真正起作用的还是IP
  • GFW作用,HOST翻墙
  • 域名解析顺序
  • 浏览器缓存>浏览器代理>HOST文件>系统DNS缓存
  • 本地DNS服务器>上级DNS>…>顶级DNS

HOST配置的姿势

  • 直接修改HOSTS文件
  • 使用Chrome应用 HostAdmin App,也有Firefox插件HostAdmin
  • 使用HOST管理工具 SwitchHosts
  • 使用Charles/Fiddler HOST配置
  • 使用FEKit/YKit 代理配置 Jerry Proxy
  • 更改HOST不即时生效问题

原因

  • 浏览器有HOST缓存
  • 浏览器复用了原有HOST的Socket连接

解决办法

重启浏览器或者打开新的浏览器
使用Charles/Fiddler等代理,避免此问题
使用Chrome工具,强行重置Socket连接

代理服务配置

  • Chrome浏览器代理SwitchySharp 或者 SwitchyOmega
  • 系统代理使用Charles/Fiddler 抓取请求包

代理服务HTTPS抓包问题

  • 打不开页面? 需要根据Charles Help菜单中规则添加Charles根证书
  • 某些包解不开?需要在Charles代理设置里面配置具体的解包域名
  • 线上证书不安全?解包后再封的包跟原来的有些区别,需要单独打开对应页面进行信任

特定场景的调试姿势

PC/Touch页面

  • 配置前后端环境
  • 配置HOST
  • 直接使用浏览器及浏览器模拟器调试
  • 如果只是前端更改,在不影响数据的情况下,可以使用线上页面调试

App页面

真机调试

  • 手机上安装Beta包,使用数据线连上电脑
  • 允许调试或者开启Inspect
  • 通过chrome://inspect 或者Safari的开发者工具进行调试

    模拟器调试

  • Xcode模拟器

  • 搞一个可以在模拟器里面跑的App
  • 将App拖入模拟器,然后打开,用Safari开发者工具调试

微信调试

  • TBS Studio Android系统下基于Webview的应用调试(腾讯家的)
  • 微信开发者工具 微信jsAPI相关调试
  • weinre 通用的调试工具

如何更有效地联调

明确前后端的约定

  • 根据需求一起约定交互的内容
  • 包括但不限于如下内容
  • 接口名称、请求路径、请求方式
    • 返回字段结构、对应字段名和字段类型以及字段边界值
    • 异常情况数据约定
  • 一份逼真的样例数据
  • 前端可以根据这个数据造出各种数据

后端对约定的履行

  • 根据约定实现相应的需求
  • 使用Postman 进行接口测试
  • 使用浏览器进行接口jsonp功能测试

前端对约定的履行

  • 根据约定实现相应的需求
  • Mock数据
    • 使用FEKit Mock数据
    • 使用YKit Mock数据
    • 使用Charles/Fiddler 代理接口响应
    • 任意其他Mock,代理,转发工具获取Mock数据
  • 通过变换Mock数据,进行功能测试

真正的联调

  • 前端完成自测
  • 后端完成自测
  • 一起验证需求的实现

友情建议

  • 远离关键路径,合理调配时间——别拖后腿
  • 把握全局进度,提高整体效率——别浪费时间
  • 积极沟通交流,主动推进联调——别甩锅

经验之谈

  • 在与本地后端联调时,如果打开网络代理(shadowsocks…),可能会连接失败
文档更新时间: 2019-07-22 09:54