备注:这是笔记,不是经验!
其核心思想是把写在一个测试用例里的业务进行分层拆解,把不同的数据类型、业务模型进行分离,降低业务与数据间的耦合度,提高测试脚本的可维护性。上面的框架图中,把不同功能模块、业务数据都进行了分离,好处是当测试需求有变化时,始终只需改动特定模块内部的代码;例如,如果页面元素定位变了,只需修改定位符驱动层的数据即可;又如,某个页面元素的等待需要延时,只需在页面操作层添加延时语句即可。下面逐一熟悉框架的逻辑与模块的关联;
测试数据驱动层主要用来提供测试数据的独立存储。具体的数据可以来自文本文件(如:TXT、XML等),也可来自数据库(如:MySQL、SQLite等)下面简单阐述一下数据驱动层的设计与使用方法。下面分文件存储、数据库存储依次说明;
1.1 文件存储
文件存储即把测试数据直接放在独立的文本文档中,如:TXT文件、CSV文件、XML文件、JSON文件等;因为我使用python,所以存储文件直接就是Python文件(其优点:不用再对数据文件进行解析);当然,若数据驱动层对测试数据的管理有其它要求的情况下,况下,则可以根据具体的需求来选择最合适的方式;
举例:将下面的一个访问百度查询一个关键词的用例,使用数据驱动层进行拆分;
driver.get("https://www.baidu.com/")
driver.find_element_by_id("kw").send_keys("屮艸芔茻")
可以看出,属于可拆分的数据包括:https://www.baidu.com 、 屮艸芔茻
好,现在就截图进行解释:
在需要使用时,引入独立出来的python文件;get("关键字")的方式获取具体数据。
1.2数据库存储
数据库存储就是将测试数据直接存储在数据库中,其更方便于对数据的管理和设计;缺点是,需要做额外的事情来支持,如:数据库安装、数据库驱动的安装、数据库读取代码的编写、测试数据获取方法的封装等。
这次简单介绍从0到从数据库中获取测试数据;下面是系列步骤:
步骤1:MySQL数据库安装链接:https://blog.csdn.net/ak739105231/article/details/102487921详细的关于数据库的安装步骤;
步骤2:安装python的MySQL驱动;python3支持PyMySQL;
pip3 install PyMySQL
步骤3:数据库读取代码编写(关于pymysql的基本了解:https://blog.csdn.net/ak739105231/article/details/90749719)
接下来,就是可以将这段代码封装到DataPool类的方法中,具体代码如下:
步骤4:在Navcat数据库管理管理工具上,连接本地MySQL,完成测试数据表的设计;
CREATE TABLE `test_case` (
`id` int(255) NOT NULL ,
`modle` varchar(255) NULL ,
`test_case` varchar(255) NULL COMMENT '测试用例名称' ,
`name` varchar(255) NULL COMMENT '测试数据名' ,
`value` varchar(255) NOT NULL COMMENT '测试数据的值' ,
`desc` varchar(255) NULL DEFAULT NULL COMMENT '测试数据的描述' ,
`result` text NULL COMMENT '对应的测试期望结果' ,
`status` enum('inactive','active') NULL DEFAULT 'active' COMMENT '数据是否有效' ,
`createAt` date NULL DEFAULT NULL COMMENT '创建日期' ,
PRIMARY KEY (`id`),
UNIQUE INDEX `test_case` (`test_case`)
)
;
创建后,在Navcat工具上,可以看到:
步骤5:更加步骤3的代码,进一步封装,完成测试数据获取方法封装;
步骤6:在数据库表中,准备好需要用的数据
步骤7:测试数据层的引入与使用
总的来说,关于对测试数据的管理可以使用最简单的文本方式来存储,也可以使用数据库来存储。文本文档,更简洁、更容易,但是不利于统一管理。数据库的方式保证测试数据的统一性,更方便管理;
总之,这两种方式,都可以选择,我个人觉得,如果项目较为复杂,推荐数据库存储方式,方便管理。
定位符驱动层:https://blog.csdn.net/ak739105231/article/details/102517323
页面操作层:https://blog.csdn.net/ak739105231/article/details/102544527
结果驱动层:https://blog.csdn.net/ak739105231/article/details/102602516