pytthon自动化代码大全

pytthon自动化代码大全

2023年6月29日发(作者:)

pytthon⾃动化代码⼤全1.1 ⾃动化测试简介⾃动化测试:利⽤⼀些⼯具或者编程语⾔,通过录制或者编程的⽅法,设定特定的测试场景,模拟⽤户业务使⽤流程,⾃动寻找缺陷⾃动化测试优点:1. 对程序的回归测试更⽅便,提升回归效率,节约⼈⼒。2. 可以执⾏⼀些⼿⼯测试困难或不可能进⾏的测试。3. 更好地利⽤资源。将繁琐的任务⾃动化,可以提⾼准确性和测试⼈员的积极性,将测试技术⼈员解脱出来,投⼊更多精⼒设计更好的测试⽤例4. 测试具有可重复性。5. 增加软件信任度,由于测试是⾃动执⾏的,所以不存在执⾏过程中的疏忽和错误,完全取决于测试的设计质量。⾃动化测试缺点:1. 不能取代⼿⼯测试,⼯具本⾝并⽆想像⼒。2. 对⾃动化测试⼈员要求较⾼。3. 对被测试系统质量的依赖性极⼤,维护成本⾼。4. 测试脚本本⾝也可能存在缺陷。5. 编写的测试脚本⼯作量有时也很⼤,甚⾄会有超过⼿动测试的时间。适合⾃动化测试的产品:1. 软件需求变动不频繁。2. 项⽬周期长,规划性强。3. 回归测试任务重。4. 项⽬进度压⼒不⼤。⾃动化测试分类:功能⾃动化测试性能⾃动化测试安全⾃动化测试1.2 selenium简介Selenium 实际上不是⼀个⼯具,⽽是⼀个⼯具集。Selenium在2.0之前主要包括四个⼯具:Selenium IDE(⽕狐的⼀个插件,可以快速的实现录制和回放脚本)Selenium RC (Selenium 1.0的核⼼,实现对浏览器的控制但是有很多限制)Selenium Webdriver (Selenium 2.0 以后的核⼼,⽤于控制浏览器)Selenium Grid(⽀持脚本在多台机器上并⾏执⾏脚本,提升执⾏效率)Selenium3.0版本,由以下3核⼼组件组成:Selenium IDESelenium GridSelenium WebdriverSelenium IDE:IDE是嵌⼊到 Firefox 浏览器 的⼀个插件,实现了简单的录制和回放功能。为了快速的创建bug,重现脚本,在测试过程中,测试⼈员可以在发现了bug后把相应的操作步骤给录制和回放下来。便于开发⼈员快速的定位与修复bug,节省项⽬的开发周期。Selenium Grid:Selenium Grid是⼀种⾃动化测试辅助⼯具,利⽤Grid可以⽅便的实现在多台机器上和异构环境中运⾏测试⽤例。Selenium Webdriver:WebDriver⽤于操作浏览器,通过WebDriver设计的API来实现的。Webdriver是⼀套标准库,不依赖于任何测试框架,除了必要的浏览器驱动,不需要启动其他进程或安装其他程序。1.3 selenium安装webdriver下载地址:Firefox:IE:其它驱动:webdriver安装:将插件放⼊python安装路径下(D:PythonPython37)(Firefox版)1.4 辅助⼯具选择⾃⼰想要的web测试⼯具 ,如:Web Developer、xPath Finder等点击【添加到Firefox】⽹页开发者(Web Developer)是Mozilla Firefox浏览器上⼀个强⼤的扩展插件。它加⼊了⼏个菜单与⼀条⼯具栏以及多种⽹页开发者⼯具,上⾯集成了⼤量的⽹页开发⼯具,可以调试CSS、清理Cookie、对表单图⽚等对象进⾏操作等。第⼆章 WebDriver API2.1 WebDriver API介绍 API(Application Programming Interface,应⽤程序编程接⼝)是⼀些预先定义的函数,⽬的是提供应⽤程序与开发⼈员基于某软件或硬件得以访问⼀组例程的能⼒,⽽⼜⽆需访问源码,或理解内部⼯作机制的细节。API 接⼝属于⼀种操作系统或程序接⼝.分类:Windows API、linux API 基于Python的Webdriver API是Python语⾔通过调⽤API来操作浏览器。API库针对多种语⾔实现,所以可以⽀持Python、Java、Ruby、C#等语⾔调⽤。2.2 浏览器操作

