自动化测试
自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程。测试过程中所使用的测试用例很大程度上与此前的功能测试用例重复,为了更全面的覆盖软件功能,确保软件质量,验收测试的用例相对更丰富,执行的次数也更多。因此在验收测试的过程可以将重复性的测试工作自动化,从而提高测试的效率和质量。
分层思想
学习web自动化的思路
(第一层次)首先你得知道:什么是元素?怎么去定位一个页面元素?怎么去控制元素?怎么控制浏览器?学完这些你就可以写简单页面 的自动化功能测试了。
(第二层次):熟练的编写页面自动化脚本:碰到复杂的页面,比如嵌套很多,知道怎么去跳转。复杂元素,怎么去定位,各种页面元素的处理,比如表格、下拉框、弹出框等等。
(第三层次):熟练掌握上面技巧之后,开始学习怎么将页面元素与代码分离,学习数据驱动,以及怎么样结合Excel去做自动化测试。
(第三层次):学习持续集成的方法,怎么样将自动化测试更加“自动化”。同时,开始学习自动化测试框架,能够根据产品的实际情况来编 写合适的测试框架。
什么样的项目适合自动化测试
1.软件需求变动不频繁。测试脚本的稳定性决定了自动化测试的维护成本。如果软件需求变动过于频繁,测试人员需要根据变动的需求来更新测试用例以及相关的测试脚本,那么维护成本会很高。如果项目中的某些模块相对稳定,而某些模块需求变动性很大。便可对相对稳定的模块进行自动化测试
5.软件维护周期长。
6.项目进度压力不太大。当项目进度压的相当紧的时候,根本没有那么多的时间来搞自动化,因为其实这是个耗费时间的工作。所以测试人员在决定做自动化的时候往往需要首先分析确认哪些模块适合做自动化,这样才能更好的节约资源,合理利用有限资源。
7.被测软件系统开发比较规范,能够保证系统的可测试性。
selenium简介
selenium是web自动化测试工具集。
简单例子
考虑一个基本的登录功能的测试用例。
一、自动化测试 与 人工测试
在开始编写用例之前,我们先来思考下自动化测试和人工测试的区别。对于web页面的人工测试,我们想下,如果去测试,怎么操作呢?不外乎如下的基本动作:
1)打开浏览器
2)输入url (前提web服务器要正常启动运行着)
3)等待页面显示出来
4)测试人员用眼睛看页面显示的内容是否与自己想象的一致,如果一致,认为功能正常,否则,会认为程序有问题。
5)通过鼠标、键盘执行相关的操作,通过页面的变化和内容显示继续进行检查功能是否正常。
那么什么是自动化测试呢?其本质就是将人的操作过程(打开浏览器、输入url、鼠标点击、键盘输入等)以及验收标准转换为测试代码。有了测试代码,就可以让其自动运行了。
二、登录用例设计
一个登录功能,想象下如果是人工测试,那基本的测试过程一般如下:
1)打开浏览器、输入登录url
2)输入用户名、密码(也许还有别的输入项,如验证码,则取决于程序本身有哪些输入项),点击登录按钮
3)如果是正确的用户名密码,应该出来相应的页面;如果是错误的,应该出来错误页面或错误提示信息。
思考:我们是如何让去操作界面上的一些控件元素? 比如我们要在账号输入框输入账号。
定位器(参数里面包含locator参数的都需要用到定位器)
编写测试用例的时候需要告诉自动化测试脚本你要操作哪个界面元素。使用定位器去定位界面元素。selenium提供了很多的定位方法。(在学习定位之前应该了解更多的前端知识:HTML、CSS、Javascript)
定位元素的本质:要找到UI用户界面上需要操作的对象(往往都是控件,比如按钮、文本框),网页控件都有HTML相应的代码,利用代码中的信息来定位元素。
定位器类型:identifier定位(标识符定位);ID定位;Name定位;Xpath定位;DOM定位;LinkText定位;CSS定位
locator参数的基本写法:定位器类型(locator type)=位置信息(location)
identifier定位
如果等号前面不写定位器类型的时候,默认就是identifier定位,所以在书写的时候可以去掉定位器类型和等号,只写一个location。
identifier定位其实就是先用ID定位,再用Name定位(将等号后面的location和ID去匹配和Name去匹配)
通过ID来定位:identifier=location(实例:identifier=loginFrom ) 通过Name来定位:identifier=location(实例:identifier=password)
注意:id值具有唯一性,但是name值不具有唯一性,可能存在多个值相同的name。如果不做处理,定位时会默认定位到最先出现的那个。
ID定位
语法:id=location(实例:id=loginForm)
Name定位
语法:Name=location(实例:name=username;name=password;name=continue)
注意:上面说了如果不做处理,在name属性相同的情况下会默认定位到最先出现的那个,但是如果我们想要定位到自己想要的name嘞?
解决方法:可以在location后面增加过滤器来进一步确定位置。
增加过滤器实例:name=continue value=Clear
LinkText定位
linktext定位是定位link(链接)中的文本。
语法:link=文本(实例:link=sample页面;link=locator测试案例)
CSS定位
常用的五种方式
1.标记和ID选择器。
语法:css=tag#id (实例:css=form#loginform)
2.标记和类选择器。
语法:css=tag.class (实例:css=input.required)
3.标记和属性选择器。
语法:css=tag[attribute=value] (实例:css=input[name=“password”])
4.标记、类、属性选择器。
语法:css=tag.class[attribute=value] (实例:css=input.required[name="username"])
5.标记和内部文本选择器。
语法:css=tag:contains("inner text") (实例:css=p:contains("下面是表单:"))
解惑:css本身其实是选择器,由一些语法比如id选择器、class选择器,通过这些选择器来选择对html文档里面的标记来做样式的修饰。它的选择器和locator定位器是很接近的,我们的自动化测试里面是要对界面上的什么元素要做操作,而界面元素大多都是有样式的,都有css样式设置的,所以我们就借助了选择器来做定位器。选择器和定位器是非常接近的概念,所以它们在语法上就是借用过来的。
xpath定位
包括绝对路径和相对路径。尽量避免使用绝对路径,因为一旦在程序下一个版本里面对网页源代码做了一些调整的话,就会导致我们的自动化测试案例失效,健壮性很低。
实例:xpath=/html/body/form (绝对路径,单斜杠加根节点开头)
xpath=//form[input/@name='username']/input[1] (相对路径,双斜杠开头)
xpath=//form[1]/input[1] (相对路径)
xpath=//form[@id='loginForm']/input[1] (相对路径)
注意:双斜杠开头的xpath定位,可以把等号前面的定位类型去掉。
DOM定位
实例:dom=document.getElementById('loginForm')
dom=document.forms[0]
dom=document.forms['loginForm']
dom=document.forms['loginForm'].username
dom=document.forms['loginForm'].elements[0]
dom=document.forms['loginForm'].elements['username']
注意:由于dom定位的location都是以document开头的,和上面说的几种定位器都不一样,所以它的类型可以省略掉。
可以借助firefox浏览器的插件firebug来获取一些定位。
首先应该使用简单的定位器来实现定位。