关于Python 的 Web 自动化测试的实践
Web测试是软件测试中比较的一个分支,而要实现Web自动化测试则要求测试人员能熟练掌握自动化测试工具和编程语言。介绍免费开源的Web测试工具Selenium,以及流行的编程语言Python。根据自动化测试的原理,对网页元素的常用定位方式,如何对页面元素进行操作进行重点叙述。结合工作实际分析自动化测试的基本流程,即分析测试需求、编写测试用例、搭建测试环境、创建测试脚本、执行测试及测试结果分析。最后对自动化测试的实践进行总结和展望,为后续更好地开展测试工作奠定基础。
与手工测试类似,自动化测试也需要制定测试计划,根据软件需求规格说明书分析测试需求,使用黑盒、白盒等方法设计测试用例,在搭建好测试环境的基础上使用相关语言编写自动化脚本,执行测试并记录缺陷等。当然在执行自动化脚本之前也需要进行手工测试,为更好地发现缺陷奠定坚实的基础。
1自动化测试技术
1.1测试工具
根据被测软件的类型不同,可以选择不同的测试工具。例如针对桌面应用,主流的测试工具有UTF、AutoRunner等;如果测试的是Web系统,Selenium则是一种非常不错的选择。
Selenium是一款免费、开源的分布式的自动化测试工具,对商业用户也没有任何限制;支持多种平台,可以在Windows、Linux、Mac和Solaris等多种操作系统上运行;支持多种浏览器,包括IE、Firefox、Safari、Opera、Chrome等;使用方便,支持脚本录制,可以将测试用例分布到不同的测试机器上执行;支持多种语言,包括C、Java、Ruby、Python、C#等。
1.2Python语言
Python是一门优雅而健壮的编程语言,它继承了传统编译语言的强大性和通用性,同时也借鉴了简单脚本和解释语言的易用性。它的特点包括:代码简洁、短小,开源、跨平台,面向对象,可扩展性好等,因此它被应用于数据分析与处理、网络爬虫、Web应用开发、人工智能、自动化测试等多个领域。
在自动化测试领域既可以使用Python的标准库PyUnit作为自动化测试框架,也可以使用RobotFrame?work等自动化测试框架来开展工作,该框架具备良好的可扩展性,支持关键字驱动,可以同时测试多种类型的客户端或者接口,可以进行分布式测试执行。
2网页元素定位
自动化功能测试工具Selenium可以模仿人类对网页进行自动化的操作,那么要实现对网页元素的操作,就要能够精准地对网页元素进行定位。可以用于定位的常用的Web页面元素的属性有:id、name、classname、linktext、XPath和CSSSelector等。下面我们重点介绍常用的四种方法。
2.1通过id属性进行定位
如果Web页面中的id不是动态的,则一个页面的id是唯一的。该方法通过查找Web页面上的元素id值来获取元素,但是对于动态分配Web元素id的情况,这种方法不能使用。
不难发现其id属性是“kw”,因此可以使用id来进行元素定位。driver表示为创建的一个webdriver对象,代码为
element=driver.find_element_by_id("kw")
2.2通过linktext属性进行定位
访问网页的时候,我们可以通过超链接的方式链接到下层的网页或者其他网站,通过查找网页的linktext属性,模拟对链接文本的单击操作就可以实现自动地访问。该定位方法仅适用于文本链接的场景,通过元素标签对应的文本信息来定位元素,相对其他的元素定位方法,适用的场景比较有限。
例如百度首页上方“新闻”文字的linktext属性是“新闻”,可以使用该属性来进行元素定位。
代码为:
element=driver.find_element_by_link_text("新闻")
2.3通过XPath属性进行定位
XPath是英文XMLPathLanguage的简称,即XML文档路径的定位语言。XPath基于XML的树状结构进行信息的查找,它使用路径表达式定位XML文档中的节点或节点集。通过记录由根节点到该节点经过的所有节点的tagName等信息,可以形成唯一一条到达该节点的路径表达式。Selenium可以将这种强大的语言应用在Web页面元素的定位中,定位的方式通常有绝对路径和相对路径两种。具体如下:
(1)绝对路径
绝对路径表达式以“/”开头,它从树形结构的根节点开始,沿着树结构一直到目标节点结束。当元素层级很深的时候,绝对路径表达式会过长,阅读性不好,既影响查找的效率又很难进行维护,因此一般不建议使用。
(2)相对路径
相对路径表达式以“//”开头,它从某个节点开始,沿着树结构一直到目标节点结束。目前常用的浏览器谷歌、火狐等都提供了XPath的工具,可以方便地获取XPath路径。例如百度搜索框的XPath属性可以通过定位到该元素,在该元素的HTML代码使用快捷菜单“Copy->CopyXPath”获得,其属值为“//*[@id="kw"]”。“//”表示当前页面某个目录下;“*”是通配符,表示匹配任意的节点;“[@id="kw"]”表示匹配的这个元素的id属性值等于kw。
2.4通过CSS属性进行定位
层叠样式表CSS是英文CascadingStyleSheets的简称,是一种用来表现HTML或XML等文件样式的计算机语言,它也可以通过浏览器工具查询相关元素的CSS,从而进行元素定位。例如百度搜索框的CSS属性可以通过定位到该元素,在该元素的HTML代码使用快捷菜单“Copy->Copyselector”获得,其属性值为#kw。代码可以写成:
element=driver.find_element_by_css_selector("#kw")
3获取和处理用户操作
Selenium库中有一个WebDriver的API,它能使用Chrome、Firefox、IE等浏览器进行Web测试,模拟用户打开浏览器,在页面单击鼠标,鼠标在某个元素上悬停,进行键盘各项操作等。Selenium测试通过模拟用户在前端的键盘鼠标等操作,触发前端页面事件,解析网页文档获取相应结果验证。
3.1鼠标事件
鼠标操作除了我们比较熟悉的单击操作外,还包括右击、双击、悬停和拖动等。在WebDriver中,将这些关于鼠标操作的方法封装在ActionChains类提供。例如,鼠标悬停的代码为:
#引入ActionChains类fromselenium.webdriver.common.action_chainsimportAction?Chains#定位元素并悬停above=driver.find_element_by_link_text("文库")ActionChains(driver).move_to_element(above).perform()
3.2键盘操作
所有键盘中操作的方法由Keys类提供,它既可以模拟键盘的输入,也可以模拟键盘按键,包括组合键(例如Ctrl+N)。模拟百度搜索框中输入搜索关键字
“Python”的代码为:
#引入Keys类fromselenium.webdriver.common.keysimportKeys#模拟输入框输入内容driver.find_element_by_id("kw").send_keys("Python")
3.3元素等待
由于自动化测试的操作速度比人工快许多,加上目前网页中普遍使用AJAX技术,页面元素可能不是同时被加载,就需要设置合适的等待时间,确保元素正确地被识别。WebDriver中有两种类型的等待:显式等待和隐式等待。
3.4多窗口切换
如果在操作过程中单击某个链接弹出新窗口后,就需要使用switch_to.window()方法进行切换,从而确保后续的相关操作能顺利进行。
3.5警告框处理
WebDriver还可以处理由JavaScript生成的弹框,方法是使用switch_to_alert()定位到警告框,然后使用相关方法来进行操作,使用的方法包括:
●text:返回警告框中的文字信息
●accept:接受当前警告框
●dismiss:解散当前警告框
●send_keys(KeysToSend):发送文本至当前警告框
4自动化测试的实践
自动化测试的过程大致可以分为:分析测试需求、编写测试用例、搭建测试环境、创建测试脚本、执行测试及测试结果分析等。
4.1分析测试需求
不论是手工测试还是自动化测试,测试需求都是测试工作开展的首要前提,根据需求确定被测软件的哪些模块适合开展自动化功能测试。
4.2编写测试用例
自动化测试是在手工测试的基础上进行的,分析各模块的功能特点,根据已有的功能测试用例抽取自动化测试用例,并进行补充和完善,尽量细化到具体的页面和对象。
4.3搭建测试环境
搭建自动化测试环境首先要下载并安装Python,并且安装包管理工具pip;接着需要下载并安装Python的Selenium包,并且验证安装是否成功;最后需要下载浏览器的驱动,并放置在Python安装目录的根目录下。需要特别注意的是:浏览器、Selenium版本以及浏览器驱动的匹配,否则浏览器将无法正常启动。下面在Python自带的IDLE环境中,以启动谷歌浏览器为例来验证环境是否搭建成功。代码如下:
fromseleniumimportwebdriver#导入webdriver模块driver=webdriver.Chrome()driver.get("https://www.baidu.com")
执行程序后,如果可以自动启动谷歌浏览器并访问“百度”首页,就表示环境搭建成功
4.4创建测试脚本
对于较大的系统测试,可以通过对Selenium进行二次封装搭建测试框架,提高对页面元素的可视化程度,从而提高测试脚本的编写效率。测试框架应该是由待测系统功能抽离出的共用部分来构建而成的,不能依赖于具体的应用系统,即测试框架与待测系统尽量是低耦合的,这样可以使测试框架具有较高的可复用性。为了减少脚本的冗余,降低脚本的维护成本,可以将测试程序中一致的、共同的脚本提取出来,作为类和接口供其他脚本进行调用。
自动化测试脚本主要围绕业务流程展开,即由页面元素、业务逻辑、测试数据等组成,测试数据既可以存放在Excel表中,也可以存放在MySQL等数据库中。下面以某论坛系统的注册功能为例,代码如下:
fromseleniumimportwebdriverimporttimedriver=webdriver.Chrome()driver.get("http://172.21.1.7:8081/bbs/")driver.find_element_by_link_text("register").click();#跳转至注册页面time.sleep(2)#停顿2秒driver.find_element_by_name("userName").send_keys("wull")#输入用户名driver.find_element_by_name("password").send_keys("wull123")#输入密码driver.find_element_by_name("passconfirm").send_keys("wull123")#输入确认密码driver.find_element_by_xpath("//select[@name='sex']").send_keys("female")#输入性别#输入电话driver.find_element_by_xpath("//input[@name='phone']").send_keys("13812345678")#输入电邮driver.find_element_by_xpath("//input[@name='email']").send_keys("12345678@qq.com")driver.find_element_by_id("submit").click()#提交注册信息driver.switch_to_alert().accept()
4.5执行测试及测试结果分析
测试脚本是以.py为后缀的文件,如果需要执行之后生成测试报告,需要安装并调用Unittest的第三方库HTMLTestRunner,运行代码后生成的测试报告是HT?ML格式的,可以根据测试报告对测试的结果进行分析。
5结语
基于Selenium+Python的自动化测试应用可以减少人工多次的验证活动,降低测试的成本,从而较大幅度地提高软件测试的效率,保证软件产品的质量。后期可以进一步优化自动化测试框架,提高控件可视化识别的效率,加快元素定位的效率,并且加强测试用例的管理。
以上内容为大家介绍了关于Python的Web自动化测试的实践,希望对大家有所帮助,如果想要了解更多Python相关知识,请关注IT培训机构:千锋教育。
猜你喜欢LIKE
相关推荐HOT
更多>>python中的filter函数功能是什么?
python中的filter函数功能是什么?在python中,面对众多的数据,我们要过滤筛选出我们需要的数据。python中的filter函数就是起到了过滤筛选的作...详情>>
2023-11-10 20:37:27pythontime模块是什么
pythontime模块是什么在python中使用时间,就免不了和time模块打交道,另外两个模块这个暂时先不做介绍。做time模块的使用上,我们可以用它来对...详情>>
2023-11-10 15:53:16python是什么编程语言
python是什么编程语言1、说明是一种面向对象、解释型计算机程序设计语言,由GuidovanRossum于1989年底发明,第一个公开发行版发行于1991年。Pyt...详情>>
2023-11-10 15:21:05python异常处理的两种技巧
python异常处理的两种技巧1、传递异常有时我们会在捕捉到一个异常后重新引发它(传递异常),实现起来很简单,使用不带参数的raise语句即可。deff...详情>>
2023-11-10 14:49:39热门推荐
python中的filter函数功能是什么?
沸python delattr函数如何使用?
热python中pdb模块怎么用?
热Python如何截图保存?
新python中缺少module怎么办?
python strftime和strptime的不同分析
python time.strptime的格式化
python中@contextmanager是什么?
python对象的三要素是什么
pythonGIL在Python多线程的应用
python如何对多个CSV文件进行读取
pythonif嵌套命令如何理解?
python对列表进行永久性或临时排序的方法
python生成器调用方法引发异常