自动化测试原理及思想感悟
最早接触的自动化测试工具就是QTP和LoadRunner,其测试用例分别是:
QTP测试原理:
1.封装被测对象到对象库
2.对比对象库里的对象属性和运行时的真实被测对象的属性
3.对比一致后找到相应的对象,按照脚本驱动对象
QTP多也是关注的是流程驱动,后来使用RIDE、 jmeter等工具进行自动化测试时,也多是流程驱动,但是流程驱动的话,有优点就有缺点,已固定的合法数据进行数据驱动,保证整个流程不会出错或者报错,但是对于功能点的测试则可能会造成流失,所以在一些bug修改或者是功能优化后,对于自动化脚本的维护成本较高。
从我自己的功能测试经验来看,如果想将重复的功能进行自动化处理,重要的是功能细分,数据独立,流程封装这几个方面。
功能细分:如果将功能模块细分到一个组件,对一个组件的测试模型建立。
比如:对于内容文本输入框的需求是:必须输入数字,且值在0-100之间的整数,不能为空。
那么基于该页面中对于该组件的测试数据有以下几条:
1,只支持数字,输入字符时应为无效,无论大小写字符。
2,只支持数字,那么输入特殊字符时,该输入框应判定输入的值为无效。
3,值在0-100之间的整数,那么输入小数时,该输入框应判定为该值无效。
4,值在0-100之间的整数,那么输入小于0的负数时,该输入框应判定该值为无效。
5,值在0-100之间的整数,那么输入大于100的整数,该输入框应判定该值为无效。
6,不能为空,那么输入为空格时,该输入框应判定该值为无效。
7,不能为空,那么该空格什么值都输入时,该输入框应判定该值为无效。
8,输入合法数字,0-100 之间的任意整数(其中包括了边界值等一些正常数据),保存后能正常保存到数据库中。
譬如上述案例,将某一类组件独立出来,可以将这些固定的判定数据作为一个独立的方法,根据需求不同,而去选择不同的方法。而对于此类功能的测试,仅需将该页面中其他的组件进行“暂锁”(输入固定合法数据,或者某一组合法数据,在执行中可选项顺序,随机,唯一执行方式),然后仅修改该模块的功能。执行该自动化程序,实现对某个功能模块的自动化测试。
数据独立:将可参数化的数据进行独立,无论是从数据库中、Excel等文档工具或者是自动化工具本身的取数工具,一般自动化脚本在执行时,需在过程中调用,然后执行,数据独立是指,在流程或者测试点执行之前,将数据从数据库、Excel文档工具或者自动化自身数据库工具中取出来,放到一个容器中,那么在执行的时候,无需多次调用相应接口程序,对于执行过程中产生的数据也能有一个预判。其实数据独立多用于 “合法性”数据。因为非法数据应有独立的校验,应在组件中进行校验。
另一个数据独立的好处在于,在执行检查点的检查时,有对比数据,校验起来比较方便。
流程封装:流程的封装,主要是针对关联页面,无论是在过程中需进行上下级审批得流程,或者单证制作关联的审批(两个或者多个关联页面)。将流程分为节点进行封装,每个节点取其可操作节点的按钮(每个页面在执行结束后都有一个对节点的可操作按钮:比如下一步、上一步、保存、取消等)。在某一个节点需校验页面数据的正确性(从制作页面带到查看页面或者审批页面的数据的正确性),还需校验节点的可操作按钮的正确性(进行下一步操作后,是否进入下一个页面,进行取消后,页面是否消失,数据库数据是否还原等)。
所以在做流程封装时,将某个页面进行独立封装(页面所有可操作组件),可操作按钮做为单独的接口等待调用,根据分列出的场景不同,调用不同的接口,完成测试。
将上面页面中的“请假原因描述”、“请假类型”、“请假天数”、“请假时间”、“审批人”,封装为一个测试模块,制作页面中,校验控件的合法性,查看和审批页面中,校验控件的正确性。然后,单独把页面中“保存”、“提交”、“取消”作为一个测试类,在该类中分别检查对应的操作所产生的结果。