API测试处于测试金字塔的中间段,它比单个单元测试测试的范围更广,但是,也不那么稳定,只要测试内容任何一个地方出错,都会导致这个测试挂掉。由于,它的粒度没有单元测试细,也不会去测试实现逻辑。因此,对于需要重构的项目,API级别的测试是很推荐的。
API测试成本对比
写成本 | 维护成本 | 运行成本 | |
---|---|---|---|
API测试 | 低 | 高 | 高 |
单元测试 | 高 | 低 | 低 |
因此,API测试不宜太多,不然就会违反Fast原则。所以,一般API测试,只会用于Happy Pass,对于Bad Pass,可能就用单元测试去覆盖。
无外部依赖
- Junit
- Springframework Test
- Mockito
- restAssure
有外部依赖
数据库
可以使用FlywayTest(https://github.com/flyway/flyway-test-extensions),DbUnit(http://dbunit.sourceforge.net/)进行测试数据管理,也可以自己管理。但是一定要注意,每个测试都需要独立,不能因为其他测试把数据改了,导致测试挂掉。
使用三方数据库
- 本地/CI环境安装测试用的数据库
- 数据库要与线上完全一致
- docker,使用同版本的镜像
- 使用嵌入式数据库进行测试
- H2
- Embedded Mongo
- HyperDB
mock数据库层
- mockBean
- fakeRepo
三方系统
- mock server
- http
- postman: https://learning.getpostman.com/docs/postman/mock-servers/setting-up-mock/
- swagger inseptor: https://swagger.io/tools/swagger-inspector/
- mountebank: http://www.mbtest.org/docs/api/mocks
- mock-server: http://www.mock-server.com/mock_server/getting_started.html
- moco: https://github.com/dreamhead/moco
- wiremock: http://wiremock.org/
- 自己写
- rpc 没找到
- tcp/udp 只能自己写啦
- http
- mock/fake client/gateway
- mockito
- 基于接口自己写
网友评论