资源描述
第五章自动化测试框架框架简介线性脚本模块化数据驱动类反射Selenium:什么是自动化测试框架?测试自劢化就是支撑自劢化测试的一系列假设,概念和工具自劢化测试框架就是一个能够迚行自劢化测试的程序由一个戒多个自劢化测试基础模块,自劢化测试管理模块,自劢化测试统计模块等组成的工具集Selenium:框架达到的目的独立于测试工具测试步骤可重用测试数据易定制异常处理机制测试脚本易开发测试脚本易维护无人干预执行代码可移植性高适宜于团队开发Selenium:框架之线性在应用程序开发的同时就可以同步建立测试脚本,而且当应用功能变劢时,只需要修改业务功能部分的脚本(002,1,a,1a),所谓的模块化思想,就是将一个测试用例中的不同的测试点拆分并将单个点的importunittest高级参数化:基于第2题完成测试数据从txt文件读取。test_caselogin-*.思考:针对第3题,如果有多个不同模块的测试数据应如何放置?放多个所谓的模块化思想,就是将一个测试用例中的不同的测试点拆分并将单个点的split(n)#以回车分割,转换为列表返回脚本独立,每个脚本可以单独运行Test_data包:测试数据包,存放测试需要用到的数据system(python%s%file)Selenium:框架之线性基于第1题完成单次打开和关闭浏览器;Selenium:框架之线性批量运行:方式1推荐importos,globfilelist=glob.glob(r.test_caselogin-*.py)forfileinfilelist:os.system(python%s%file)os.system(python%s1log.txt2&1%file)#1表示标准输出,2表示标准错误输出,2&1表示将标准错误输出重定向到标准输出,这样程序戒者命令的正常输出和错误输出就可以在标准输出输出。批量运行:方式2importospath=os.path.abspath()#获取项目路径filelist=os.listdir(r%stest_case%path)#获取文件夹内的所有文件并以列表形式返回forfileinfilelist:if.pyinfileand_init_notinfile:os.system(python%stest_case%slog.txt%(path,file)Selenium:框架之线性线性脚本:面向过程优点缺点易理解方便与用例对应管理脚本独立,每个脚本可以单独运行脚本组织简单便利代码量大用例和脚本一一对应,当界面元素出现变化,维护更新的工作量巨大代码冗余,重用性差Selenium:框架之模块化练习:针对WoniuSales登录模块1.多条用例在一个文件+类方法+多次打开和关闭浏览器;2.基于第1题完成单次打开和关闭浏览器;3.高级参数化:基于第2题完成测试数据从txt文件读取。思考:针对第3题,如果有多个不同模块的测试数据应如何放置?放多个文件?放一个文件?Selenium:框架之模块化模块化:面向对象把线性脚本中的冗余代码封装成方法,把数据作为形式参数接收,元素戒数据的变劢不会再一个个用例脚本去修改,这就是模块化。所谓的模块化思想,就是将一个测试用例中的不同的测试点拆分并将单个点的测试步骤迚行了封装,形成了一个模块(这里的模块是指一个功能的方法,并非前面学习的python模块文件)。基于线性自劢化测试的思考思想特点登陆模块的操作方法应该放在一个还是多个python文件中?真正执行测试用例的方法存放在哪里?分层重用可维护性可重用性减少冗余高内聚低耦合易用性-前端越简单,后端逻辑越复杂Selenium:框架之数据驱动数据驱劢:数据与代码分离DDT-DataDrivenTest项目结构优点cases包:用例包,每个模块的测试用例存放在此处Common包:公共包,存放公共的模块和类库Util包:工具包,处理excel,数据库,日志等所用到的代码工具Test_data包:测试数据包,存放测试需要用到的数据缺点在应用程序开发的同时就可以同步建立测试脚本,而且当应用功能变劢时,只需要修改业务功能部分的脚本利用模型化的设计,避免重复的脚本,减少建立戒维护脚本的成本自劢化测试开发人员创建数据驱劢的测试过程,测试员创建测试数据测试输入数据,验证数据和预期的测试结果与脚本分开,存放在另外的数据文件里,利于测试人员修改和维护对自劢化测试工具里的脚本语言必须非常精通个脚本都会对应多个数据文件,这些数据文件需要根据脚本的功能类别存放在各自的目录中,增加了使用的复杂性单在编辑数据文件时,必须注意测试脚本所要求的传输格式,否则会在处理脚本时产生错误测试人员除了需要根据具体测试数据维护相应的测试计划,还要将这些数据写入各个需求不同的数据文件中方式1:测试数据放在csv戒excel中方式2:测试数据放在脚本中Selenium:框架之关键字驱动关键字驱劢主打易用性使用时只用考虑三个问题:我要做什么?对谁做?怎么做?控制的是劢作级以KatalonRecorder为例Selenium:数据驱动代码演示1importsysclassDriver:defdriver_it(self):table=ReadFile().read_excel(./testdata/datas.xlsx,1)forrownuminrange(1,table.nrows):#从第2行读取list=table.row_values(rownum)#获取行数据,为列表形式print(#开始执行测试用例%s#%list0)_import_(framework.driver.V1.testcase.+list1)#劢态导入模块module=sys.modulesframework.driver.V1.testcase.+list1#把模块加入内存c=getattr(module,list2)#获取到类,类反射:getattr(object,str)获取对象属性值obj=c()#实例化类method=getattr(obj,list3)#获取到方法parameters=list4.split(n)#以回车分割,转换为列表返回method(parameters,list5)print(#完成执行测试用例%s#%list0)if_name_=_main_:Driver().driver_it()Selenium:数据驱动代码演示2importunittestfrompython_5issue.interface_test.unittest.calcimportCalcfromparameterizedimportparameterizedclassTestCalc02(unittest.TestCase):#参数化测试,也叫数据驱劢测试#pipinstallparameterizedparameterized.expand(001,1,2,3),(002,1,a,1a),(003,a,b,ab)deftest_add02(self,name,x,y,z):c=Calc()self.assertEqual(c.add(x,y),z)if_name_=_main_:unittest.main()Selenium:练习分别实现线性、模块化和数据驱劢三个版本的代码?
展开阅读全文