get(url):打开指定页⾯set_window_size(x,y) :设置窗⼝⼤⼩maximize_window():放⼤浏览器为全屏模式minimize_window() 最⼩化forward():前进

back():后退refresh():页⾯刷新close() 关闭窗⼝2.3 界⾯元素操作click() :点击界⾯元素按钮clear() :清除元素内容send_keys(参数1,参数2,……) :发送⽂字,参数:字符串submit():⽤于提交表单form、信息,相当于回车操作。2.4 元素定位常见的元素定位⽅式:元素的定位与操作是⾃动化测试的核⼼部分,其中操作⼜是建⽴在定位的基础上的,因此元素定位就显得⽐较重要。⼀个元素的定位,他会有各种的特征(属性),⽐如我们可以通过⼀个⼈的⾝份证号码、姓名或者他的地址找到这个⼈。那么元素也是有类似的属性的,我们可以通过这个唯⼀区别于其他元素的属性来定位这个元素。当然,除了要操作的元素需要定位,有的时候我们需要获得元素的具体text的值或者属性值时,也需要先定位元素,再进⾏进⼀步的操作。id:find_element_by_id() #通过id来查找元素name:find_element_by_name() #通过name来查找元素class name:find_element_by_class_name() #通过类名查找元素link text:find_element_by_link_text() #通过某个超链接的⽂本字符进⾏查询partial link text:find_element_by_partial_link_text()xpath:find_element_by_xpath()#通过路径定位css selector:find_element_by_css_selector()#通过选择器定位tag name:find_element_by_tag_name())#通过标签名定位使⽤id、name定位:id和name定位⽅式是最常见的2种定位⽅式,因为⼤多数标签都有这2种属性。使⽤class name定位:为了弥补前端开发⼈员没有使⽤id和name属性时的情况,可以使⽤class属性来进⾏定位。

