内容来源于《Web接口开发与自动化测试——基于Python语言》虫师编著,如有涉及版权问题,归虫师本人所有。请大家支持虫师的著作:http://www.broadview.com.cn/book/4811
源码下载:https://github.com/defnngj/guest
7.1 分层的自动化测试
测试金字塔告诉我们应该有更多的低级别的单元测试,而不仅仅是通过用户界面进行高层端到端的测试。
而且也提出了分层自动化的概念,用来区别于“传统的”自动化测试。
所谓传统的自动化测试可以理解为基于产品UI层的自动化测试,它是将黑盒功能测试转化为由程序或工具执行的一种自动化测试。
但是UI自动化测试维护的成本相对较高。
分层自动化测试倡导的是从黑盒单层到黑白盒多层的自动化测试体系,从全面黑盒自动化测试到对系统的不同层次进行自动化测试。
7.2 单元测试与模块测试
- 单元测试(Unit testing)
1️⃣单元测试是应用程序的最小可测试部分。
2️⃣在面向过程编程中,单元也可以是整个模块,但常见的是单个函数或过程。
3️⃣在面向对象编程中,单元通常是整个接口,例如类,但可以是单独的方法。
4️⃣单元测试多数情况下是由程序员自己完成的。 - 模块测试(Module testing)
1️⃣模块测试是针对具有明显功能特征的代码块进行的测试。
2️⃣单元测试可能只涉及测试一小部分的功能。
3️⃣模块测试多数情况下由其他程序员或测试人员进行。
总结:单元测试更强调的是程序的最小可测试单位;而模块测试更强调被测试程序功能的完整性。
7.3 接口测试
程序接口:也可以看作是程序模块接口,具体到程序中一般就是提供了输入输出的类、方法或函数。对于程序接口的测试,一般需要使用与开发程序接口相同的编程语言,通过对类、方法和函数的调用,验证其返回结果是否正确来进行测试。这一类测试工作,既可以由开发人员自己完成,也可以由有良好编程能力的测试人员来做。
协议接口:一般是指系统通过不同的协议提供的接口,例如使用HTTP/SOAP等。这种类型的接口对底层代码做了封装,通过协议的方式对外提供调用。因为不涉及底层代码,所以一般不受编程语言的限制。我们可以通过接口测试工具或者其他编程语言进行测试。这一类测试工作多数情况下由测试人员完成。
7.3.1 接口的分类
从系统的调用方式不同,大致可分为以下三类。
- 系统与系统之家的接口
可以是公司内部不同系统之家调用的接口,也可以是不同公司不同系统之间调用的接口。 - 下层服务对上层服务的接口
应用层与Service主要通过HTTP接口。Service层与DB层主要通过DAO数据库访问接口。对于Python与MySQL数据库之间的调用,PyMySQL驱动就是扮演着这样的角色。 - 系统内部,服务与服务之间的调用
大多数情况下指的是程序之间的调用。
7.3.2 接口测试的意义
- 更早的发现问题
- 缩短产品研发周期
- 发现更底层的问题
7.4 编程语言中的Interface
7.4.1 Java中的Interface
接口在Java编程语言中是指一个抽象类型,是抽象方法的集合,通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。
接口并不是类,虽然编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。
- 为什么使用interface?
接口的特点在于它只定义规范,而不管具体实现,具体实现由接口的实现者完成。
例如,当前有多个主流的数据库厂商(Oracle、SQL Server、DB2)等,Java定义了调用数据库的接口规范(JDBC即Java数据库连接,是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一种Java语言编写的类和接口组成),不同的数据库厂商需要根据接口实现自己的数据库调用。对于Java程序员而言,在调用不同的数据库时只需要用JDBC,而并不需要关系每个数据库是怎么实现接口的。
下面来定义接口。
public interface IAnimal {
public String Behavior(); //行为方法,描述各种动物的特征
}
实现动物接口(Dog类)
public class Dog implements IAnimal {
@Override
public String Behavior() {
// TODO Auto-generated method stub
String ActiveTime = "我晚上睡觉,白天活动";
return ActiveTime;
}
}
实现动物接口(Cat类)
public class Cat implements IAnimal{
@Override
public String Behavior() {
// TODO Auto-generated method stub
String ActiveTime = "我白天睡觉,晚上捉老鼠";
return ActiveTime;
}
}
测试
public class Test {
public static void main(String[] args) {
Dog dog = new Dog();
Cat cat = new Cat();
System.out.println(dog.Behavior());
System.out.println(cat.Behavior());
}
}
7.4.2 Python中的Zope.interface
Python 中通过第三方库来使用类似Interface的概念。