URL结构解析&接口测试
一、URL结构解析
我们经常在浏览器中访问各种各样的url,但是你知道一个url里面都包含了什么吗?每个组成的部分他起什么作用?
URL一般是由三部分组成,协议、主机IP地址以及主机资源的具体地址(就是带层次的文件目录)
下面我们拆分一个标准的URL来具体说明一下:
- http是这个URL所用的协议,协议后面的//为分隔符。我们一般常见的请求协议有HTTP和HTTPS,其实还有FTP和FILE这两种种文件传输协议。http是超文本传输协议,http协议是用明文的方式传输数据的,不进行任何数据加密,所以它不适合用来传输一些敏感信息;https其实就是http协议的加密版本,他是在http下加入了ssl层,https的安全基础是ssl,可以进行加密传输比http更安全,但也不是绝对安全的。
- 域名部分:这里的域名就是服务器的地址,一般用域名+主机名来一起定义服务器的地址,比如说https://center.tapque.com/the_olap_center/#/home/DataBoard这里的center.tapque.com其实就是我们要访问的服务器地址
- 服务器端口号:在域名后面是服务器的端口号,http协议一般默认是80端口,https协议一般默认是443端口号
- 带层次的文件路径:从第一个“/”到最后一个"/“之间是虚拟目录部分,从域名后的最后一个”/"开始到“?”位置是文件名部分,如果无“?”就是 从域名后的最后一个“/”开始到“#”为止,是文件部分,如果没有“?”和“#”,那么从域名后的最后一个“/”开始到结束,都是文件名部分。文件名用来定义文档或资源的名称,和路径类似,路径指的是文件夹,而它指的是文件夹中的文件。
- 查询字符串:从"?“到”#“之间的参数就a是查询字符串,以键值对(key value)的形式存在,键值对之间使用一个&间隔开,一般get请求会将请求参数放在url的问号后面,post请求方式会将请求参数放在request body中
- 片段标识符:从“#”开始到最后,不是必须的。
其实你自己去尝试定义一个接口,就了解了接口的构成了,可以去用python的flask或者django框架尝试自己去本地启动一个本地服务器,然后为服务器定义一些简单的接口请求。
二、如何进行接口测试
接口测试:接口测试是测试系统间组件接口的一种测试,主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换以及系统间的相互逻辑依赖关系等。
其实接口测试也属于功能测试,只不过相较于简单的功能测试来说更底层一点,能够测试到后端底层的一些代码。接口测试也是从业务逻辑出发、然后针对接口定义的参数进行一些组合测试、边界值分析测试、异常传参测试等,除此之外我们要考虑接口的性能以及安全问题。
为什么要做接口测试?
- 现在很多系统前后端架构是分离的,在项目周期内有时候后端接口已经开发好,前端还未开发完成无法系统提测,基于项目迭代的W模型,这个时候我们可以在前后端接口联调阶段介入测试,先对接口进行测试,提前暴露问题,降低修复成本
- 检查系统的安全性以及稳定性,前端传参不可信,因为前端页面有时候会针对用户输入做限制,但是后端接口要是没有做参数的校验的话,某些用户可以直接调用接口传入非法参数;不要认为在前端做了限制,后端接口就不用进行控制了,前端根本不能满足系统安全性,而且很容易就可以绕过。
- 接口测试相对容易实现持续化的自动化集成,相对UI自动化来说比较稳定,因为前端的UI展示可能会变动,但是后端的接口相对来说变动较少比较稳定
怎样进行接口测试?
实际工作中我们项目前后端主要是基于http或者https协议的接口,所以测试接口是主要是通过工具或者代码模拟http请求的发送与接收。工具有很多,例如:postman、jmeter、apipost等。
我们对照开发给出的wiki文档,按照接口的测试用例进行传参,验证接口返回的code码以及输出的参数是否正确,还有针对一些异常的传参接口是否有定义对应的message提示。
接口测试的重点:
- 检查接口返回的数据是否与预期结果一致
- 检查接口的容错性,加入传递的参数数据类型错误是否可以处理
- 接口参数的边界值。例如,传递的参数足够大或者为负数时,接口是否可以正常处理
- 接口的性能,http请求接口一般与后端执行SQL语句性能/算法等比较相关
- 接口的安全性,外部调用的接口尤为重要
接口测试用例从哪些方面去考虑?
上面说的只是针对单个接口测试或者业务中做个接口串行在一起的测试,要是想针对整个业务流程做系统化的可维护的接口自动化测试,接口自动化测试框架可以基于Python中的pytest框架或者unitest框架,针对这些框架内的一些方法按照自己的业务需求进行重构。
什么样的项目适合做接口自动化
- 任务需求明确不会频繁变动
- 产出的效益高于投入
- 测试预留的时间比较充裕可以有时间去写接口自动化的脚本