从软件架构的度来说,测试最重要的步骤是在软件开发的时候界入比较好,所以在早期测试的界入,从软件经济学的度上来说,发现的问题解决成本低,投入的资源比较少。因此,对一个测试的系统,开始最佳的测试就是源代码级别的测试,也就是单元测试阶段,这个过程也被白盒测试。单元测试是最基本也是最底层的测试类型,单元测试应用于最基本的软件代码,如类,函数。方法等,单元测试通过可执行的断言检查被测单元的输出是否满足预期结果。在测试金字塔的理论上来说,越往下的测试投入资源越高,得到的回报率越大,测试金字塔模型:
抛开软件架构的层面,在自动化测试的体系中,单元测试框架以及单元测试的知识体系是必须要掌握的技能之一,单元测试的知识体系是自动化测试工程师以及测试开发工程师的知识体系之一,而且是必须具备的知识之一。在Python语言中应用最广泛的单元测试框架是unittest和pytest,unittest属于标准库,只要安装了Python解释器后就可以直接导入使用了,pytest是第三方的库,需要单独的安装。
白盒测试原理
在软件架构的层面来说,测试最核心的步骤就是在软件开发过程中。就软件本身而言,软件的行为或者功能是软件细节实现的产物,这些最终是交付给用户的东。所以在早期执行测试的系统有可能是一个可测试和健壮的系统,它会带来为用户提供的功能往往是让人满意的结果。因此给予这样的度,开始执行测试的最佳方法是来自源代码,也就是软件编写的地方以及开发人员。由于源代码是对开发人员是可的,这样的一个测试过程我们可以称为白盒测试。
自动化测试用例
不管基于什么的测试框架,自动化测试用例的编写都需要遵守如下的规则,具体总结如下:
UnitTest组件
unittest是属于Python语言的单元测试框架,它的核心组件具体可以总结为如下:
测试类继承unittest模块中的TestCase类后,依据继承的这个类来设置一个新的测试用例类和测试方法,案例代码:
测试固件
所谓测试固件,可以理解为执行一个或者是多个测试用例工作所需要的初始化设置和清理操作,具体案例代码如下:
测试套件
测试套件顾名思义就是测试用例的集合,在unittest测试框架中主要是通过TestSuite类提供了对测试套件的支持,具体案例代码如下:
测试固件每次都执行
在unittest测试框架中,测试固件分为两类,一类是在一个测试类里面,不管有多少个测试用例,每次执行测试用例测试固件都会被执行,具体案例代码如下:
在如上的代码结构中,测试用例执行的顺序为:setUp()方法,下来是具体的测试用例,最后tearDown(),同时在一个测试类里面不管有多少个测试用例,测试固件每次都会被执行。
测试固件只执行一次
类方法setUpClass()和tearDownClass()是指在一个测试类里面,不管有多少个测试用例,测试固件只会执行一次,具体见案例代码:
编写测试用例注意事项
1、在一个测试类里面,每一个测试方法都是以test开头的,test不能是中间或者尾部,必须是开头,建议test_2、每一个测试用例方法都应该有注释信息,这样在测试报告就会显示具体的测试点的检查点3、在自动化测试中,每个测试用例都必须得有断言,无断言的自动化测试用例是无效的4、最好一个测试用例方法对应一个业务测试点,不要多个业务检查点写一个测试用例5、如果涉及到业务逻辑的处理,最好把业务逻辑的处理方法放在断言前面,这样做的目的是不要因为业务逻辑执行错误导致断言也是失败6、测试用例名称最好规范,有约束
UnitTest的测试框架中提供了很丰富的测试套件,所谓测试套件其实我们可以把它理解为测试用例的集合,或者可以说理解为一个容器,在这个容器里面可以存放很多的测试用例。下面详细的说明下各个不同测试套件的应用和案例实战。
按测试类执行
按测试类执行,可以理解为在测试套件中,我们按测试类的方式来进行执行,那么也就不需要在乎一个测试类里面有多少测试用例,我们是以测试类为单位来进行执行,测试类里面有多少的测试用例,我们都会进行执行,下面详细的演示这部分的具体应用,具体案例代码如下:
按测试模块来执行
思维按测试模块来执行,就是以模块为单位来进行执行,那么其实在一个模块里面可以编写很多的类,下面通过详细的代码演示下这部分,具体案例代码如下:
自定义测试套件
针对测试套件的方式是很多的,那么我们是否可以把加载所有测试用例的方式单独分离出来了,当然其实是可以的,这样我们只需要