软件测试常用设计模式
设计模式的重要原则就是:高内聚、低耦合;通常程序结构中各模块的内聚程度越高,模块间的耦合程度就越低。
数据驱动测试:Data Driven Testing,简称DDT;
数据驱动指的是从数据文件(如数据库、Excel文件、Csv文件等)中读取输入数据并将数据以参数的形式输入脚本测试,这些变量被用作传递(输入/输出)用来验证应用程序的测试数据。不同的测试用例使用不同类型的数据文件。数据驱动模式实现了数据和脚本分离,相对于录制与回放测试技术,数据驱动测试极大地提高了脚本利用率和可维护性,但是对于界面变化较大的情景不适合数据驱动测试。
数据驱动的设计步骤:
编写测试脚本,脚本需要支持程序对象、文件或数据库读入测试数据
将测试脚本使用的测试数据存入程序对象、文件或者数据库等外部介质中
运行脚本,循环调用存储在外部介质的测试数据。
验证所有的测试结果是否符合期望结果
如:pytest 测试框架快速搭建 的 搜索接口测试实例,就是数据驱动设计模式。
数据驱动测试的多行测试数据对应一个测试脚本(或者说对应于一个关键字的实现,例如登录功能的测试,可以有用户名长度、密码长度、密码字符类型、大小写等多条测试用例,但是都是对应登录一个关键字),然后用不同的测试数据反复运行脚本(即每一行数据的处理逻辑是一样的)。如果需要做不同类型的测试,需要新增测试脚本(往往意味着新的测试数据格式)或者沿用同一个测试脚本,但是要做逻辑判断来确定执行哪一种测试。
核心:就是让测试与数据分离。
关键字驱动测试:Keyword Driven Testing,简称KDT;
关键字驱动的自动化测试(也被称为表驱动测试或基于动作词的测试),是数据驱动自动化测试的变种,关键字驱动的自动化测试框架建立在数据驱动手段之上,表中包含指令(关键词),而不只是数据。这些测试被开发成使用关键字的数据表,它们独立于执行测试的自动化工具。关键字驱动的自动化测试是对数据驱动的自动化测试的有效改进和补充;关键字驱动将数据域与脚本分离、界面元素与内部对象分离测试过程与实现细节分离。关键字驱动的测试逻辑为按照关键字进行分解得到数据文件,常用的关键字主要包括三类:被操作对象(Item)、操作(Operation)和值(value),用面向对象形式可将其表现为Item.Operation(Value);将测试逻辑按照这些关键字进行分解,形成数据文件。测试框架低层负责解释这些关键字,并完成相应的指令操作。
将测试用例的步骤(元素)和用例分离。关键字驱动表示把项目中的一些逻辑封装成关键字(一个函数名)。例如login、 register、点击、打开浏览器、等待、输入,进行设置变量, 调用不同的关键字组合实现不同的业务逻辑,从而驱动测试用例的执行。
关键字驱动的框架基本工作是将测试用例分成4个不同的部分,测试步骤、测试对象、测试对象执行的动作、测试数据。
示例:
-
testCase:
-
testName:#正确地注册用户
-
pretc:
-
step:
-
open 'http://localhost:8080/register'
-
click id=reg
-
input id=username value='zhangsan'
-
input id=password value='abcdefg'
-
input id=checkpass value='abcdefg'
-
click class=regbutton
-
expected: #预期结果
-
code 200
-
message 注册成功
KDT:
关键字:Item.Operation(Value)
Operation:input、click、drag、move等
Item:元素的标签、元素的定位方式;
value:数据
本质是面向对象编程思维的一种体现,其实就是将代码,基于业务的实际使用场景,通过合理的封装,然后基于封装好的函数,通过调用这些函数驱动业务的执行。没有固定形式,
页面对象模式:Page Object Model,简称POM;
selenium在测试一个web页面时,通常是针对一个个页面进行测试的,基于此前提,我们可以把一个页面中的对象和操作进行封装,这就是POM;不难理解,POM本质就是将页面对象和操作进行封装,作为一个对象库而存在,这样在测试脚本中直接调用方法来进行相关操作并传递相应的参数即可。
核心:就是让操作与元素分离。
单例模式:大力魔兽指在程序的生命周期中,只做一次实例化,只分配一块内存空间,以确保所有操作和调用在同一块内存空间发生。例如:selenium的webdriver每实例化一次,都会打开一个新的浏览器,如果要对多个模块进行测试,不可能把所有的测试脚本放到同一个类中,因此需要使用单例模式。
单例模式代码示例:
-
from selenium import webdriver
-
class utility:
-
driver = None #定义类级变量,
-
#单例模式,确保只有一个实例在运行
-
#classmethod
-
def get_webdriver(cls,borwser='chrome'):
-
#如果没有被实例化,则实例化,否则直接返回;传参数做浏览器兼容
-
if cls.driver is None:
-
if browser=='chrome'
-
cls.driver = webdriver.chrome()
-
return cls.driver
基于组件的测试:Component Based Testing,简称CBT;
业务流程测试:Business Process Testing,简称BPT;
感谢每一个认真阅读我文章的人!!!
作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。