许式伟的架构课
许式伟
七牛云 CEO
84945 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 89 讲
许式伟的架构课
15
15
1.0x
00:00/00:00
登录|注册

加餐 | 如何做HTTP服务的测试?

env 指令
host 指令
参数化需求
断言文法
match 指令
语法结构
"quick start" 样例
"hello world" 程序
DSL 的发展历程
基础文法
问题
缺点
结语
测试环境的参数化
httptest DSL 文法
直接基于 http.Client 类写测试案例
核心诉求
早期的 HTTP 服务测试方法
七牛云的服务基于 HTTP 协议
基于 HTTP 协议提供服务的好处
如何做HTTP服务的测试?

该思维导图由 AI 生成,仅供参考

你好,我是七牛云许式伟。
基于 HTTP 协议提供服务的好处是显然的。除了 HTTP 服务有很多现成的客户端、服务端框架可以直接使用外,在 HTTP 服务的调试、测试、监控、负载均衡等领域都有现成的相关工具支撑。
在七牛,我们绝大部分的服务,包括内部服务,都是基于 HTTP 协议来提供服务。所以我们需要思考如何更有效地进行 HTTP 服务的测试。
七牛早期 HTTP 服务的测试方法很朴素:第一步先写好服务端,然后写一个客户端 SDK,再基于这个客户端 SDK 写测试案例。
这种方法多多少少会遇到一些问题。首先,客户端 SDK 的修改可能会导致测试案例编不过。其次,客户端 SDK 通常是使用方友好,而不是测试方友好。服务端开发过程和客户端 SDK 的耦合容易过早地陷入“客户端 SDK 如何抽象更合理” 的细节,而不能专注于测试服务逻辑本身。
我的核心诉求是对服务端开发过程和客户端开发过程进行解耦。在网络协议定好了以后,整个系统原则上就可以编写测试案例,而不用等客户端 SDK 的成熟。
不写客户端 SDK 而直接做 HTTP 测试,一个直观的思路是直接基于 http.Client 类来写测试案例。这种方式的问题是代码比较冗长,而且它的业务逻辑表达不直观,很难一眼就看出这句话想干什么。虽然可以写一些辅助函数来改观,但做多了就会逐渐有写测试专用 SDK 的倾向。这种写法看起来也不是很可取,毕竟为测试写一个专门的 SDK,看起来成本有些高了。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

这篇文章介绍了一种名为httptest DSL的领域专用语言,用于进行HTTP服务的测试。该DSL支持HTTP请求的发起和返回包的匹配,具有类型系统和子命令的概念,能够满足大部分测试需求。文章还提供了httptest DSL的基础文法和HTTP请求的基本形式,并给出了具体的例子来说明如何使用该DSL进行测试。通过使用httptest DSL,可以实现对HTTP服务的有效测试,解耦服务端和客户端开发过程,提高测试效率。此外,文章还介绍了httptest DSL中的match指令和测试环境的参数化,以及如何配置测试环境和执行测试脚本。总的来说,本文强调了测试在软件质量保障中的重要性,以及如何利用httptest DSL来提高开发效率。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《许式伟的架构课》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(11)

  • 最新
  • 精选
  • debugtalk
    之前我做的一个开源项目 HttpRunner 和这个倒有些相似之处。 https://github.com/httprunner/httprunner 对于DSL,有个痛点就是没法像代码那样进行单步调试。所以我也在HttpRunner中探索了语法提示和自动补全功能,以及和 python代码的互转

    作者回复: 👍

    2019-10-04
    26
  • Aaron Cheung
    测试先行在目前的开发环境下有无必要 开发人员的边界条件之类有可能没有覆盖业务条件

    作者回复: 测试先行很有必要。测试分黑盒白盒,黑盒关注业务边界,白盒两者都关注。

    2019-10-08
    2
    4
  • Charles
    加餐加的太好了,谢谢!请问下许老师,后端对应的数据库产生的测试数据如何处理的?测试环境还好,生产环境呢?如果是代码处理的话,处理逻辑是放在后端吗?

    作者回复: 生产环境一般用测试账号,测试数据会在测试前进行清理。清理的处理逻辑一般都在测试代码中。

    2019-10-08
    2
    1
  • mickey
    如果后端是连接数据库的,怎样做动态的自动化测试呢?

    作者回复: 这个不影响,只需要在测试前数据库是在运行中的就行

    2019-10-05
  • 丁丁历险记
    笔记 1 准备上班后下载使用,做中学 2 去关注开发人员日常工作过程中的不爽和低效率是非常有必要的。任何开发效率提升相关的工作,其收益都是指数级的。
    2019-11-04
    4
  • ifelse
    学习打卡
    2023-09-17归属地:浙江
  • alswl
    跟之前设计的基于 pyresttest 集成测试(e2e)方案思路挺一致的 https://testerhome.com/topics/6134 现在一旦让我设计 DSL,第一反应就是往 YAML 作为载体。
    2022-12-08归属地:上海
  • 不温暖啊不纯良
    读完第一段的时候我脑子里出现了一个场景,一个叫http的店铺在街上吆喝:"服务便宜卖,客户端服务1元1斤,服务的服务2元1斤,服务后测试/调试/监控/负载均衡等",一个叫七牛的人说:"来个服务端的测试服务".接着他又找到github店铺,看见今日特价:httptest DSL测试工具,心想:'这个不错,刚好好http测试服务配合用,买回家改造改造'.接着就是使用场景了,七牛把客户端和服务端交给了两个不同的人去干,于是用http测试服务使得他俩不用在一起干活,就能完成互相测试.最后是隐藏敏感信息,测试用例是写好了,但ip/密码/AK/SK等信息一定要配置起来,于是就有了后面的 host foo.com等代表敏感信息的单词.
    2021-05-11
  • Run
    很好
    2021-03-03
  • Jowin
    测试用例是移定的,SDK是不断变化的。
    2020-06-04
收起评论
显示
设置
留言
11
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部