注意:class属性为复合类(即包含空格)时,可取其⼀或选择其他定位⽅式。使⽤link text或partial link text定位:有时需要操作的元素是⼀个⽂字链接,可以通过link text或者 partial link text进⾏定位操作。注意:定位标签才能使⽤使⽤xpath定位: 有时候⽆法查到测试对象较为完善的属性和属性值的时候,selenium提供了⼀个更为全⾯的⽅法,通过元素在被测页⾯中的位置属性来进⾏查找,即xpath路径定位。 前⾯⼏种元素都⽆法定位的情况下,才使⽤xpath路径定位。xpath是某个元素的位置。 路径:是xpath识别对象的⼀种⽅式,即设置测试对象在页⾯中的路径地址,然后通过该地址进⾏元素查找。 xpath 是html的⼀种路径标记语⾔,⽬的是为了能标记并快速定位⽂件中的某个元素(标签)。xpath的常⽤语法:通过绝对路径定位元素(不推荐使⽤): find_element_by_xpath("/html/body/div/form/input");通过相对路径定位元素:find_element_by_xpath("//div/input");#选取所有的div下⾯的input使⽤索引定位元素:find_elements_by_xpath("//input[4]"); #全页⾯查找,查找这个页⾯上所有的第4个inputfind_elements_by_xpath("//input")[3]; #全页⾯查找所有的input,取第4个input(find_elements_by_xpath 定位⼀组元素,返回列表)xpath的常⽤语法:使⽤xpath及属性值定位元素:语法:xpath = "//标签名[@属性='属性值']"find_element_by_xpath("//input[@id='kw']"); # 全⽂查找id = kw的这个input标签部分属性值匹配:find_elements_by_xpath("//*[contains(@href, '')]")匹配包含属性的值 #全⽂查找所有标签,href属性包含的标签find_elements_by_xpath("//*[starts-with(@href,'https')]")匹配开始字段,ends-with⽅法不可⽤ #全⽂查找所有标签,href属性以https开头的标签Xpath定位⽅式的缺点:由于xpath需要遍历页⾯,所以定位元素的性能要⽐其它的⽅式差不够健壮,xpath会随着页⾯元素的改变⽽改变兼容性不好,在不同的浏览器下对xpath的实现不⼀样CSS”表⽰该属性是在哪个CSS版本中定义的使⽤css定位:相较于xpath,使⽤css选择器定位写法更简洁。.名字 类选择器 class# id 选择器全部前3后1[attribute|=value] 选择器⽤于选取属性值以指定值开头的元素。注释:value 该值必须是整个单词,⽐如 lang="en",或者后⾯跟着连字符,⽐如 lang="en-us"。 lang="en us" 取不到^= ⼦串$= ⼦串*= ⼦串|= 单词(只能以 - 为分隔符,单独只有en)~= 单词(只能以空格为分隔符)前3后15~7 最后2个^= ⼦串$= ⼦串*= ⼦串|= 单词(只能以 - 为分隔符)~= 单词(只能以空格为分隔符)2.5 获取界⾯元素内容size:获取元素的尺⼨text:获取元素的⽂本title:获取页⾯标题current_url:获取当前url地址get_attribute:获取元素属性值2.6 键盘操作键盘使⽤from import Keys的Keys类,⼀般send_keys函数联⽤,常见的⽅法:send_keys(_SPACE) 删除键(BackSpace)send_keys() 空格键(Space)send_keys() 制表键(Tab)send_keys() 回退键(Esc)send_keys() 回车键(Enter)send_keys(L,'a') 全选(Ctrl+A)send_keys(L,'c') 复制(Ctrl+C)send_keys(L,'x') 剪切(Ctrl+X)send_keys(L,'v') 粘贴(Ctrl+V)2.7 ⿏标常见⿏标操作包含在 _chains的ActionChains 类中,常⽤的⽅法:context_click() 右击double_click() 双击click_and_hold() 左击悬停move_to_element() ⿏标悬停drag_and_drop() 拖动perform() 执⾏ActionChains中存储的⾏为click() 单击(点击⿏标左键⼀次)2.8 定位⼀组元素 Webdriver可以很⽅便的使⽤find_element⽅法来定位某个特定的对象,不过有时候我们却需要定位⼀组对象,WebElement 接⼝同样提供了定位⼀组元素的⽅法 find_elements。批量操作对象,⽐如将页⾯上所有的 checkbox 都勾上,先获取⼀组对象,再在这组对象中过滤出需要具体定位的⼀些对象。⽐如定位出页⾯上所有的checkbox,然后选择最后⼀个。2.9 层级定位先定位某⼀个元素,再定位该元素下的元素2.10 多窗⼝在页⾯操作中点击链接有时会弹出⼀个新的浏览器窗⼝,这就涉及多窗⼝的切换操作。current_window_handle 获取当前窗⼝handlewindow_handles 获取所有窗⼝handle,得到⼀个列表switch_(句柄号) 切换窗⼝2.11 多表单Web页⾯中经常⽤到Frame/Iframe表单嵌套页⾯,使⽤Frame重载页⾯时不需要重载整个页⾯,只需要重载页⾯中的⼀个框架页(减少了数据的传输,加快了⽹页下载速度)。WebDriver只能在⼀个页⾯上对元素识别与定位,如果跨Frame定位元素是⽆法直接定位的,必须先切换到该元素所在的Frame才能定位。switch_() 切换到指定Frame,参数:定位到的Iframe元素switch__frame() 切换到上⼀层frameswitch_t_content() 跳到最外层frame

