Files
httprunner/docs/background-CN.md
2017-07-23 12:30:25 +08:00

44 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## 背景
当前市面上存在的接口测试工具已经非常多,常见的如`Postman``JMeter``RobotFramework`等,相信大多数测试人员都有使用过,至少从接触到的大多数简历的描述上看是这样的。除了这些成熟的工具,也有很多有一定技术能力的测试(开发)人员自行开发了一些接口测试框架,质量也是参差不齐。
但是,当我打算在项目组中推行接口自动化测试时,搜罗了一圈,也没有找到一款特别满意的工具或框架,总是与理想中的构想存在一定的差距。
那么理想中的接口自动化测试框架应该是怎样的呢?
测试工具(框架)脱离业务使用场景都是耍流氓!所以我们不妨先来看下日常工作中的一些常见场景。
- 测试或开发人员在定位问题的时候,想调用某个接口查看其是否响应正常;
- 测试人员在手工测试某个功能点的时候,需要一个订单号,而这个订单号可以通过顺序调用多个接口实现下单流程;
- 测试人员在开始版本功能测试之前,可以先检测下系统的所有接口是否工作正常,确保接口正常后再开始手工测试;
- 开发人员在提交代码前需要检测下新代码是否对系统的已有接口产生影响;
- 项目组需要每天定时检测下测试环境所有接口的工作情况,确保当天的提交代码没有对主干分支的代码造成破坏;
- 项目组需要定时30分钟检测下生产环境所有接口的工作情况以便及时发现生产环境服务不可用的情况
- 项目组需要不定期对核心业务场景进行性能测试,期望能减少人力投入,直接复用接口测试中的工作成果。
可以看到,以上罗列的场景大家应该都很熟悉,这都是我们在日常工作中经常需要去做的事情。但是在没有一款合适工具的情况下,效率往往十分低下,或者就是某些重要工作压根就没有开展,例如接口回归测试、线上接口监控等。
先说下最简单的手工调用接口测试。可能有人会说,`Postman`就可以满足需求啊。的确,`Postman`作为一款通用的接口测试工具,它可以构造接口请求,查看接口响应,从这个层面上来说,它是满足了接口测试的功能需求。但是在具体的项目中,使用`Postman`并不是那么高效。
不妨举个最常见的例子。
> 某个接口的请求参数非常多,并且接口请求要求有`MD5`签名校验签名的方式为在Headers中包含一个`sign`参数,该参数值通过对`URL`、`Method`、`Body`的拼接字符串进行`MD5`计算后得到。
回想下我们要对这个接口进行测试时是怎么做的。首先我们需要先参照接口文档的描述手工填写完所有接口参数然后按照签名校验方式对所有参数值进行拼接得到一个字符串在另一个MD5计算工具计算得到其MD5值将签名值填入`sign`参数;最后,才是发起接口请求,查看接口响应,并人工检测响应是否正常。最坑爹的是,我们每次需要调用这个接口的时候,以上工作就得重新来一遍。这样的实际结果是,面对参数较多或者需要签名验证的接口时,测试人员可能会选择忽略不进行接口测试。
除了单个接口的调用,很多时候我们也需要组合多个接口进行调用。例如测试人员在测试物流系统时,经常需要一个特定组合条件下生成的订单号。而由于订单号关联的业务较多,很难直接在数据库中生成,因此当前业务测试人员普遍采取的做法,就是每次需要订单号时模拟下单流程,顺序调用多个相应的接口来生成需要的订单号。可以想象,在手工调用单个接口都如此麻烦的情况下,每次都要手工调用多个接口会有多么的费时费力。
再说下接口自动化调用测试。这一块儿大多接口测试框架都支持普遍的做法就是通过代码编写接口测试用例或者采用数据驱动的方式然后在支持命令行CLI调用的情况下就可以结合`Jenkins`或者`crontab`实现持续集成,或者定时接口监控的功能。
思路是没有问题的,问题在于实际项目中的推动落实情况。要说自动化测试用例最靠谱的维护方式,还是直接通过代码编写测试用例,可靠且不失灵活性,这也是很多经历过惨痛教训的老手的感悟,甚至网络上还出现了一些反测试框架的言论。但问题在于项目中的测试人员并不是都会写代码,也不是对其强制要求就能马上学会的。这种情况下,要想在具体项目中推动接口自动化测试就很难,就算我可以帮忙写一部分,但是很多时候接口测试用例也是要结合业务逻辑场景的,我也的确是没法在这方面投入太多时间,毕竟对接的项目实在太多。所以也是基于这类原因,很多测试框架提倡采用数据驱动的方式,将业务测试用例和执行代码分离。不过由于很多时候业务场景比较复杂,大多数框架测试用例模板引擎的表达能力不足,很难采用简洁的方式对测试场景进行描述,从而也没法很好地得到推广使用。
可以列举的问题还有很多,这些也的确都是在互联网企业的日常测试工作中真实存在的痛点。
基于以上背景,我产生了开发[`ApiTestEngine`][ApiTestEngine]的想法。
对于[`ApiTestEngine`][ApiTestEngine]的定位,与其说它是一个工具或框架,它更多的应该是一套接口自动化测试的最佳工程实践,而`简洁优雅实用`应该是它最核心的特点。
当然,每位工程师对`最佳工程实践`的理念或多或少都会存在一些差异,也希望大家能多多交流,在思维的碰撞中共同进步。
[ApiTestEngine]: https://github.com/debugtalk/ApiTestEngine