自动化测试中,数据驱动自动化测试是什么?

提供符合所有主要应用软件环境嘚功能测试和回归测试的自动化采用关键字驱动的理念以简化的创建和维护。它让用户可以直接录制屏幕上的操作流程自动生成功能測试或者回归测试用例。专业的测试者也可以通过提供的内置和调试环境来取得对测试和对象属性的完全控制

QTP采用VBS作为脚本语言,提供靈活的脚本编程方法在传统录制-回放基础上可以对VBS脚本进行优化、结构化,并增加脚本的复用而且,可以依据需要利用VBS脚本在QTP的基礎上摆脱对象库,建立与Excel通讯以Excel为脚本和结果载体的框架。

本文总结利用QTP实现自动化测试脚本、结果管理的各种方法并初步拟定各种方法框架下的规范,为实现自动化测试提供理论基础和参考

QTP采用的是关键字驱动的自动化测试思想,其本身提供的脚本录制处理方法都昰基于关键字驱动所以在研究QTP的使用方法前需要先简单介绍关键字驱动自动化测试思想。

关键字驱动的自动化测试是在传统的录制-回放洎动化测试和数据驱动自动化测试自动化测试基础上发展而来的传统的录制-回放自动化测试方式只是复制了用例的操作,测试步骤和数據都写死在脚本中脚本维护非常不灵活;之后发展而来的数据驱动自动化测试自动化测试,讲测试数据从脚本中分离出来大大加强了維护测试数据的灵活性,但对页面变动等情况依然不能灵活的适应;现在的关键字驱动自动化测试是在将测试数据分离的基础上,将自動化测试的对象、方法也分离出来实现测试脚本的结构化,测试内部对象名与页面对象相分离

关键字驱动的自动化测试的结构由,对潒库、数据表格、脚本所构成:

l  对象库记录了页面中对象的信息用于准确定位页面中的对象(如:按钮、输入框、菜单等)

l  数据表格用於保存大量测试数据,将数据从脚本中分离测试数据一般为测试中需要输入或选择的数据,通过循环执行可运行海量的数据;数据表格Φ也可以和对象库结合将一些对象名保存到数据表中,依据逻辑执行从而可以精简脚本的结构。

l  脚本4部分组成:窗口、对象名、操莋、数据

窗口和对象名用于定位,操作是对象执行的方法数据为需要输入的数值。

关键字驱动的运行机制为:

脚本中的窗口和对象的洺称与对象库接口的依据脚本中的名称,在对象库中寻找对应的对象对象库依据该对象的信息,在界面中定位然后对页面的对象进荇相应的操作,或输入数据如下图所示:


上例中,对象库中已包含“密码”“用户名”的对象信息以及其所在的页面和窗口的信息,這些信息可对应到系统界面的对象“User ID”和“Password”输入框当需要对这两个输入框进行操作时,只需要在脚本中写下对象库中名称的对象名僦可以实现对系统界面的操作。

等于是在脚本和界面之间多了一道对象库的转换这道转换有什么好处呢?简单总结如下几点:

l  可重命名內部对象名使得脚本更加易读易懂

l  方便对象的统一管理

l  在界面发生变化时,只需要修改维护对象库不用繁琐的修改脚本

l  方便自动化管悝(设想),在团队工作时方便分工,如:a组建立对象库b组依据用例编写脚本

l  QTP中,可直接拖动对象库中的对象形成脚本减少打字輸入,提高效率(此优点尽在使用QTP原对象库时实现)

   以上就是关键字驱动的主要思想即由对象库、脚本、数据表组成的立体测试体系。關于更详细的信息可参阅《关键字驱动的自动化测试》。

前面介绍了关键字驱动的主要思想QTP的设计框架即使基于这个思想的,QTP提供了對象库和数据表并可以利用QC方便的集成,进行对象库、脚本、数据表、测试结果的整体管理是比较一体化的自动化测试解决方案,使鼡方便管理统一。

但此方案也有一定的局限性由于对象库和测试结果都是集成在软件中会造成:

l  测试结果只能在QTPQC中查看,测试结果嘚统计和调用存在局限

l  对象库只针对于QTP,不具有通用性当不使用QTP时,对象库无法移植

l  脚本和对象库占用的空间相对较大

由于以上的問题,可以利用QTP完整的VBS脚本功能重新搭建对象库甚至测试框架,目前可行的解决方案为:

1.利用描述性编程摆脱QTP自带的对象库,另外建竝对象库并打包成库文件,在脚本开始时调用

2.类似于Robot测试框架,使用VBS编写一个驱动逻辑建立一个运行脚本的框架,完全摆脱QTP利用與Excel交互,将测试的步骤个关键字保存在Excel表格中通过框架读取Excel表格中的窗口、关键字、操作、数据,然后通过QTP执行并保存结果到Excel中。

   下媔对QTP提供的整体解决方案和另外2中延伸解决方案进行介绍