2.12 弹出框对js(JavaScript)使⽤的alert、confirm 以及 prompt定位也是项⽬中常见的,⽐如弹出提⽰框“确定”等。要定位这类提⽰框具体思路是switch_to_alert()⽅法定位alert/confirm/prompt,然后使⽤text/accept/dismiss/send_keys这⼀系列动作。text # 获取alert⽂本内容accept() # 等同于点击“确认”或“OK”dismiss() # 等同于点击“取消”或“Cancel”send_keys(keysToSend) # 发送⽂本,对有提交需求的prompt框2.13 下拉框常见下拉框操作包含在的Select 类中,常⽤的⽅法:select_by_value('value') 通过value值选择select_by_visible_text('text') 通过⽂本选择select_by_index(index) 通过索引选择,索引从0开始2.14 等待当浏览器加载页⾯时,这个页⾯的很多元素加载的时间可能不⼀致。此时如果某个要定位的元素还没有加载出来的话,在定位的时候,就会抛出异常。这个时候,合理使⽤ wait,就可以避免异常的发⽣。Selenium Webdriver 提供了两种类型的等待⽅法:隐式等待(implicit) 和 显⽰等待(explicit)。隐式等待:在设定的时间t内等到页⾯上的元素加载完成。若在时间t内元素加载完成,则剩下的时间不需要再等待,若时间t外,元素还未被加载则系统报错。隐式等待是全局的,作⽤在整个脚本上,所以在⼀个脚本中只需要设置⼀次即可。显式等待:在设定的时间内,按照固定的时间间隔扫描指定元素是否加载完成,加载完成则剩下的时间不再等待,代码继续往下执⾏,如果在时间t内没有加载完成则系统报错。注意:隐式等待和显式等待都可以设置,等待的最长时间取两者之中的⼤者。implicitly_wait(max_time) 隐式等待时间WebDriverWait(driver, max_time, check_time).until(expected_ce_of_element_located(locator))max_time最长等待时间,check_time每隔xx时间判断,locator判断的元素,元组调⽤itly_wait(10) [ɪmˈplɪsɪtli] 在获取不可⽤的元素之前,会等待10秒的时间。WebDriverWait(driver, timeout,check_time,ignored_exceptions).until(expected_ce_of_element_located(locator),message)WebDriverWait():driver: WebDriver的驱动程序(Ie, Firefox, Chrome ),既是传⼊WebDriver实例,即driver。timeout: 超时时间,等待的最长时间check_time: 调⽤until中⽅法的间隔时间,默认是0.5秒ignored_exceptions: 超时后的异常信息,默认情况下抛NoSuchElementException异常。(没有找到元素)。until(): method: 在等待期间,每隔⼀段时间,调⽤这个⽅法,直到返回值为True message: 如果超时,抛出TimeoutException,将message传⼊异常presence_of_element_located()presence_of_element_located()判断元素是否存在2.15 ⽂件上传⽂件上传:普通的附件上传是将本地⽂件的路径作为⼀个值放在input 标签中,通过form 表单将这个值提交给服务器。可以通过send_keys("⽂件路径")直接上传。2.16 截图⼀般在执⾏⽤例时,如果⽤例失败,需要将当前窗⼝截图保存⽅法:get_screenshot_as_file('imgname')2.17 验证码验证码操作⽅法:1.去掉验证码 :开发只要把验证码的相关代码注释掉即可2.设置万能码3.验证码识别技术(OCR)(例如Python-tesseract识别图⽚验证码)可以通过python-tesseract来识别图⽚验证码。不过,验证码形式繁多,⼤多验证码识别技术,识别率很难达到100%第三章 unittest框架3.1 unittest简介unittest是⼀个python版本的单元测试框架,可以⽤于python的单元测试。相似的其它语⾔⼯具Java的Junit,C#的Nunit等。可以使⽤Unittest做单元测试,也可以完成Web⾃动化测试。⾃动化测试⽤例的组织和管理提供丰富的⽐较⽅法,完成结果的检查提供执⾏过程数据,如:执⾏时间、执⾏结果等3.2 unittest语法Test Case:⼀个TestCase实例就是⼀个测试⽤例,即⼀个test开头的测试函数。Test Fixture:⽤于测试前的环境初始化和测试后的环境清理,通过setUp函数和tearDown函数完成。Test Runner:unittest单元测试框架提供了TextTestRunner类来运⾏多个Test Suite或test case。

