为您找到搜索结果:1775个
python webdriver 从无到有搭建数据驱动自动化测试框架的步骤和总结
一步一步搭建数据驱动测试框架的过程和总结跟吴老学了搭建自动化数据驱动的框架后,我在自己练习的时候,尝试从简单的程序进行一点一点的扩展和优化,到实现这个数据驱动的框架。先说一下搭建自动化测试框架的目的:一个是实现一个功能的自动化运行,不用每次手动的去执行一些重复性的工作,用自动化程序来代替人工,提高效率,例如回归测试的反复执行。二是通过把数据和对数据的操作进行封装,减少重复代码的书写,以及测试数据和程序的分离,使自动化测试人员不用过多关注代码,维护好数据就可以进行有效的自动化测试执行,可复用性好,等等很多的好处。。。 再说一下我从无到有搭建完这个框架后的过程总结:先去把要实现的功能在一个文件里实现,然后把某一个零散功能进行封装,在主程序中调用封装好的方法,把整个过程分成多个步骤,每一个步骤只实现一个封装或优化,就像摆积木一样,完成一个地方之后,站在这个节点上去思考下一步我可以封装什么,优化什么,然后向前走一步,然后在此基础上再考虑可以优化什么,直到搭建好这个测试框架,这个过程首先是脱离框架结构的,不去想这个框架要搭成什么样,就想着现有的这个程序可以做哪些封装和优化,怎么改可以让...
python webdriver 测试框架-数据驱动xml驱动方式
数据驱动xml驱动的方式存数据的xml文件:TestData.xml:<?xmlversion="1.0"encoding="utf-8"?><bookListtype="technology"> <book> <name>SeleniumWebDriver实战宝典</name> <author>吴晓华</author> </book> <book> <name>HTTP权威指南</name> <author>古尔利<...
python webdriver 测试框架-数据驱动exce驱动,不用ddt的方式
data.xlsx: 脚本:#encoding=utf-8fromseleniumimportwebdriverimporttimeimportdatetimefromopenpyxlimport*wb=load_workbook(r'd:\test\data.xlsx')ws=wb.active#获取第一个sheetprintu"最大行号:",ws.max_row#excel行是从1开始的,所以我们从2开始迭代遍历#且使用切片,必须有结束行的索引号,不能写[1:],这样不行#列号是从0开始的,列取出来是个元祖driver=webdriver.Firefox(executable_path='c:\geckodriver')test_result=[]#print'ws:',ws[2:ws.max_row]#forrowinws[2:ws.max_row]:# printrowforrowinws[2:ws.max_row]: printrow[1],row[2]  ...
python webdriver 测试框架-数据驱动excel驱动的方式
简介:数据驱动excel驱动方式,就是数据配置在excel里面,主程序调用的时候每次用从excel里取出的数据作为参数,进行操作,需要掌握的地方是对excel的操作,要灵活的找到目标数据 测试数据.xlsx:路径-D:est627 ExcelUtil.py:#encoding=utf-8fromopenpyxlimportload_workbookclassParseExcel(object): def__init__(self,excelPath,sheetName): #将要读取的excel加载到内存 self.wb=load_workbook(excelPath) #通过工作表名称获取一个工作表对象 &n...
python webdriver 测试框架-数据驱动json文件驱动的方式
数据驱动json文件的方式test_data_list.json:[ "邓肯||蒂姆", "乔丹||迈克尔", "库里||斯蒂芬", "杜兰特||凯文", "詹姆斯||勒布朗" ] ReportTemplate.py:#encoding=utf-8 defhtmlTemplate(trData): htmlStr=u'''<!DOCTYPEHTML> <html> <head> <title>单元测试报告</title> <style> body{ ...
python webdriver 测试框架-数据驱动txt文件驱动,带报告的例子
数据驱动txt文件驱动的方式,带报告data.txt:gloryroadtest||光荣之路摔跤爸爸||阿米尔超人||电影 data_driven_by_txt_file.py:#encoding=utf-8fromseleniumimportwebdriverimporttimewithopen(u"e:\数据驱动\data.txt")asfp: data=fp.readlines() driver=webdriver.Ie(executable_path="e:\IEDriverServer")test_result=[]foriinrange(len(data)): try: driver.get("http://www.baidu.com") driver.find_element_by_id("kw").send_keys(&n...
python webdriver 测试框架-数据驱动DDT的例子
#encoding=utf-8fromseleniumimportwebdriverimportunittest,timeimportlogging,tracebackimportddt fromselenium.common.exceptionsimportNoSuchElementException #初始化日志对象logging.basicConfig( #日志级别 level=logging.INFO, #日志格式 #时间、代码所在文件名、代码行号、日志级别名称、日志信息 format='%(asctime)s%(filename)s[line:%(lineno)d]%(levelname)s%(message)s', #打印日志的时间 datefmt='%a,%d%b%Y%H:%M:%S', &nbs...
功能测试三剑客:测试框架、bug预防、探索性测试
功能测试有一套框架来实现完整的覆盖测试的各个维度 测试框架:参加本人之前的博客测试框架(包括总体的框架、web测试框架、PC客户端、手机客户端、服务器端、接口测试)六部分,罗列了各个领域的测试覆盖考虑点bug预防:主要是web端常见问题-》包括分辨率兼容性,浏览器兼容性、,link问题,快捷键和焦点的切换,前进、后退和刷新问题,页面提示语言、JS提示语言、程序提示语言、文字缩略和折行、图片的显示和链接、重复提交、输入判断问题、过个IE同时访问的问题、安全考虑、防止sql注入和跨站攻击、cookie问题、各种资源链接的释放、系统上线log配置、文档、参数的容错处理预防方法:分析问题-》找到具体原因-》解决问题-》总结问题-》建立预防方法-》规范流程和制度-》监督执行探索式测试:探索式测试的基本过程:探索性测式识别软件系统的目的,识别软件系统提供的功能,识别软件系统潜在的不稳定的区域,在探索软件系统的过程中记录关于软件的信息和问题探索测式的类型:自由式探索式测式,基于场景的探索式测式,基于策略的探索式测式,基于反馈的探索式测式 后续我会把我跟测式技术大牛学的东西详细的总...
手写实现RPC框架(不带注册中心和带注册中心两种)
实现自己的RPC框架如果不需要自定义协议的话那就要基于Socket+序列化。 ProcessorHandler:主要是用来处理客户端的请求。packagedgb.nospring.myrpc;importjava.io.IOException;importjava.io.ObjectInputStream;importjava.io.ObjectOutputStream;importjava.lang.reflect.InvocationTargetException;importjava.lang.reflect.Method;importjava.net.Socket;/***任务处理类**@authorDongguabai*@date2018/11/116:10*/publicclassProcessorHandlerimplementsRunnable{privateSocketsocket;/***服务端发布的服务*/privateObjectservice;publicProcessorHandler(Socketsocket,Objectservic...
并发编程学习笔记(15)----Executor框架的使用
Executor执行已提交的 Runnable 任务的对象。此接口提供一种将任务提交与每个任务将如何运行的机制(包括线程使用的细节、调度等)分离开来的方法。通常使用 Executor 而不是显式地创建线程。例如,可能会使用以下方法,而不是为一组任务中的每个任务调用 newThread(new(RunnableTask())).start(): 实例化Executor对象时,通常使用Executors中的静态方法返回Executor的子接口ExecutorService;这里主要介绍Executors中几个静态方法创建的线程池的作用 1)newCachedThreadPool():创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们;我们来看它的实现:publicstaticExecutorServicenewCachedThreadPool(){returnnewThreadPoolExecutor(0,Integer.MAX_VALUE,60L,TimeUnit.SECONDS,newSynchronousQ...
并发编程学习笔记(12)----Fork/Join框架
Fork指的是将系统进程分成多个执行分支(线程),Join即是等待,当fork()方法创建了多个线程之后,需要等待这些分支执行完毕之后,才能得到最终的结果,因此join就表示等待。在实际的使用中,如果毫无顾忌的使用fork()来开启线程,可能会由于线程过多而影响系统性能,因此在jdk中提供了ForkJoinPool线程池来对fork进行处理,以节省资源。 对于线程池来说,提交的任务数量并不总是与线程数相等的,大多数情况下一个物理线程可能需要执行多个逻辑任务。所以每个线程必然会有一个任务队列。在实际的执行过程中,可能会出现A线程已经执行完成队列中的所有任务了,但是B线程中还有很多任务等着执行,此时A线程就会从B线程中拿到任务过来处理,尽可能的达到平衡。需要注意的是,当线程开始帮助别的线程执行任务时,总会从其他的线程任务队列的底部开始拿,而线程执行自己任务的时候,总会从队列的顶部开始拿,这样就你能有效的避免了线程之间数据的竞争。 在看使用方式之前,先来看ForkJoinPool的一个重要的接口: public<T>ForkJoinTask<T>submit...
TensorFlow框架下的RNN实践小结
截至目前,TensorFlow的RNNAPIs还处于Draft阶段。不过据官方解释,RNN的相关API已经出现在Tutorials里了,大幅度的改动应该是不大可能,现在入手TF的RNNAPIs风险应该是不大的。目前TF的RNNAPIs主要集中在tensorflow.models.rnn中的rnn和rnn_cell两个模块。其中,后者定义了一些常用的RNNcells,包括RNN和优化的LSTM、GRU等等;前者则提供了一些helper方法。创建一个基础的RNN很简单:1from tensorflow.models.rnn import rnn_cell2cell = rnn_cell.BasicRNNCell(inputs,state)创建一个LSTM或者GRU的cell?1cell = rnn_cell.BasicLSTMCell(num_units) #最最基础的,不带peephole。2cell = rnn_cell.LSTMCell(num_units,input_si...
H5-Mui框架——修改mui.confirm样式
问题简述:/使用mui框架默认提示框时,感觉与整体布局不符,因此想要更改其中的样式。首先,查了一下资料:mui.toast样式风格及位置修改教程以下是转载过来的文章内容。===================我是完美的分割线===================使用了mui.toast来实现可自动消失的信息提示效果。但默认的显示效果太差了,很不显示,而且是在底部的。如下图:image想改到屏幕的中间位置,再改大一点。但官方并没有相关的文档教程,论坛也没找到相关的教程。只好自己研究,最终发现。消息框的DIV类为<divclass="mui-toast-container"><divclass="mui-toast-message"></div></div>所以,就可以通过修改CSS来改变了。我改后的最终效果如下:imageCSS代码如下:/*toast信息提示*/.mui-toast-container{bottom:50%!important;}.mui-toast-message{background:url(/app/themes/d...
Spring MVC 学习总结(六)——Spring+Spring MVC+MyBatis框架集成
与SSH(Struts/Spring/Hibernate/)一样,Spring+SpringMVC+MyBatis也有一个简称SSM,Spring实现业务对象管理,SpringMVC负责请求的转发和视图管理,MyBatis作为数据对象持久化引擎。这样搭配的优点是:轻量、自由度高、Spring与SpringMVC契合度更好。通过一个商品管理示例完成SSM框架的集成,可以将前面学习过的一些内容整合起来,使用到的知识包含:Spring、SpringMVC、MyBatis、JSR303校验、分页、文件上传、路径处理等。1.1、请勾选“Createasimpleproject”,创建一个简单的项目,这里不使用模板。也可以使用模板,选择WebApp,如果使用模板这里就不应该勾选。如下图所示:1.2、填写好包名、项目名,选择打包类型为:war,如下图所示:1.3、项目创建好后可能会发现有错误,选择项目,右键“属性properties”->"层面ProjectFacets"->"Java"修改版本号为1.7,默认为1.5或其它版本,先去掉“DynamicWebModule”保存后再勾选,选...
现有的框架实际上使用以下三种基本技术的框架执行服务和部件间的绑定:
现有的框架实际上使用以下三种基本技术的框架执行服务和部件间的绑定: 类型1(基于接口):可服务的对象需要实现一个专门的接口,该接口提供了一个对象,可以从用这个对象查找依赖(其它服务)。早期的容器Excalibur使用这种模式。 类型2(基于setter):通过JavaBean的属性(setter方法)为可服务对象指定服务。HiveMind和Spring采用这种方式。 类型3(基于构造函数):通过构造函数的参数为可服务对象指定服务。PicoContainer只使用这种方式。HiveMind和Spring也使用这种方式。 ...