基于Selenium的Web自动化测试技术的研究与应用.doc
-
资源ID:96763953
资源大小:2.88MB
全文页数:46页
- 资源格式: DOC
下载积分:25金币
快捷下载
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
基于Selenium的Web自动化测试技术的研究与应用.doc
广东东软学院本科生毕业设计(论文)摘要本文通过对基于Selenium自动化测试技术的研究与分析,对需要进行自动化测试的Web应用进行整体的需求分析及用例设计;之后通过Selenium与Python3相结合,使用po模型,关键字模型,数据驱动,Unittest测试框架等测试技术与思想理念,对Web应用设计高质量的自动化测试脚本代码。通过这样设计和编写的自动化测试脚本拥有较高的稳定性,高效性,健壮性和代码的简洁性,这样可以让我们自己编写的自动化测试脚本不仅仅只适用于一个系统,还可以适用于大多数相似功能的系统,这将大大降低自动化测试的成本。最后可以进行自动化测试脚本的执行与测试报告的生成,分析测试结果。通过自动化测试脚本代码来执行一些人类难以执行或重复机械的用例,这样可以解放测试人员的劳动力,将他们从机械化的工作中解放出来,令他们有更多的时间与精力去发现新的bug,设计更高效的测试用例,从而提高应用整体的质量。关键词: Selenium Python3 自动化测试40AbstractIn this paper, through the research and analysis based on Selenium automated testing technology, the overall needs analysis and use case design of the Web application that needs to be automated tested; afterwards, through the combination of Selenium and Python3, use the po model, keyword model, data driven, Unittest Test technologies and ideas such as test frameworks, and design high-quality automated test script codes for Web applications. Automated test scripts designed and written in this way have high stability, efficiency, robustness and code simplicity, which allows us to write automated test scripts that are not only applicable to one system, but also applicable to large Most systems with similar functions will greatly reduce the cost of automated testing. Finally, the execution of automated test scripts and the generation of test reports can be performed to analyze test results.Execute some use cases that are difficult for humans or repeat machinery through automating test script code, which can liberate the labor of testers and free them from mechanized work, so that they have more time and energy to discover new bugs, Design more efficient test cases to improve the overall quality of the application.Key words:Selenium Python3 automated test目 录第一章 绪论11.1 课题研究背景11.2 课题研究目的及意义11.3 国内外研究现状11.4 课题研究的主要内容21.5 本章小结2第2章 Selenium自动化测试技术的研究32.1 Selenium的兼容性分析32.2 Selenium的易用性分析32.3 Selenium的功能性分析32.4 Selenium的经济性分析42.5 本章小结4第3章 测试环境的配置53.1 Python环境配置53.2 PyCharm环境配置63.3 Selenium环境配置73.4本章小结7第4章 Web程序的自动化设计与分析84.1 测试需求分析84.2 测试用例设计94.2.1 等价类划分法94.2.2 边界值分析法94.2.3 错误推断法104.2.4 因果图法104.2.5 场景设计法104.2.6 豆瓣网自动化测试用例设计104.3 本章小结15第5章 基于Selenium的自动化脚本设计165.1 测试脚本的设计165.1.1 驱动的设置及浏览器和网页的打开165.1.2 定位元素165.1.3 操作frame层中的元素175.1.4 弹窗处理175.1.5 简单的登录自动化185.2 测试脚本的优化205.2.1 元素定位操作与Web页面元素的数据分离205.2.2 操作层、业务层与元素读取层的分离225.2.3 测试用例的编写与执行245.3 测试脚本健壮性加强255.3.1 Unittest测试框架255.3.2 数据驱动275.3.3 关键字模型295.4 本章小结32第6章 测试结果分析346.1 测试报告的生成346.2 如何封装及输出日志文件356.3 本章小结37第7章 总结与展望387.1 总结387.2 后续研究展望387.3 本章小结38参 考 文 献39致 谢40图表目录图 3 - 1 Python环境配置5图 3 - 2 验证Python是否安装成功6图 3 - 3 PyCharm中创建新Python项目6图 3 - 4 浏览器驱动配置7图 4 - 1 豆瓣网基础系统功能结构图8图 4 - 2 豆瓣网登录模块自动化测试用例12图 4 - 3 豆瓣网电影模块自动化测试用例14图 5 - 1 打开浏览器与网页脚本16图 5 - 2 定位元素脚本17图 5 - 3 跳转frame层脚本17图 5 - 4 跳转弹出框脚本18图 5 - 5 基础自动化脚本119图 5 - 6 基本自动化脚本219图 5 - 7 存储定位元素信息的配置文件21图 5 - 8 读取配置文件的方法21图 5 - 9 定位元素类22图 5 - 10 元素读取层22图 5 - 11 元素操作层123图 5 - 12 元素操作层223图 5 - 13 业务层124图 5 - 14 业务层224图 5 - 15 测试用例层25图 5 - 16 Unittest测试框架126图 5 - 17 Unittest测试框架226图 5 - 18 Unittest测试框架326图 5 - 19 参数化数据27图 5 - 20 操作excel文件128图 5 - 21 操作excel文件228图 5 - 22 优化测试用例类129图 5 - 23 优化测试用例类229图 5 - 24 关键字模型行为方法的封装130图 5 - 25 关键字模型行为方法的封装231图 5 - 26 操作关键字模型的excel文件31图 5 - 27 关键字模型调用132图 5 - 28 关键字模型调用232图 6 - 1 测试报告生成代码34图 6 - 2 测试报告结果34图 6 - 3 举例测试用例数目35图 6 - 4 用例执行结果35图 6 - 5 日志模块代码136图 6 - 6 日志模块代码236图 6 - 7 调用日志模块37图 6 - 8 日志输出37第一章 绪论1.1 课题研究背景随着当代技术的不断发展,以前只要开发出一个产品就可以赚钱的时代早已经不复存在了。现今,想要真正开发一个受用户喜爱,能够在同一行业上可以赢得过竞争对手的产品,最主要是需要保证产品的质量,若要保证软件的质量,那么软件测试就是必不可少的。为了能够让测试人员从繁琐重复的测试流程中解脱出来,把更多的时间和精力放在更有价值的测试中来,使产品的质量更加有保证,那么选择自动化测试技术来优化测试工作就是一个很好的选择。而基于Selenium的自动化测试技术可以很好地协助我们进行自动化测试脚本的编写,特别是对于Web应用,Selenium自动化测试技术可以更加高效简洁地对其进行自动化测试脚本的编写。1.2 课题研究目的及意义我们需要在什么时候使用自动化测试?为什么要执行自动化测试?若一个项目周期长,需求比较稳定而且界面变动较少;而且需要测试人员频繁的进行回归测试,出现大量需要重复性运行的测试用例;进行手工测试比较容易出错或手工测试成本很高的时候,我们就可以尝试着进行自动化测试,使软件测试人员尽量从繁琐的、重复性的测试工作中解放出来,使其有时间去进行其他有意义的测试。Selenium自动化测试技术对于我们测试人员来说是一个好的选择,在对于Web应用的自动化测试设计时,其可以让我们将好钢用在刀刃上,减少我们自动化测试的开发成本和精力。自动化测试可以更好的利用测试资源,将有限的资源投入到更有效的工作中去,为产品的质量提供了保障,使其在市场上更加有竞争力。1.3 国内外研究现状2004年,Jason Huggins开发了Selenium1;2006 年,Simon Stewart 开发了一款名为WebDriver的浏览器自动化工具;2009年,Selenium1与WebDriver合并,Selenium2诞生;2016年10月13日,Selenium正式宣布Selenium3的发布。通过Selenium1、Selenium2、Selenium3的迭代,用于测试 Web 应用程序用户界面 (UI) 的框架Selenium能够在更多场景内使用。国内外越来越多的测试人员使用Selenium进行自动化测试,使得我们可以在各种社区和论坛上找到我们遇到问题的解决方法,降低了学习Selenium的成本,这样促使Selenium自动化技术能够蓬勃发展,越来越强大。1.4 课题研究的主要内容本课题主要通过Selenium3和Python3相结合,通过使用po模型的思想来设计和封装Selenium脚本,通过Unittest测试框架,数据驱动,关键字模型的使用,加强脚本的健壮性与复用性,降低自动化成本。在脚本编写过程中,通过使用Assert断言来判断case执行是否通过,通过编写生成测试报告方法,封装case运行失败时自动截图的方法,编写日志模块的使用方法来提高自动化测试的质量。1.5 本章小结本章主要介绍了基于Selenium自动化测试技术对Web端应用的研究与应用这个课题的背景及研究的目的和现状,通过本章说明之后本课题将要做什么,怎么做。第2章 Selenium自动化测试技术的研究2.1 Selenium的兼容性分析Selenium自动化测试技术支持多浏览器,多语言使用。Selenium支持Chrome,Firefox,IE等不同内核的浏览器,若要使用Selenium来模拟浏览器操作,仅需拥有浏览器对应的驱动即可轻松使用Selenium自动化框架,Chrome浏览器对应ChromeDriver驱动,Firefox浏览器对应FirefoxDriver驱动,IE浏览器对应InternetExplorerDriver驱动。本文使用Chrome浏览器来进行自动化测试。Selenium支持Python、Ruby、java、PHP、C#、JavaScript等主流语言,不论选择哪种语言来编写Selenium自动化脚本,均有其优点。本文使用Python语言来编写Selenium自动化脚本。22.2 Selenium的易用性分析对于不懂代码却又想做自动化的人来说,Selenium无疑是其一个很好的选择,其可以使用SeleniumIDE这个工具来进行Selenium脚本的录制。SeleniumIDE是Firefox浏览器的一个插件,依附于Firefox浏览器。若我们想要使用SeleniumIDE来录制Selenium自动化脚本,则需下载和安装Firefox浏览器。SeleniumIDE可以简单地模拟人在浏览器的操作,拥有录制和回放功能。Selenium IDE 还有记录功能,可以记录用户操作,还能选择多种语言将它们导出到一个可复用的脚本中用于后续操作。2.3 Selenium的功能性分析Selenium能够真实模拟正常用户在浏览器操作Web应用的操作,这使我们编写的自动化脚本可以真实有效地模拟现实的行为来进行测试。Selenium经历了三个版本的更新,Selenium1、Selenium2和Selenium3。Selenium1应用了基于 Javascript 的自动化引擎,但是浏览器对于Javascript有许多安全限制,很多想要模拟的自动化行为无法实现,而且随着Web应用越来越强大,其运用了更多浏览器提供的特性,越来越多的限制使得Selenium1的局限性越来越大。为了解决浏览器对于Javascript的安全限制问题,工程师们开发了WebDriver 项目,在2009年,Selenium 和 WebDriver 这两个项目合并,最终形成了Selenium2。Selenium2利用浏览器内的原生API,封装成面向对象的Selenium WebDriver API,可以直接操作在浏览器页面中的元素,甚至是操作浏览器自身。为了使编写的自动化测试脚本更加稳定,Selenium3面世了。Selenium3移除了Selenium 1 中不再使用到的 Selenium RC,且官方重写了所有浏览器驱动。新增了对Edge和safari原生驱动的支持,开始支持geckodriver驱动,通过geckodriver来驱动Firefox浏览器的控制。本文使用Selenium3版本来进行自动化测试。2.4 Selenium的经济性分析Selenium是一款开源的自动化测试工具,相对于惠普的UFT,其开源的特性可以减少自动化测试所需的资金消耗,这对于想要开展自动化测试的中小型企业来说十分重要。2.5 本章小结通过对Selenium的兼容性、易用性、功能性和经济性进行分析,我们可以清晰的知道我们为什么选择Selenium来进行自动化测试,在本文中,将使用Python3和Selenium3来对Web应用进行自动化测试。第3章 测试环境的配置3.1 Python环境配置我们可以在Python官网下载安装包,之后双击下载下来的文件Python-3.7.3-amd64.exe,开始安装Python,在安装界面勾选Add Python to PATH选项,最后点击close退出。在安装时自动配置的Python环境变量为在path中添加Python的安装路径,如图3-1所示图 3 - 1 Python环境配置运行cmd,在命令行中输入:Python -V,若显示出Python版本则显示安装成功。如图3-2所示图 3 - 2 验证Python是否安装成功3.2 PyCharm环境配置1、在官网下载PyCharm并安装完成后,双击安装成功后在桌面显示的PyCharm图标,在弹出的窗口处选择“Do not import settings”,之后点击ok进入下一步2、勾选“I confirm that I have read and accept the terms of this User Agreement”后点击“continue”3、点击“Send Usage Statistics”或“Dont send”均可,此处询问自己愿不愿将信息发送JetBrains来提升他们产品的质量自己愿不愿将信息发送JetBrains来提升他们产品的质量4、之后跳转到皮肤选择页面,可按自己喜好选择Darcula或Light5、点击左下角的skip remaining and set defaults(跳过其余和设置默认值)进入激活界面,选择第二个License server。此时PyCharm安装配置完成。6、PyCharm配置完成后,新建一个Python项目,如图3-3所示图 3 - 3 PyCharm中创建新Python项目3.3 Selenium环境配置我们可以通过pip下载Selenium,之后只需要通过使用from Selenium import Webdriver即可调用Selenium进行自动化脚本的编辑。若要使用Selenium来进行Web应用的自动化,我们还需安装和配置自动化测试时使用的浏览器驱动,Chrome浏览器对应ChromeDriver驱动,Firefox浏览器对应FirefoxDriver驱动,IE浏览器对应InternetExplorerDriver驱动。最后将下载的浏览器驱动放入Python的安装目录中即可使用Selenium来打开浏览器。如图3-4所示图 3 - 4 浏览器驱动配置3.4本章小结本章主要说明了要使用Selenium进行自动化测试时需要进行准备的环境和工具,通过本章可以做好编写Selenium自动化测试脚本的前置准备,为Selenium脚本能够正常执行提供保障。第4章 Web程序的自动化设计与分析4.1 测试需求分析豆瓣网的基础系统功能结构图如图4-1所示图 4 - 1 豆瓣网基础系统功能结构图本课题主要对豆瓣网进行自动化测试设计研究。通过对豆瓣网各个功能模块的研究,进行自动化需求分析。登录豆瓣网,通过对登录的豆瓣网的页面进行分析,可将豆瓣网划分为豆瓣、读书、电影、音乐、同城、小组、阅读、FM、时间、豆品和更多等11个模块,对于自动化测试脚本,可根据不同模块进行设计,通过PO模型思想,使用Unittest测试框架和关键字驱动的方法,我们可根据实际需求进行自动化脚本设计。本研究主要针对豆瓣网的登录模块以及电影模块进行自动化脚本设计,豆瓣网的登录模块主要短信登录和密码登录,本研究主要以密码登录的方式来编写自动化脚本。电影模块有“我看”,“影讯&购票”,“选电影”,“电视剧”,“排行榜”,“分类”,“影评”,“年度版单”,“书影音报告”等9个模块,年度版单与书影音报告这两个模块不适合做自动化设计,此处不作考虑。我们通过对这些模块执行重复且简单的点击与输入操作进行自动化脚本的设计,那么即使以后系统进行迭代升级需要进行回归测试,使用已经写好的自动化测试脚本进行自动化测试可以将测试人员从这些大量重复且繁琐的工作中解放出来,更好地对系统的新功能模块进行测试。通过对豆瓣网那些拥有大量重复性工作或手工测试容易出错或手工测试成本高的测试场景进行自动化测试脚本的设计,使系统在进行回归测试时更加高效准确,可以更加有效地保障了系统的质量,保证即使不断地迭代更新系统,其旧版本的功能也不会受到影响,可以正常使用。这对于维护一个大型的网站很有实际性的意义。4.2 测试用例设计对于自动化测试的用例设计,虽然与功能测试的用例设计有些微的不同,但是所运用的设计思维都是相似的。在黑盒测试中,我们最为常见的测试方法有等价类划分法,边界值分析法,错误推断法,因果图法,场景设计法等。104.2.1 等价类划分法我们在做测试时是无法做到穷尽测试的,此时我们需要将具有相同属性或方法的事物放在一个集合中,在这个集合中某个个体所表现的特征与其他个性完全一致,此刻来进行测试时,我们可以知道对于某个被测对象的测试输入而言,某个个体能够被拒绝和接受,则该个体所在集合中的任意个体都应该被接受或拒绝。这就构成了等价。之后将多个集合根据其对于系统而言是有意义还是无意义的进行划分,分为有效等价类和无效等价类。通过等价类划分法,我们可以更加有效的设计测试用例,减少效果重复的测试用例的编写与执行,大大降低了测试成本,提高了测试效率。在本研究中,以登录模块为例,对于用户名和密码的输入数据进行有效等价类和无效等价类的划分,例如有效等价类中用户名与密码均正确的时候,我们可以知道其预期结果为登录成功,此时界面不会有登录模块的页面数据。我们之后可以通过这些来验证自动化测试用例执行之后是否达到我们的预期结果,测试用例是否执行成功。4.2.2 边界值分析法如果需求规定了取值范围或规定了取值个数时,我们可以使用边界值分析法,通过对输入数据的上点,离点和内点,取这些代表性的数据来代替庞大的输入数据量,以达到缩减测试用例的目的,其中上点为边界上的点,离点为离上点最近的点,内点为边界有效范围内的点。在本研究中,豆瓣网登录模块中用户名要求输入手机号或邮箱,以手机号为例,一般为11位是数字字符,此时我们可以根据边界值分析法,其上点为11位,离点为10位与12位,内点为5位,通过这样可以缩减测试用例的编写。4.2.3 错误推断法根据经验与常识,推断测试的软件可能存在哪些问题,针对这些问题编写相对于的测试用例。本研究中,通过正常的使用习惯,我们可以知道输入错误的用户名和密码界面会出现错误提示,输入正确的用户名和密码则可以登陆成功。通过经验与常识来推断,我们可以发现大多数常见的错误。4.2.4 因果图法若我们测试的功能点有多种条件组合输入,则可以通过图表来表示这些组合的关系,最终通过图解来设计测试用例。在本研究中,以登录模块为例,满足用户名与密码都正确,点击登录按钮则可以登录成功;其中若用户名或密码错误则出现提示;用户名与密码都正确但是没有点击登录按钮,登录失败等条件组合方式,通过这些条件组合方式来绘制出因果图,最终可以更加清晰地编写测试用例。4.2.5 场景设计法通过使用场景来对系统的功能点或业务流程进行描述。一般包括了基本流和备选流,其中基本流为测试系统的正常操作流程或业务流程,备选流为各种异常情况或可以达到正常流程的其他步骤,我们可以通过遍历所有的基本流和备选流来实现测试用例的设计。在本研究中,以登录模块为例,基本流为输入正确有效的用户名,输入正确的密码,点击登录。备选流为输入错误的用户名,输入正确的密码,点击登录;输入正确有效的用户名,输入错误的密码,点击登录;输入错误的用户名,输入正确的密码,点击登录;输入正确的用户名和密码,不点击登录;输入错误的用户名和密码,点击登录。我们这样可以通过遍历所有的基本流和备选流来实现测试用例的设计。4.2.6 豆瓣网自动化测试用例设计本研究的测试用例主要使用的等价类划分法、错误推断法、场景设计法,通过这些测试方法,尽可能将测试用例覆盖齐全。1.对豆瓣网使用密码登录的登录模块进行自动化测试用例设计,如图4-2所示。图 4 - 2 豆瓣网登录模块自动化测试用例2.登录豆瓣网,对豆瓣网的电影模块中的链接与搜索功能进行自动化测试用例设计,如图4-3所示图 4 - 3 豆瓣网电影模块自动化测试用例4.3 本章小结通过对豆瓣网的基础测试需求分析,在本研究课题中选取密码登录模块的登录功能和电影模块中的链接与搜索功能作为例子来设计自动化测试脚本,通过需求分析与用例设计,我们可以更加清晰地去设计自动化测试脚本,需求分析与用例设计也使我们的自动化测试脚本设计更加高效合理,能为我们减少很多不必要的错误,降低自动化脚本的开发成本。第5章 基于Selenium的自动化脚本设计5.1 测试脚本的设计根据豆瓣网登陆模块的操作手册,我们首先以最简单的自动化实现方式将登陆模块的自动化脚本进行编写,简单实现之后在使用po模型的思想和数据驱动,关键字模型来对脚本进行优化,设计公用的方法与模块,加强自动化脚本的健壮性,使编写的自动化脚本能够在其他的Web应用程序中只需修改小部分内容就可实现复用,降低自动化测试的成本。15.1.1 驱动的设置及浏览器和网页的打开对于Selenium自动化,我们要设置浏览器驱动,在本研究中使用Chrome浏览器来进行自动化设计,我们可以去图 5 - 1 打开浏览器与网页脚本5.1.2 定位元素Selenium中有八种定位元素的方法,我们可以在Chrome浏览器的Web页面中通过F12的功能来查询需要定位的位置的元素。根据实际情况我们可以通过id,name,xpath,class_name,链接的全部文字link_text,部分链接文字partial_link_text,标签名称tag_name,css_selector,这八种方式定位页面元素,从而通过Selenium编写自动化测试脚本。八种定位元素的代码如图5-2所示:图 5 - 2 定位元素脚本其中value填写在Chrome浏览器中使用F12功能查找到的需要定位的元素信息。15.1.3 操作frame层中的元素我们在进行自动化测试时,经常会遇到一个网页嵌套多层frame层,我们想要定位到位于frame层内的元素,需要进行跳转,将页面的焦点切换到frame层。我们需要在Chrome浏览器中点击F12,在Web页面找到<ifarme></iframe>,若要定位到位于ifarem标签中的页面元素,则需进行跳转,可以使用id,index,name和xpath来进行跳转,其中使用id,index,name来跳转时,可以直接使用语句:driver.switch_to.frame(id)、driver.switch_to.frame(index)和driver.switch_to.frame(name)如果使用xpath进行跳转,则需先定位到frame层的元素,然后在进行跳转,代码如图5-3所示:图 5 - 3 跳转frame层脚本5.1.4 弹窗处理JavaScript中有三种类型的弹窗Alert,confirm和prompt,为了自动化操作这三种类型的弹窗,我们需要编写不同的代码。对于Alert、Confirm和Prompt这三种类型的弹窗,我们均可以使用driver.switch_to.alert方法来获取alter对象。对于Alert、Confirm和Prompt这三种类型的弹窗,我们可以使用accept()方法来模拟鼠标点击确定按钮;对于Confirm和Prompt这两种类型的弹窗,我们可以使用dismiss()方法来模拟鼠标点击取消按钮;对于Prompt这一类型的弹窗,我们可以使用send_key()方法在prompt弹窗中的输入框中输入数据。1代码如图5-4所示:图 5 - 4 跳转弹出框脚本5.1.5 简单的登录自动化对于豆瓣网,我通过对其Web页面的分析,得知其登录功能模块位于frame层中,若要定位到登录模块的元素,需进行frame层的跳转;之后我们可以通过元素定位方法定位到登录模块的元素,之后再模拟输入和点击操作即可让我们通过简单的Selenium自动化脚本来实现豆瓣网登陆模块的自动化登录操作。代码如下图5-5和图5-6所示:图 5 - 5 基础自动化脚本1图 5 - 6 基本自动化脚本2我们通过图5-5和图5-6可知,这仅仅只是一个简单的自动化操作脚本,不能称之为自动化测试脚本,作为一个自动化测试脚本,我们需要使脚本能够运行多个case,判断case是否通过或失败,能够正常输出测试报告给我们直观的感受,最后还要能够进行将日志文件输出到其他文件以便我们在正常的环境中排查问题和进行集成处理,加强整体测试脚本的健壮性。我们以图5-5和图5-6的基础自动化操作脚本为基础,通过po模型的思想,使用unitest自动化测试框架和数据驱动,关键字模型。整体加强开发的脚本的复用性,做到即使要测试其他系统,仅需修改部分脚本即可重复运用已开发完成的脚本,降低自动化测试的成本,也保证了测试人员开发的自动化测试脚本不会出现只能使用在一个Web项目上,当更换其他的Web项目,我们也仅需修改部分自动化测试脚本即可实现代码的复用。这有助于提高测试人员的自信,这是对测试人员开发自动化测试脚本最好的认可。5.2 测试脚本的优化为了设计更加高效,可复用的自动化测试脚本,我们可以通过使用PO模型的思想对图5-5和图5-6这豆瓣网登录模块的基础脚本的优化55.2.1 元素定位操作与Web页面元素的数据分离当我们执行自动化测试时有超过100左右的case,那么像图5-5和图5-6的脚本设计就是不可取的,我们需要将其中的driver,元素定位,frame层跳转,点击和输入之类的操作都抽离出来一层一层的操作来完成整体自动化测试脚本的封装。抽离公共的类,这样可以使我们在Web页面发生变化时仍可以使用这些公共类,加强代码的复用性。在豆瓣网登陆模块的自动化测试设计中,我们可以将定位元素的功能抽离出来,封装为一个公共类,之后可以通过调用该公共类来实现定位元素的操作,进行这样的设计可以使我们编写的自动化测试脚本更加简洁,减少大量重复的代码,加强代码的执行效率。要将定位元素的操作封装然后调用,除了需要创建一个公共类findElement将元素定位操作封装在其中外,还需使用一个.ini文件将从Web页面查到的元素信息存放在该文件中,之后再封装一个.ini文件的读取类ReadIni将文件信息读取,最后在定位元素的类findElement中调用ReadIni类中的方法,读取.ini的配置文件,从而实现将定位元素的操作,Web页面的元素信息分离的操作。这样操作可以在页面信息发生变化时,我们仅需修改配置文件的信息即.ini文件的信息,不用去修改代码文件,这样可以使我们编写的自动化测试脚本适用性更高,而且保证了不会出现花费了大力气编写自动化测试脚本代码却只能使用一次的操作。在本研究中,存储豆瓣网登陆功能模块定位元素的配置文件为Local_element.ini,代码实现如图5-7所示图 5 - 7 存储定位元素信息的配置文件接下来我们需要读取.ini文件的方法类ReadIni,该方法类可以读取.ini文件中的数据,在本研究中我们以username=id>username这样的形式存储Web页面的元素数据,其中左侧的username是该配置文件中数据的命名,读取时我们获得的数据为id>username这样的数据,之后可以通过分割的方法获得所需元素数据。ReadIni类的代码如图5-8所示图 5 - 8 读取配置文件的方法最后我们可以在封装的定位元素类findElement中调用ReadIni类中的方法最终实现定位元素操作与Web页面元素的数据分离,findElement类中的代码如图5-9所示图 5 - 9 定位元素类findElement类中的get_element()方法可以通过判断调用的配置文件中的定位方法的关键字来调用不同的定位方法。5.2.2 操作层、业务层与元素读取层的分离当我们封装完定位元素操作类findElement后,我们对于一个网页页面的操作分为几个步骤,以本研究的豆瓣网登录功能模块为例,我们可以分为业务判断,页面操作,元素读取这三个部分。我们可以通过封装一个业务层,一个操作层和一个元素读取层来实现页面操作的分类,从而使整体自动化测试的脚本设计更加合理。在元素读取层LoginPage类中,我们可以在这里调用findElement类中的方法来获取元素信息,为操作层的操作提供元素信息,代码如图5-10所示:图 5 - 10 元素读取层在操作层LoginHandle类中,我们可以在这里调用元素读取层LoginPage类中的方法来获取元素,我们只需在此页面中编写操作的代码即可,如点击,输入,frame层跳转之类的操作。这对于我们编写自动化测试脚本时对于自己应该做的操作有了更加清晰的认知,有利于我们后续的自动化测试脚本开发,可以使我们整个自动化测试流程是如何操作和运行有更加清晰的条理。操作层LoginHandle类的实现代码如图5-11,图5-12所示:图 5 - 11 元素操作层1图 5 - 12 元素操作层2在业务层LoginBusiness类中,我们对在操作层实行的操作是否成功进行验证,如在本研究中的豆瓣网的登录功能模块的操作,我们通过对其输入的用户名和密码是否正确进行校验,如果输入的用户名错误或输入的密码错误,则校验Web页面是否出现提示信息“用户名或密码错误”。我在豆瓣网的登录功能的验证操作中,在业务层中login_username_error和login_password_error这两个方法校验了用户名和密码输入是否错误,如果错误则返回False,正确则返回True;login_function方法校验了用户名和密码输入正确时返回True,否则返回False;也校验了登录是否成功的操作,通过对登录模块文本的获取是否为空判断是否登录成功。相关实现代码如图5-13,图5-14所示:图 5 - 13 业务层1图 5 - 14 业务层25.2.3 测试用例的编写与执行最终我们更加PO模型的思想,将元素读取层LoginPage类,操作层LoginHandle类,业务层LoginBusiness类串联起来,在case层中设计测试用例并执行,在本研究中,我用登录功能用户名错误的用例,登录功能密码错误的用例,登录成功的用例来举例,通过调用业务层中LoginBusiness类中的方法,使用assert()方法进行断言判断用例是否执行通过,在case层的用例脚本代码如图5-15所示:图 5 - 15 测试用例层5.3 测试脚本健壮性加强我们可以通过使用Unittest测试框架和数据驱动,关键字模型这些方法来加强自动化测试脚本的健壮性。5.3.1 Unittest测试框架我们如果没有使用Unittest测试框架,那么当我们的case数量极多的时候,我们每一条case都需要在main方法中执行,这样对于用例的管理会极其复杂与麻烦。我们可以使用Unittest