为什么需要自动化测试
软件测试是软件开发的重要组成部分,是贯穿整个软件生命周期,对软件产品进行验证和确认的活动过程,其目的是尽早发现软件产品中存在的各种问题,如与用户需求、预先定义不一致等问题。
随着代码库的增长,需要确保自己没有破坏自己以前可以正常运行的任何功能。测试覆盖率越高,代码将越灵活且具有更好的抗错误性。
单元测试
对软件中的最小可测试单元进行检查和验证,具体来说就是开发者编写一小段代码,用于检验被测代码的一个很小的,很明确的功能是否正确。
集成测试
集成测试,也叫组装测试或联合测试。在单元测试的基础上,将所有模块按照设计要求(如根据结构图)组装成为子系统或系统,进行集成测试。 也就是说,在集成测试之前,单元测试应该已经完成,因为如果不经过单元测试,那么集成测试的效果将会受到很大影响,并且会大幅增加软件单元代码纠错的代价
系统测试
是对整个系统的测试,将需测试的软件,作为整个基于计算机系统的一个元素,与计算机硬件、外设、某些支持软件数据等其他系统元素及环境结合在一起测试, 系统测试的目的在于通过与系统的需求定义作比较,发现软件与系统定义不符合或与之矛盾的地方。
接口测试流程
接口测试一般遵循如下流程,细节部分可根据实际项目情况进行调整。
编写接口测试计划
一般来说,接口测试计划包含概述、测试资源、测试功能及重点、测试策略、测试风险、测试标准。
编写、评审接口测试用例
和功能测试类似,在开始接口测试前,需要根据需求文档、接口文档等项目相关文档编写并评审接口测试用例。
执行接口测试
依据编写的接口测试用例,借助测试工具(如 Postman、JMeter、SoapUI 等)执行接口测试,上报发现的问题。
接口自动化测试持续集成要点
进行项目测试时,接口会增加、减少或变更,测试用例也会相应更新,因此需要借助工具(如 GitHub 等)来维护测试用例进行持续集成,通过自动化测试实时监控项目接口运行情况。对接口测试而言,持续集成是核心内容,通过自动化的手段才能做到低成本、高收益。接口自动化测试持续集成主要包括以下内容。
① 流程方面。在回归阶段加强接口异常场景的覆盖,并逐步向系统测试、冒烟测试阶段延伸,最终达到全流程自动化。
② 结果展示。更加丰富的结果展示、趋势分析、质量统计和分析等。
③ 问题定位。报错信息、日志更精准,方便问题复现与定位。
④ 结果校验。加强自动化校验能力,如数据库信息校验。
⑤ 代码覆盖率。不断尝试由目前的黑盒向白盒下探,提高代码覆盖率。
⑥ 性能需求。完善性能测试体系,通过自动化的手段监控接口性能指标是否正常。
初识postman
创建一个request
将请求保存到collection
运行collection
编写测试用例
postman 内置包含了一些js模块(chai,lodash,tv4 uuid xml2js)等,具体可以查看文档
只需要require 就可以使用
代码语言:javascript复制var uuid = require('uuid');
console.log(uuid())
HTTP响应状态码
1××:指示信息,表示请求已接收,继续处理。 2××:成功,表示请求已被成功接收、理解和接受。 3××:重定向,要完成请求必须进行更进一步的操作。 4××:客户端错误,请求有语法错误或请求无法实现。 5××:服务器错误,服务器未能实现合法的请求。 以下对常见状态代码和状态描述进行说明。 200 OK:客户端请求成功。 400 Bad Request:客户端请求有语法错误,不能被服务器所理解。 401 Unauthorized:请求未经授权。 403 Forbidden:服务器收到请求,但是拒绝提供服务。 404 Not Found:请求资源不存在,如输入了错误的 URL。 500 Internal Server Error:服务器发生不可预期的错误。 503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常。
测试脚本流程
Pre-request 在请求之前,tests在请求之后。
项目示例
我们可以使用官方模板来,查看如何编写测试用
- 注册登录,用户鉴权
- rest API
TDD测试驱动开发
在开发功能代码之前,先编写单元测试用例代码,是敏捷开发中的一项核心实践和技术,也是一种设计方法论。
- 接口路径
- 接口状态码
- 请求参数
- 返回结果
postman 脚本 newman
Newman是Postman的命令行运行程序,要运行Newman,请确保您具有Node.js> = v10
安装
代码语言:javascript复制yarn init -y //项目初始化
yarn add newman //安装newman
使用
新建一个js文件index.js
, ./sample-collection.json
文件可以通过postman导出。
const newman = require('newman');
// call newman.run to pass `options` object and wait for callback
newman.run({
collection: require('./sample-collection.json'),
reporters: 'cli',
environment: {
name: 'dev',
values: [
{
key: 'base_url',
value: 'http://10.1.11.235',
enabled: true,
}
],
},
}, function (err) {
if (err) { throw err; }
console.log('collection run complete!');
});
运行
node index.js
就可以运行,运行完成后测试报告就打印在命令行中。
安装 newman-reporter-html
, 修改报告生成,就可以生成html 形式的测试报告
...
- reporters: 'cli',
reporters: ['cli',html],
...
文件上传
将上传文件sample-file.txt
和collection.json
在同一个目录中就可以测试文件上传接口。
{
"info": {
"name": "file-upload"
},
"item": [
{
"request": {
"url": "https://postman-echo.com/post",
"method": "POST",
"body": {
"mode": "formdata",
"formdata": [
{
"key": "file",
"type": "file",
"enabled": true,
"src": "sample-file.txt"
}
]
}
}
}
]
}
持续集成
整合github
整合Jenkins
总结
优点
- Postman 安装简单、使用方便、功能强大,另外,这也是开发人员常用的接口调试工具
- 接口文档生成,版本管理
- 导入导出
- CI/CD 对接到各个平台
缺点
- request名称重复容易导致请求错误
- 客户端编写js,不是很方便,没有代码自动提示