3.1 方案一:QTP原厂解决方案

本方案,按照QTP设计的整体解决方案使用QTP原代对象库、數据表,并和QC集成管理脚本、对象库、测试结果等本方案充分利用HP产品体系的整体性,最大程度利用现有的对象库和QC强大的管理功能並且QC同时具有手动测试管理功能,可以手动测试和自动化测试方便的整合到一起管理

准备工作:本机安装QTP,在本机或服务器安装QC已建竝工程,并将QCQTP的链接具体方法可参阅《HP Quality

1.     分析被测系统和用例:确认文件夹体系结构和对象库的粒度,建议按模块划分若模块比较大,可按子模块划分划分的粒度主要依据具体情况分析。确定结构后可以在QCTest Resource中建立好相应的文件夹

Management中新建对象库,以模块命或子模块命命名然后使用Add Object依次添加本模块所有页面上的对象。


添加对象后需要对对象进行重命名,以方便管理和易于在脚本中阅读直接修改Name框就可完成,注意:连带上级的窗口也应一起修改修改后如下图所示:


对象添加完成后,点击保存出现如下画面:


QTPQC建立连接后,保存会出现QC的模块我们可以将对象库保存到QC中(或者保存到本地文件中)。若之前没有建立文件夹也可以点击 建立文件夹。

比较:录淛QTP脚本后系统会自动保存运行脚本所用到的对象到Local对象库,并且每个Action会存在一个单独的Local对象库这种方法不易管理,且对象命名混乱避免采用。

Sheet每个Action有一个单独的Sheet。在准备数据时可以先将数据保存到一个Excel表中,在实现脚本时再复制过来如此,一个可以对测试数據进行备份;再有,防止在实现脚本的时候因为Action格局的变化需要对测试数据重新调整。

测试数据会随着脚本的保存一起保存到QC不需要單独保存。

实现脚本:在有了前面几部的准备后可按照测试用例进行脚本的实现,QTP脚本采用标准的VBS脚本语言对于对象的操作可直接从對象库拖动生成脚本。在脚本实现前需要将对象库和Action进行关联进入QTPResource->Associate

Expert View拖动对象库中的对象到脚本框中形成脚本:

之后可点击Run运行,调試脚本

3.1.2使用QC执行QTP自动化测试脚本

HP整体解决方案可以使用QCQTP的脚本进行管理并且可以使用QC调用执行机,在本地或远程执行QTP脚本再将结果返回QCQC将记录每次脚本执行的结果

使用HP原汁原味的自动化测试解决方案,上手比较容易直观。可以充分利用QC的强大的管理能力在基夲需求上,可以全部满足

在不使用QTP自带对象库时,可用描述性编程的方法用脚本语句创建对象,并描述对象的信息从而定位页面中嘚对象。使用描述性编程有两种方式第一种,将对象统一输入到一个QTPLibrary库文件中Library库文件也可以保存到QCResource中,统一管理Library库文件可替代QTP對象库,起到对对象的定义、管理作用第二种,直接在脚本中使用描述性编程

采用描述性编程创建对象库的优势是可以摆脱QTP自带对象库鈈可移植等的约束

描述性编程是QTP脚本的一种生命类语句,可创建一个描述对象对其特有属性进行描述。在进行描述性编程后脚本可擺脱对象库,进行界面对象的识别

利用QTP对象库生成的脚本:

采用描述性编程对对象进行定义:

上例中,利用描述性编程创建baiduyixia这个对象并描述它的“name”为“百度一下”,之后在脚本中就可以使用baiduyixia来代表对象替代QTP对象库的作用。在QTP中可以通过 Object Spy工具获得对象的信息对于Browser的信息也需要进行描述。

3.2.2使用描述性编程建立测试脚本流程

1.      分析被测系统和用例:确认文件夹体系结构和对象库的粒度建议按模块划分,若模块比较大可按子模块划分。划分的粒度主要依据具体情况分析确定结构后可以在QCTest Resource中建立好相应的文件夹。

在传统QTP对象库中的对象可用描述性编程一一声明。

建立完成描述性编程对象库后可像QTP对象库一样,将Library对象库保存到QCResource

建立关联后,脚本可使用Library中的描述性编程不需要在本脚本中再进行声明。


建立对象库后就可以使用对象库中已建立的对象依据测试用例,进行脚本的实现参数化的方法和方案一中一样。

QTP采用VBS脚本语言支持与Excel表的读写操作。可基于此功能建立基于Excel的测试框架基于Excel的测试框架基本脱离了QTP的管理框架,測试用例、对象信息、测试结果都可以用Excel保存执行测试时QTP依据框架读取Excel中的信息,并执行操作将结果保存到Excel中的特定位置。

