Web自动化现状
据我观察,想学自动化的同仁都是冲着以下几点去学
1: 为了找工作学自动化 ,觉得这个高大上,面试时说了这个有加分项
2: 看到人家学,自已也想跟风
3: 在实际测试过程中重复操作太多,跳过重复测试项又担心测试不严,担心出现线上Bug
带着以下几个问题,我带大家来了解下自动化前世今生,如何一步步优化让自动化真正服务于企业
演变之一 Selenium IDE
首先大家刚入门肯定会听到过IDE 吧,对,我也是从IDE 录制入门,录完之后就能看到画面在动,选择文件导出之后就可以自动生成代码,觉得好兴奋,感觉一下子就可以成为会自动 化的测试人员了
在这顺便也将最入门的知识一普及下,如何使用IDE 工具
首先下载http://down.51cto.com/data/2041803 xpi 并解压缩,之后拖动文件到游览器
可以选择不同语言安装
重启浏览器
在菜单栏找 这个图标
将会弹出下视窗
之后在浏览器输入网址执行任意操作
执行之后切换到Selenium IDE 窗口
就能看到有部分控件id
点击运行之后浏览器会自动执行相关操作
选择文件导出之后可以自动生成自动化代码
IDE 在刚入门时部分控件定位方式不知怎么写时,可以试着录制一次,之后导出源代码,查test() 方法中的定位方式
还有另一种方法是在IDE 窗体中选中一行控件,之后点find 按键,系统会在浏览器对应元素上高亮一下,如可能高亮,代表定位方式是正确的,
另外IDE 窗体中Command 和Target 下拉菜单是可以选择的,
IDE 工具优缺点总结
优点: 入门简单,安装之后就可以使用,也能自动生成代码,对无代码功底同仁不失为一个很好的学习范例
缺点: 脚本录制之后只能执行一次完全相同的操作,即使是数据相同,操作完全相同也无法执行第二次
演变之二 手工编写硬代码(元素,数据,代码全集成在一起)
基于以上缺点我们将代码做一些优化,手动编写代码的方式,可以对关键操作之后增加断言,确认结果是否与预期相同
publicstaticvoid test() {
WebDriver driver=newFirefoxDriver();
driver.get("http://www.baidu.com/");
driver.findElement(By.id("kw")).sendKeys("迅银网");
driver.findElement(By.id("su")).click();
String text=driver.findElement(By.xpath("//h3/a[@target='_blank'][text()='-互联网金融综合服务平台']/em[text()='迅银']")).getText();
Assert.assertEquals("迅银",text);
System.out.println("验证PASS"+text);
}
类似于上面手工编写代码如果步骤比较多的话,相同代码会很多,比如点击操作,那一条操作会要写一次
driver.findElement(By.id("xxxxxx")).click()
由上面实例我们可以发现
优点:手工编写代码较IDE生成代码要灵活,可以断言,可以任意增加删除代码
缺点:相同操作代码要重复编写,而已每一行还很长
演变之三 (操作方法二次封装)
为解决上述问題我们可以尝试将相同操作二次封装,可以精简每一行代码量
这样简单的二次封装下代码量就减少了不少
我们还可以将不同的操作放在一个方法里,比如网站登录多个操作封装成一个方法
最终爆露给用户的就只要输入用户名,密码两个参数就可以完成网站打开,输入用户名,密码,点登录多个操作
Login(driver,”张三”,“123456”);
演变之四 (数据驱动)
上述操作解决了个简化了部分代码,但如果数据要变化,就需要重新编写代码,所以我们可以继续优化操作,将代码与数据分离,比如上面登录操作,我们可以将用户名和密码放到一个Excel 文件中,
在每次执行时去读Excel 相对应的数据
第一次执行login 方法时
Login(driver,”13764142840”,“QQQQQQ”);
第二次执行是:
Login(driver,”18721694074”,“QQQQQQ”);
类似于这样,相同测试步骤我们就只需要写一次用例,也就是网上所讲的数据驱动测试
数据驱动方式有好多种,既可以从Excel 中读取数据,也可以 从XML 中读取,还可以从代码数据提供者中读取
演变之五 (POM 页面对象管理)
到这里我们了解到了数据驱动测试,但还是有个问題,如果公司以这种方式来实施自动化,首先公司得配置大量专业级别的有开发功底的自动化工程师,因为测试系统任意元素变化,与之相关的测试元素定位全要修改
所以我们可以再上面数据与代码分离的基础上继续优化,测试元素与代码实现分离
使用一个专门的Excel 或TXT 文档来维护测试对象,如果元素有变化,只需要 在元素管理的文档中稍作更新,与之相关的代码仍可使用
也可以用一个类来管理对象属性,如下我用一个page 的类来管理 登录属性
后续要操作登录时就直接用page.username 引用那个属性,假如userrname 的属性变了,那我们只需要修改page 中的属性即可
这种方式管理对象属性网上有一个专用名称叫Page Object Model | POM
现在我们知道可以将数据与代码分开,代码与元素分离,但实际还是存在一个问題,
假如 测试元素,测试数据都存在,如何样将这些步骤组合起来成为一个完整的测试用例呢,是继续用代码的方式一行行累积,还是换一种方式来编写用例呢,
演变之六 (关键字驱动)
为此我们可以设想下是否可以测试方法转义,比如click 给起个别名叫点击操作
我编写用例时就不需要有太多英文的操作方法,同样每个对象属性我们也可以给个中文名称
元素管理Sheet
用例编写Sheet
像上面我们将所有对象全转换成中文,编写用例时只需要选择对应的中文名称,系统就会自动匹配到相关xpath 路径出来
(这种网上的叫法叫关键字驱动,就是编写自动化用例时不需要任何代码,全部用中文就可以实现编写完用例,这样公司也不需要自动化开发人员来编写代码,功能测试人员即可自主完成用例编写)
Excel 虽然看起来比较完美,但是可以存在文件易丢失,损坏,所以我们还可以继续优化,将元素,数据, 用例存放到服务器数据库中,执行时动态从数据为中读取数据
演变之七 (自动化管理平台)
也可以像这样,开发一个自动化管理平台,元素录入,用例管理,测试报告检索,全在平台上进行