本帖最后由 测试积点老人 于 2018-11-29 15:10 编辑
在飞速发展的互联网时代,服务端测试已经成为一个重要的产品保障手段。如何在互联网公司提供稳定的服务端接口测试,各个公司实施的方法和技术也不同,今天我们就此展开讨论学习。
互联网服务端接口自动化是各个公司都需要的一部分业务,如何快速高效地完成接口测试呢?以帮助大家实现高效的接口测试为出发点,本场 Chat 包含了我在互联网接口测试领域的一些方法和心得,希望大家一起讨论和分享,内容包括但不仅限于:
- 互联网服务端接口测试介绍;
- 接口测试常用的工具、平台、框架;
- 接口测试的一些问题和实践。
下图是经典的测试金字塔,服务接口测试就在中间位置,并占据着承上启下的作用,从这个图可以看出,服务服务端接口测试的重要性。
互联网服务端接口测试介绍目前市场上有很多支持接口测试的工具。利用工具进行接口测试,能够提高测试效率。例如让你一天完成100个接口测试任务,你觉得你加班能否完成吗?你可能会说有工具可以帮忙呀,但不是所有工具都能支持你完成这个任务。下图是我挑选的几款工具,接下来对它们简单介绍一下。
1.fiddler 首先,这是一个 HTTP 协议调试代理工具,说白了就是一个抓 HTTP 包的工具。Web 测试和手机测试都能用到这个工具。既然是 HTTP 协议,这个工具也能支持接口测试。稍后文章,我们会专门介绍 fiddler 这个工具。
2.postman 这是一款 Google 工程师开发的一个插件,可以安装到 Chrome 浏览器上。支持不同接口测试请求,能够管理测试套件和自动化运行,弱点在于,自动化断言功能不强大。不能和 Jenkins、代码管理库进行持续集成测试。但是,它绝对是一个很好的半手工,半自动化测试工具。我一般在写自动化接口测试用例,会打开 postman 进行辅助测试和 Debug。这个工具稍后也会在文章中介绍。
3.wireshak 这是一款抓包工具,支持抓各种包,对 TCP、UDP、HTTP 都支持。如果做底层网络数据测试,一般都需要用到它。作为接口测试,这个软件有点不友好。因为刷新数据太快,不好定位每个操作对应的接口。所以,在这里不准备过多介绍该工具。
4.soupUI 这是一款提供有开源免费版和企业收费版的软件。在国外的接口测试中,使用较多。该工具能够支持接口自动化测试和接口性能测试,也支持和 Jenkins 做持续集成测试。了解一下就可以,可以下载一个社区免费版,做一个 Demo 试试。
5.Java 代码做接口测试 为什么要用代码做接口自动化测试呢?一些工具功能是有限制,很多公司需要一些特定的功能,工具不支持,只好用代码进行开发。一般用 Java 做自动化测试,主要利用 httpclient.jar 包,然后利用 JUnit 或者 TestNG 这样的单元测试工具,进行测试用例的开发,接着在 Jenkins 上创建一个 job,进行持续集成测试。
6.Python 代码做接口测试 和 Java 一样,用 Python 做接口测试,可以利用一个功能强大的第三方库 Requests,它能够方便地创建接口自动化用例。Python 下的单元测试框架,一般采用unittest。生成测试报告,一般选择 HTMLTestRunner.py。同样,可以结合 Jenkins 做持续集成测试。
7.LoadRunner 不要以为 LoadRunner 只能做性能测试,它同样可以做接口自动化和接口压力测试。只是我们很多人,不会利用 LoadRunner 的函数,设计接口测试用例。
8.JMeter JMeter 同 LoadRunner 一样,都以性能测试出名,一般用 JMeter 也是做接口性能测试。例如 Java+Jmeter+Ant+Jenkins 做接口性能监听测试。JMeter 如何做接口测试,可以查阅官方文档和 CSDN 博客专栏《JMeter 性能测试》 。
上面说了这么多工具,基本覆盖了接口功能测试、接口自动化测试、接口性能测试。这里提一下,推荐 Python 语言下的一个性能测试工具 Locust。自己百度并安装下,很简单的 Web 界面,作为一个轻量级的协程测试工具,感觉很不错。
服务端测试也应该具备一些计算机基础知识的能力,例如下面几个领域的知识。
操作系统和网络 互联网里最大的应用场景就是高并发、高可用、高性能的线上服务,做这类系统实际上考验的是我们对操作系统和网络的理解。任何一个系统最后都是运行在操作系统之上的,也都运行在网络之上的,包括分布式系统,所以,需要在操作系统和网络上一定要有较深的造诣,尤其是高并发和高性能。如果对操作系统原理一无所知,基本很难理解什么是并发和锁,很难理解高性能用什么指标来衡量,以及怎么实现高并发、高可用和高性能。
对于操作系统,我们必须了解 CPU 的多核体系结构、内存分页和缓存技术、磁盘 IO 的优略和网卡 IO 的情况,并且要理解计算机的工作原理,会根据这些指标粗略评估服务能够输出的性能。 对于网络,必须理解理论上定义的7层模型,了解 TCP/IP 的三次握手。另外我们在分布式服务架构中多数使用应用层的HTTP协议,所以还需要对 HTTP 协议有很深刻的理解。
算法和数据结构 应用层面的小伙伴们可能对算法和数据结构的应用比较少,即使有应用也比较简单,但是算法能力代表了一个人的逻辑思维和思考能力,能把各种基础算法理解的人智商都不会低,能够把程序写好的人逻辑思维一定很强。一般在面试小伙伴的时候,我都会考察一下他会不会高级算法,例如递归、剪枝、贪婪、动态规划。仔细想一下就会知道,会动态规划的人,他不是勤奋的就是聪明的,无论哪一样,你都有录取他的冲动。
线上高并发服务方向 线上高并发服务是个强需求,无论你开发哪类应用和网站,线上服务都是必须的,有了服务才有了功能,才有了产品,我也主要从事互联网后台高并发服务的设计与实现。解决高并发服务其实并没有那么难,这些年高并发服务的技术栈也已经没有了门槛,只要投入足够的成本,构建可伸缩的服务不是问题,达到多大的 TPS 也都不是问题,核心思想就是“分而治之,大而化下,小而化了”。 我们使用的缓存抗读、消息队列抗写、数据库分库分表、缓存分片、应用层伸缩、减少竞争、7层负载均衡、三四层负载均衡等,以及 CDN、DNS 轮训等等,这一切都是“分而治之”的思想。
大数据方向 大数据是最近比较火的方向,大小公司都在使用大数据技术。大公司使用大数据分析技术从众多数据中分析出业务模型,得出有价值的结果,来帮助企业制定市场和销售策略,中小公司多数使用大数据出报表和做风控等。
|