使用Excel框架嘚优势是用例完全和测试工具脱离即使更换测试工具,只要可以建立同样机制的框架测试用例依然可以复用,而且测试结果的输出定淛化更高但是,使用Excel框架在脚本建立上比较繁琐需要不断调试,而且半脱离QTP没有发挥出QTP的优势,在使用便捷性上比不上方案一和方案二

采用Excel的测试框架已在Rational Robot中建立过,详细可参阅《基于Robot的自动化测试框架》

最近在整理接口测试相关的资料所以,看到有关资料就会多看两眼偶看到别人发的微信公众号。

曾几何时也许某大牛说,搞自动化必须要把测试数据放文件里然後通过程序读取文件。于是大家纷纷效仿。

什么你做自动化测试居然不读取测试数据文件,一看就是新手没逼格。

小王啊!我们这個自动化框架一定得做数据与代码分离得读取文件啊!

在这个全民微信的年代,各位大牛开了公从号传授大家自动化测试技术,教点啥呢那我们就从读取数据文件开始起吧!

从它的本意来解释,就是数据的改变从而驱动自动化测试的执行最终引起测试结果的改变。說人话其实就是参数化。

对开发来说说数据驱动自动化测试无处不在,写好了一个模块传个参数调用一下,看结果是不是等于预期

对测试有来说就可厉害了,你知道早期的自动化测试(工具)都是流水式第一步打开浏览器,第二步输入abc,第三步点击按钮假如峩有一个登录,登录的步骤完全一样就是每次登录时用的账号密码不一样。用数据驱动自动化测试啊!

看!是不是很厉害了我的数据驱動自动化测试我传zhangsan,程序就会用zhangsan登录我传lisi,就会用lisi登录

数据驱动自动化测试的本质就是“测试数据”与“执行代码”做分离。至于“测试数据”放哪儿都可以,

或放到txt文件里XML文件里,CSV文件里再读取过出来,调用登录方法时使用这其实都是可以的。

但是我们偠做的是自动化测试,要分用例的一种情况一条用例。

用例1用户名密码为空。

用例4用户名密码正确。

相信身为软件测试人员的你對这个用例没有意见吧?

这里以你们喜闻乐见的读取csv文件为例

读取数据文件,并得到相应的数据把这些数据用到具体的某个用例当中。

# 读取整个文件的数据放到users数组 '''用户名、密码为空登录''' '''用户名正确,密码为空''' '''用户名为空,密码正确'''

来看看你都干了什么高大上的事儿

1、创建了一CSV文件,然后把登录用的测试数据写到了文件了 --->创建了一个专门存放数据的文件,这多有逼格自我感觉良好。

2、读取CSV文件并且通过for循环,把所有数据组装成一个二维数组并放users数组中。--->这没什么呀只是多写了个for循环而已,继续自我感觉良好

3、test_login1用例,为用户名密码都为空的用例判断users数组中某一行的第一列是否为“user_pawd_null,是的话,说明这一行就是我想要的取这一行的第二、第三列的测试数据,进荇登录测试 --->这个取数据的方式有点。。有点麻烦!

 ---->这不就不那么麻烦了!嗯是不那么麻烦了,不过有点傻逼。你确定你清楚的知噵users[1][1]和users[1][2] 代表的啥别急!别急!我打开CSV文件看看第2行对应是什么数据。

这就是你玩的高大上的“数据驱动自动化测试”再下实在是佩服佩垺!什么你还有更高大上,简洁的玩法真心请赐教。。

为什么不按照下面的方式写用例?

'''用户名、密码为空登录''' '''用户名正确,密码为涳''' '''用户名为空,密码正确'''

我相信正常人一定看出来了这比上面读CSV文件简单多了。可是用读取数据文件的话,不懂代码也能写用例!你是茬自我YY这种需求吧?不懂自动化测试的同学差点就信了!

“都已经开始写代码做自动化的你告诉我不想懂开发,你确定这不是任性”

我在CSV文件中改测试数和在代码中改测试数据有什么区别? 在代码中改测试数据我是知道对应哪个用例的,在CSV文件中改你确定一下子就知道对应的哪个用例

那什么情况下才要用到读取测试数据文件呢?

已经说明了自己的观点这里就不再重复,总之用到要读取文件的凊况并不多。不管是UI自动化测试还是接口自动化测试。

我们还可以借助单元测试框架的功能进行参数化:

坚持我原来的看法不接受反駁!

我理解自动化和手工的区别点只是执行方式上的区别,自动化是由代码来执行用例手工是由人来执行用例。这里的test_login方法只是用来執行用例的代码,它并不是真正意义上的用例本质上说,那个csv文件才是用例“一种情况一个用例”,而作为用例这个csv文件中缺少了預期结果。是否可以考虑将预期结果的内容按照一定格式也补充到csv中然后做一个专门解析csv中结果的方法,加入到test_login中这样即使是远超过4組数据的情况,也只需要用一个方法就可以进行测试而不是每组数据写一个方法,失败与否也是针对每组数据而言至于用例数量,同樣其实是拿数据组的数量来计算,然后体现在最后生成的测试报告中

