《Web接口开发与自动化测试基于Python语言》–读书笔记
第7章 接口相关概念
7.1 分层的自动化测试
- 测试金字塔模型:
- 分层自动化测试模型:
传统自动化测试: 基于产品UI层的自动化测试,它是将黑盒功能测试转化为由程序或工具执行的一种自动化测试。
分层自动化测试: 从黑盒(UI)单层到黑白盒多层的自动化测试体系,从全面黑盒自动化测试到对系统的不同层次进行自动化测试。
7.2 单元测试与模块测试
单元测试(Unit Testing)
单元测试是英语程序的最小可测试部分;
在面向对象编程中,单元也可以是整个模块,但场景的是单个函数或过程;
在面向对象编程中,单元通过是整个接口,例如类,但可以是单独的方法;
单元测试多少情况下是由程序员自己完成的。
模块测试(Module Testing)
模块测试与单元测试有细微的区别;
模块测试是针对具有明显功能特征的代码块进行的测试;
单元测试智商设计测试一小部分的功能;
模块测试多数情况下由其他程序员或测试人员进行。
单元测试强调的是程序的最小可测试单元
模块测试更强调被测试程序功能的完整性
模块接口测试: 模块测试+接口测试,强调了被测试的模块有规范的输入和输出。
7.3 接口测试
程序接口: 程序是提供了输入输出的类、方法、函数。程序接口测试使用相同编程语言,通过对类、方法、函数的调用,验证其返回结果是否正确来进行测试。
协议接口: 系统通过不同的协议提供的接口,例如使用HTTP/SOAP协议,这种类型的接口对底层代码做了封装,通过协议的方式对外提供调用。因为不涉及底层程序不受编程语言的限制,多由测试人员完成。
7.3.1 接口的分类
系统与系统之间的接口
公司内部不同系统之间调用的接口,eg:活动报名、活动投票;
公司内部与外部系统之间调用的接口,eg:微信、微博提供的第三方登录接口;
下层服务对上层服务的接口
应用层:系统提供的UI层功能,eg:浏览器页面上的登录、注册、查询等。
Service层:可以理解为服务器所提供数据的处理。
DB层:数据库主要用来存放数据。
举例说明各层之间的调用顺序:
一个用户查询功能,用户输入查询的关键字,并显示查询结果。
首先,底层调用Service层所提供的查询接口,查询接口得到应用层调用的查询数据;
然后,再通过DAO(Data Access Object)访问数据库,根据用户输入的查询数据,查询数据库中的数据;
最后,将查询到的数据库数据返回给应用层,用户在应用层查看查询结果。
应用层与Service层: 通过HTTP接口进行访问
Service层与DB层: 通过DAO数据库访问接口访问
- 系统内部,服务与服务之间的调用
这种接口,多指程序之间的调用。eg:用户信息接口、用户抽奖接口。
用户查询接口,输入用户名,返回用户信息,如果用户不存在则返回null;
用户抽奖接口,该接口需要用户名和抽奖活动id,抽奖接口得到用户名后可以调用用户查询接口,如果用户查询接口返回null,那么抽奖接口就可以直接返回用户不存在了。
用户抽奖接口调用的就是用户查询接口。
7.3.2 接口测试的意义
- 更早的发现问题
单元测试和接口测试是更早介入测试的两个方面,接口测试可以在功能界面未开发出来之前对系统的接口进行测试,从而可以更早地发现问题并以更低的成本修复问题。
- 缩短产品研发周期
更早介入测试带来的另一个好处就是可以缩短产品周期,接口测是介入可以更早地发现并解决bug,使得留到功能测试阶段被修复的bug减少,从而缩短整个项目的上线时间。
- 发现更底层的问题
通过接口测试可以更简单更全面地覆盖到底层的代码逻辑,从而可以发现一些隐藏的BUG。
7.4 编程语言中的Interface
7.4.1 Java中的Interface
接口在Java中是指一个抽象类型,是抽象方法的集合,通常以interface来声明,一个类通过继承接口的方式,从而来继承接口的抽象方法。
类描述对象的属性和方法。
接口则包含类要实现的方法。
接口无法被实例化,但是可以被实现。
一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。
7.4.2 Python中的Zope.interface
在Python语言中也有Interface的概念,虽然Python本身并不提供Interface的创建和使用,但是我们可以通过第三方扩展库来使用类似Interface的概念,这里选用Zope.interface库。
root@TEST:~# python
Python 2.7.12 (default, Nov 19 2016, 06:48:10)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from zope.interface import Interface
>>> from zope.interface.declarations import implementer
>>>
>>> class IHost(Interface):
... def goodmorning(self, host):
... """Say good morning to host"""
...
>>> @implementer(IHost)
... class Host:
... def goodmorning(self, guest):
... """Say good morning to guest"""
... return "Good morning, %s!" % guest
...
>>> if __name__ == '__main__':
... p = Host()
... hi = p.goodmorning('Tom')
... print (hi)
...
Good morning, Tom!
>>>
7.5 总结
本章主要是讲解了接口测试的相关理论知识,什么是接口,什么是接口测试,主要是理论,没有实操,注意区分上述概念即可。