Test Suite:⼀个功能测试需要很多Test Case,可以多个测试⽤例统⼀进⾏执⾏,把多个⽤例加到⼀个Test Suite中。3.3 断⾔断⾔⽅法是 unittest 框架提供的⼀组⽅法,可以通过这些⽅法完成期望结果和实际结果的对⽐。assert+空格+要判断语句+逗号+“报错语句” python提供assertEqual(a,b,msg=None) 检查a==b,不等则报错assertNotEqual(a,b,msg=None) 检查a!=b,相等则报错assertIn(a,b,msg=None) 检查a in b,不在报错assertNotIn(a,b,msg=None) 检查a not in b,在报错assertTrue(a,msg=None) 检查表达式a成⽴,不成⽴报错assertFalse(a,msg=None) 检查表达式a不成⽴,成⽴报错assertIsInstance(obj,cls,msg=None) 检查obj是cls⼀个实例,是则pass,不是就报错assertNotIsInstance(obj,cls,msg=None)检查obj不是cls⼀个实例,是则pass IsNone(expr,msg) IsNotNone(expr,msg)3.4 测试⽤例管理通过Test Suite 测试集(测试套件)来组装单个测试⽤例,然后通过addTest⽅法加载TestCase添加到TestSuite中。接着调⽤unittest框架的TextTestRunner( )类,通过TextTestRunner对象调⽤Run()⽅法运⾏suite中所组装的测试⽤例。discover⽅法批量执⾏脚本⽤例。使⽤discover⽅法会⾃动收集指定⽬录下的测试⽤例添加到测试套件中,然后通过run()⽅法执⾏discover,⼤⼤简化了测试⽤例的查找和执⾏。3.5 HTML测试报告⾃动化测试执⾏完成以后,需要输出⼀个完整的测试报告,供测试⼈员查看测试执⾏情况,确认⾃动化测试执⾏发现的缺陷情况。HTMLTestRunner是Python标准库的unittest单元测试框架的⼀个扩展,可以⽣成⼀个可读性很强的HTML格式的测试报告。下载地址:下载⽂件,然后将其复制到 D:PythonPython37Lib 下(以实际安装⽬录为准)第四章 ⾃动化测试模型4.1 线性编程通过录制或编写对应的程序操作步骤产⽣的相应的线性脚本,每个测试脚本相对独⽴,且不产⽣其他依赖与调⽤,早期⾃动化测试的⼀种形式,其实就是单纯的模拟⽤户操作场景。线性脚本缺点:开发成本⾼,重复性代码编写多次。维护成本⾼,修改代码难度⼤、⼯作量⼤。4.2 模块化驱动测试借鉴编程语⾔中模块化思想,把重复性操作独⽴成公共模块,使⽤到的时候直接调⽤公共模块即可,不⽤重复的编写,从⽽降低代码量、提⾼⾃动化测试脚本的可维护性。模块化脚本优点:提⾼了开发效率,降低重复性代码的编写。简化了代码维护的复杂度和⼯作量。代码清晰4.3 代码分层模块后脚本存在问题:所有测试⽤例代码在⼀个⽂件中,如果测试模块多时测试脚本过⼤。解决⽅法:每个模块的测试⽤例代码单独放在⼀个⽂件中新建⼀个测试运⾏⽂件,调⽤所有测试⽤例代码改造后代码分为三层:执⾏⽂件、测试⽤例、页⾯4.4 数据驱动测试模块化解决了测试代码重⽤性的问题,但是代码中测试的操作与测试数据耦合在⼀起的,⼀旦需要对⼤量不同的数据进⾏测试时,就需要重新编写⼤量的测试⽤例。数据驱动是可以很好的解决这个问题,数据驱动可以将测试代码与测试数据很好的分离。测试数据存放在另外的⽂件中进⾏单独的维护,可以快速增加相似的测试数据,完成在不同的数据下的测试。1、数据储存在py⽂件中,使⽤全局变量、常量2、数据储存在txt⽂本中,使⽤变量赋值、字典、列表等相同形式3、数据储存在csv⽂件中4、数据储存在xls、xlsx⽂件中第五章 静静的思考,慢慢的积累,很多新兴的知识是要不断地复习,才会掌握的更加深刻,视频的⼈⽣,还是过于不太充实,更多的是要有思想活动,和⽣活记忆的记录,让想法变于现实!

发布者:admin,转转请注明出处:http://www.yc00.com/news/1688022338a67559.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信