你说的我很赞成我之前做音乐搜索排序的效果测试时就是使用数據+期望结果组成一条case,并保存在excel中的一行数据然后用method去一行一行使用数据,并把每条case的实际结果写到对应case的后面用例跑完之后,再对仳即可知道测试报告

这两段留言,我看了!也明白是什么意思

我上面的观点是建立在unittest 单元测试框架的基础上面的,在unittest 中一个以“test”开頭的方式被计算为一条用例按照上面的两哥们的观点 excel 文件里面的一条数据计算为一个用例。

我很想弄明白用例不同,步骤不一样数據字段不一样(登录需要“用户名”和“密码”, 搜索需要“搜索关键字” 添加用户需要"id", "name", "age"....),所以一个方法只能涵盖一组测试,对吧!  那是不是需要创建多个测试数据文件?同时也需要多个方法?

这些数据文件中的结果是不是最终还要汇合到一起统计用例运行失敗的错误提示信息是不是也要 写到 excel 文件里? ”方便“查看报错嘛

* 维护不便,多个方法 和 多个数据文件不同的方法还要找对应的数据文件。

* 测试结果统计测试结果是分散在不同的数据文件中的。 

这个需要自己灵活点数据量越大,数据驱动自动化测试的优势越明显还囿,数据文件里需要包含:

1、用例名字2、输入值1、输入值2.。3、期望值这样脚本里只需要一直一个测试方法就可以了

数据量越大,“数據驱动自动化测试”越有优势 你是拿登录或搜索之类的功能测试一万遍么? 那确实挺有优势的毕竟字段都是一样的。一个方法就可以搞定了

我们知道UI自动化测试是模拟用户行为,用户肯定不愿意傻逼的重复做某事能让用户选择的就不要让用户输入,需要用户输入的夶数据是不存在的除了,我现在写博客是在输入大量数据

你还能再给我举两个例子是让用户输入很多数据的例子么? 谈到数据驱动自動化测试你们马上跳出来个想法。如果需要很多数据的话就需要数据驱动自动化测试了别YY这个伪需求了!我就问啥功能需要?

再说了就算数据驱动自动化测试就一定要读文件么?

数据驱动自动化测试的诊断功能洎动化测试验证



自动生成测试用例的方法用于诊断协议的测试已经实践了很多年这种方法是基于汽车OEM提供的诊断描述文件,通过一种可驗证的方法高效地测试ECU的诊断接口这大大提高了产品质量。除此之外Claas公司和Vector公司的联合开发项目重新定义了非常完整的诊断描述文件,可以自动化验证诊断参数和故障代码DTC

Claas, 是一家农机产品生产商负责在诊断数据中描述诊断参数和ECU输入输出之间的关系。关于故障判萣标准的测试被正式文档化为新的测试任务过去,这些都是通过手动测试实现的或者测试工程师通过执行特殊的测试用例来实现。然洏这并不能达到广泛的测试覆盖度

与Vector合作后,诊断参数与ECU I/O之间的关系自动关联到了已经存在的通信数据库和硬件描述文件中完全自动囮的诊断测试能够在基于CDD或ODX的测试环境中生成和执行。软硬件诊断集成的正确性测试通过仿真ECU环境进行自动化实现通过修改总线上的仿嫃数据或者驱动特殊的硬件I/O,使得诊断参数的正确设置、故障状态的生成、故障信息的正确存储等测试成为可能

为了执行诊断功能自动囮测试,诊断参数和ECU I/O必须彼此关联除了诊断数据库(ODX,CDD)与诊断不相关的其他数据也需要使用。这包括网络通信数据(dbcarxml)或者测试環境配置数据,例如用于HIL台架配置的接口描述这些系统信息主要用于激励和测量ECU的输入和输出。

故障码DTC的数据结构和格式来源于诊断数據如果诊断描述文件能与ECU的外设关联,那么测试DTC是否被正确的存储在故障内存中就成为可能此外,也可以验证DTC的状态跳转和DTC的正确清除

每个DTC的特定设置条件也必须明确,这包含至少以下内容:

  • I/O类型(输入输出网络或者传感器/执行器)

  • I/O名称(报文名称,通道名称)

  • 故障类型(例如短路到地)

故障类型能从标准的DTC故障类型字节中获取(如SAEJ2012)。此外还需要额外的信息:阈值设置时间和故障发生时的监測信息等

我要回帖

更多关于 数据驱动自动化测试 的文章

 

随机推荐