湛江网站建设公司哪家好,微信小程序开发费用一览表,深圳建外贸网站,湛江制作企业网站Postman最基本的功能用来重放请求#xff0c;并且配合良好的response格式化工具。
高级点的用法可以使用Postman生成各个语言的脚本#xff0c;还可以抓包#xff0c;认证#xff0c;传输文件。
仅仅做到这些还不能够满足一个系统的开发#xff0c;或者说过于琐碎#…Postman最基本的功能用来重放请求并且配合良好的response格式化工具。
高级点的用法可以使用Postman生成各个语言的脚本还可以抓包认证传输文件。
仅仅做到这些还不能够满足一个系统的开发或者说过于琐碎你仍需要频繁地在开发环境测试环境生产环境中来回切换。单一的请求也不够你需要维护系统所有API的请求并且每个请求还带有不同的querystring和body。
1、Collection
对服务器端的所有请求按功能或者业务模块进行组织使用markdown对所有请求和示例添加适当的描述这时候就用到了Collection。以下是postman的一些术语以及组织请求的建议。
详细参考PostmanSDKConcepts以及creatingcollections。
Collection对应一个Application组内各个成员(server,client,QA)共享一个Collection。可以对整个Collection添加测试文档。对于一开始未在postman组织请求的应用可以设置Proxy跑一遍应用对应用的所有请求进行抓包。
Folder(Item Group)对应一个模块或者各层级子路由。如router.use(‘/users’)所有的请求都在一个Folder可以根据路由互相嵌套Folder。
Request(Item)对应一个请求可以添加认证信息。也可以设置代理进行抓包。详见capturinghttprequests。
Example对应一个请求不同的参数以及响应用于MockServer以及文档。
postman可以根据Collection的结构生成文档与MockServer。不过都是付费功能免费版有次数限制。
2、文档
postman自动生成文档有助于团队协作解决了手动写文档以及更新不及时的重大bug。
对于GET请求Postman上可以添加对该字段的描述生成文档。
对于POST以及PUT请求如果Content-Type是form-data或者x-www-form-urlencoded可以添加描述生成文档。不过如今传递json更方便灵活所以application/json也会有很多而且json又是不能添加注释的。如果需要对json添加文档说明的话可以添加冗余字段_{key}.comment标明注释 不过这样冗余字段过多更好的解决方案是在测试中对请求进行json校验同时充当了一部分文档的功能。毕竟json-schema就是用来描述数据使数据更加可读。
以上说到请求对于响应的文档可以json-schema校验或者每个字段的描述以及更多的测试用例代表更多的细节。
3、Mock
当服务器端还没有写好API时客户端可以根据Examples来生成MockServer。
建议客户端端自己做Mock与项目集成在一起纳入版本控制方便灵活。强烈推荐json-server简单好用。
4、测试
对于每一个Request都需要有测试用例。验证响应是否成功响应时间是否过长或者响应json的数据类型是否正确。
测试可以使用pm.expect进行BDD测试风格和chai很像如果熟悉chai就很容易上手。
postman内置了一些第三方库如果你更喜欢chai可以直接使用也可以使用pm.expect底层使用chai实现与chaiBDDAPI一致。
postman也有一些http相关的测试API如statuscodeheader,body并且也提供了一些snippets。 5、Json Schema json-schema可以用来描述json信息使json更加易读同时也可以用来校验json的合法性。主流语言都有实现json-schema的库。
建议对所有GET响应进行json-schema校验一来校验数据二来也可以作为文档使用使用tv4校验json。 同样对于请求也可以添加json校验不过更复杂一些因为postman没有直接给出获取全部请求参数的api需要自己解析和计算 如果postman可以根据请求参数的json-schema自动生成数据就好了…
参考
json-schema.org
tv4Documentaion
chaibdd-API
postmansandboxapireference
6、测试请求参数
一个请求带有若干参数如GET的querystring(search)以及POST的body不同的参数会有不同的响应。
假设一个请求不同参数返回的jsonschema完全不同则可以写成两个Request分开测试。如果返回的jsonschema相同只是值不同则需要考虑传递了哪些参数参数是多少。
一个经典的场景根据filter来筛选符合条件的列表。拿用户列表举例伪代码如下 一个思路是根据请求的参数进行测试一段重要的snipet是在postman中获取querystringquery是一种PropertyList的数据定义在postman-collection-PropertyList。如下 当然以上filter只包含了最简单的场景其中只涉及到了相等测试。但是有不等以及包含关系呢。 这种请求参数依赖于前后端的协商交流当然对测试或者一个不知情的开发来说很不友好的。
当然对于后端也是不友好的因为需要对你传入的每个query来进行处理而且以后每添加一个筛选字段都需要手动改一下。
可以由前端自行决定需要筛选的数据比如使用类似于mongo的检索语法。
graphql是相当酷的值得尝试一下。 不过这对于测试的开发能力要求也比较高了测试人员需要解析参数并且测试接口。
7、测试多次请求
当对一个函数进行单元测试时需要大量的输入以及期望输出在postman中可以使用data来模拟多次输入。
data是一种变量只能在Runner中使用有必要对每个Folder建立相关的datafile并且加入版本控制。
using csvan djson files in the postman collection runner
8、集成测试
单个API测试通过后需要把所有请求集成在一起进行测试。这时候出现了两个问题
如何确保API依赖
API之间如何传递数据
请求在Collection的顺序就是他们的发起请求的顺序如果需要强制更改顺序可以使用setNextRuest()
在postman中有三种作用域的数据dataenvironmentglobal。在请求中用{{}}占位符替代。
environment可以用来更改HOST避免在url中频繁手动切换本地环境开发环境和生产环境。另外也可以用来传递数据。
一个常见的场景是项目使用token来保存登录信息每次请求都需要携带token。可以在登录的测试代码中设置token的环境变量。 9、测试Collection
确保依赖后可以对Collection新建一个Runner并且引入一个data文件来测试所有的请求。对局部的Folder也可以使用Runner以及data进行测试。
最新版本的postman已经可以支持为每个Postman新建变量以及Test
所有的请求都会有一些共同测试比如测试接口是否响应成功以及以上提到的测试filter。 10、持续集成
当可以测试Collection后需要对测试加入版本控制与项目集成在一起保留测试记录以便准时定位bug。可以与postman的官方工具newman集成在一起但是有一点不方便的是持续集成仅仅可以保存记录并不能还原记录。
11、对比UI自动化测试
按照我的理解UI自动化测试目的是用来测试流程是否通畅比如登陆注册退出如果用例没通过则截屏。但是前端需求的不断变化加上现在各种前端框架导致selector不是特别容易获取到且流程容易更改。
而API自动化测试用来测试数据是否正确。而且大部分问题是出在数据问题上所以API自动化测试性价比比较高一些。
12、总结
1如何编写测试用例
postman底层使用chai.js的bdd语法作为断言库另外加了一些特有的语法。
2如何debug
点击菜单栏View-ShowDevtools(ShowPostmanConsole)可以查看响应检查输出不过不能打断点。对于系统的单个请求可以使用Proxy监听请求进行调试。
3如何使用js第三方库对请求就行预处理以及后处理
比如:发送请求时服务器端要求时间为timestmap(unix)的格式但接口调试时可读性过弱是否可以使用moment转化时间。
收到响应时也需要moment对时间进行解析获得更好的展现形式。或者使用lodash一些函数进行数据的处理。
可以在Tests和Pre-requestScript中编写脚本对请求以及响应做一些处理。但是不能对数据格式化比如日期。 建议前后端交流日期时使用ISO格式的字符串前后端都容易解析并且可读性强。
4如何管理请求依赖
比如:两个API需要有依赖关系比如当创建完一个用户后注册获取他的个人信息。获取个人信息就需要依赖创建用户这个API使用Environment Variables可以管理依赖。
5如何设置统一的请求参数
比如:大部分接口都需要统一的token参数。目前好像没什么办法。
6如何集成到服务器端项目中
如果系统后续版本没有通过API测试则保留测试记录是很重要的版本控制可以得知该时间段内的代码变更。以git为例需要每次提交后运行测试并保留测试结果。可以使用npm包newman来集成到项目中。
文章来源网络 版权归原作者所有
上文内容不用于商业目的如涉及知识产权问题请权利人联系小编我们将立即处理