自动化测试思想

为什么要学习自动化?

众所周知,我们开展自动化是为了在一定程度上提高我们的工作效率,缩短我们的工作时间,解放双手用代码去时间脚本模拟操作的运行。自动化测试一般开展在回归测试阶段,因为新版本研发的功能是不稳定的,还没有时间去编写自动化脚本,所以进行自动化的是之前继承过来的功能。
我们在手工执行测试用例时,需要模拟各种正常场景、异常场景,需要输入构造的正常异常测试数据,如果测试用例很多,我们就需要去加班加点的去完成工作任务。但是如果我们队之前版本功能进行自动化测试的设计,那么我们这个时候只要去输入一条指令或一行代码就可以把之前的操作进行一个执行,并且可以生成具体的测试报告直接发送到本地邮箱进行查看,更大程度上提高了我们的工作效率。

自动化分层设计思想

首先,为了应对频繁变更的界面需求,方便我们去查找修改我们的定位属性值,因为UI界面测试是基于对象识别技术,需要指定的属性名和值相对应才能实现定位实现。在我们编写测试Case时,我们会用到自动化测试工具appium或selenium的初始化操作、定位元素属性操作,清理退出操作,另外我们去实现一个完整业务的编写可能会用到多个页面之间参数的关联,我们可能会针对这个场景设计多条线性代码,如果其中一个属性值发生了变化,那么所有用到这个属性的代码都会出现错误,我们不知道是工具的错误还是界面元素的错误,所有我们采用工具层和业务层封装分离的技术。工具提供对浏览器的操作、对象识别、断言、操作动作等封装处理,方便排查定位问题,所以我们把selenium提供的API封装utils层,另外分析需求把通用功能和使用频率较高的页面采用PageObject技术进行单独抽离分装形成Page层,组成我们的公共函数库层,这样应对需求变化的属性信息比较灵活,提高维护代码的效率。
对我们使用工具队浏览器进行的操作,打开和退出
我们队首页页面进行的一些操作
其次,在测试过程中针对某个场景设计正常以及异常数据,不同维度的测试数据涵盖不同的需求,需求变更,数据也发生变更。在测试活动中我们会经常修改测试数据来覆盖不同的测试需求(长度、类型、为空、重复、敏感、特殊、Null等),为了方便维护测试数据我们把数据单独抽离出来,采用xml格式单独存在一个文件里。这样形成数据池层,方便我们维护测试数据。通过python提供的获取数据方法进行获取并传入测试Case里。
获取Excle数据
获取XML数据
第三,回归测试用例方便管理单独存放在用例层里,引入unittest框架来优化代码,减少用例冗余操作步骤。当我们开发代码时用到的通用功能去公共函数库层中分别调用对应的模块即可,这样可以减少大量冗余代码,测试数据去数据池层中解析对应的xml文件,读取测试数据即可,这样做到了业务代码与数据分离,方便定位,容易维护代码。
第四,在回归测试活动中,我们会选择不同的回归策略,为方便管理我们要回归的测试用例,我们使用测试套来组织管理测试用例以及组织设计场景来进行执行。如果说我们需要设计指定的场景去进行测试,那么我们需要添加对应的模块下Case来生成测试场景。
导入封装的指定类模块
最后,是生成我们的测试报告并发送邮件。测试结束我们需要知道最后的结果是否出现异常,所以引入HTMLTestRunner来生成测试报告,方便查看结果。
生成HTML报告
参数说明
发送邮件 从我们编写Case起,由线性代码到封装到测试套的使用,都是一次次技术上的提升革新,未来会越来越偏向于自动化测试,所以在这分享一下自己的学习经验,希望对更多人有帮助!