由于前期三个月公司的项目一直在改需求阶段,一直是手动测试,现在项目雏形以及基本页面功能都确定下来,为了不让自己陷入天天测同一功能的无限循环中,故开始自动化测试的学习之路,也为自己以后的发展铺铺路。
一.自动化测试介绍
自动化测试使用情况:
- 软件需求变动不频繁
- 项目周期足够长
- 自动化测试脚本可重复使用
- 需要大量时间和人力(性能测试,配置测试,大数据量输入测试)
目的:主要用于回归测试:检验修复bug后确保好的功能没有被破坏,并不是为了找新bug。
下面从四个方面来说明:测试类型/流程/框架/工具
1.自动化测试类型:
API testing:webservice测试,接口测试,输入参数,看服务端数据是否正确
UNIT testing:单元测试,测试代码测试方法输入的参数与return返回值
GUI testing:自动化方式驱动浏览器实现手动模拟的方式,如下面的selenium自动化,用脚本驱动浏览器
performance testing:性能测试,产生大的并发,负载,多线程方式产生并发,节省成本。
2.自动化测试流程:
设计测试用例-设计测试脚本-运行测试脚本-获取测试结果-分析测试报告
分析case的可能性,计划评估,做测试用例,测试环境搭建(测试数据准备),自动化脚本书写,执行脚本,查看测试的脚本。
3,测试代码结构
配置:测试对象,测试环境,输入参数
src:类库,测试用例,测试脚本,
test Suites:用例分类
测试数据:如何更新!!
测试日志:对错误的记录,原因,现象,记录错误场景
测试结果:记录所有结果,错误和正确的都有
4.测试工具
传统的自动化测试更关注的产品UI层的自动化测试,而分层的自动化测试倡导产品的不同阶段(层次)都需要自动化测试,表示不同阶段所投入自动化测试的比例。
我们需要规范的来做单元测试同样需要相应的单元测试框架,如java的Junit、testNG,C#的NUnit ,python 的unittest、pytest 等,几乎所有的主流语言,都会有其对应的单元测试框架。
单元测试关注代码的实现逻辑,例如一个if 分支或一个for循环的实现;那么集成、接口测试关注的一是个函数、类(方法)所提供的接口是否可靠。例如,我定义一个add()函数用于计算两个参数的结果并返回,那么我需要调用add()并传参,并比较返回值是否两个参数相加。
当然,接口测试也可以是url的形式进行传递。例如,我们通过get方式向服务器发送请求,那么我们发送的内容做为URL的一部分传递到服务器端。但比如 Web service 技术对外提供的一个公共接口,需要通过soapUI 等工具对其进行测试。
UI层的自动化测试工具非常多,比较主流的是QTP,Robot Framework、watir、selenium 等。
首先要先确认你所测试的产品是桌面程序(C/S)还是web应用(B/S)。
桌面程序的工具有:QTP、 AutoRunner
web应用的工具有:QTP、AutoRunner、Robot Framework、watir、selenium
被测试有产品是C/S架构的,那么推荐QTP ,QTP在UI自动化测试领域占到了一半的试用率。所以,足以说明QTP在自动化领域强大,易用性等。学习主流的工具也可以使你获得更多的机会。市面上关于QTP的书籍也非常丰富。当然,要想学好QTP ,你必须要掌握VBS脚本语言。
被测产品是B/S 结构,那么推荐selenium ,为什么不是QTP 或其它工具?因为selenium 对B/S应用支持很好,更重要的一点,它支持多语言的开发,真正的试用selenium ,你所要掌握的不仅仅是一个工具而已,你还需要学习一门语言。
假如你决定试用selenium 了之后,你又面临了一个新的问题,选择一门语言。selenium 是支持java、python、ruby、php、C#、JavaScript 。
从语言易学性来讲,首选ruby ,python
从语言应用广度来讲,首选java、C#、php、
从语言相关测试技术成度(及 资料)来讲:ruby ,python ,java
二.selenium入门
首选你在开始selenium之前,需要花一到两个月时间去学一门语言,这里是根据没有语言基础的同学而定的。我推荐ruby ,python ,java 任意一门语言来进行学习。
当然,已经如果有很好的语言基础略过这个环节,或者你的丰富的java编程能力,那么学习python 可能只需要几天时间或更短。
学习selenium之前你必须要理解html、xml和xpath(用于定位测试的元素路径)基本概念。
1.seleniumIDE(录制并导出脚本,时ff的一个插件,所以只能在ff浏览器上运行)
selenium IDE
selenium IDE 是嵌入到Firefox浏览器中的一个插件,实现简单的浏览器操作的录制与回放功能。那么什么情况下用到它呢?
快速的创建bug重现脚本,在测试人员的测试过程中,发现了bug之后可以通过IDE将重现的步骤录制下来,以帮助开发人员更容易的重现bug。
IDE录制的脚本可以可以转换成多种语言,从而帮助我们快速的开发脚本。
安装准备:
(1)需要先安装firbug和firePath(主菜单/附加组件/搜索后直接安装即可):用于方便查找和定位元素
(2)安装selenium IDE(用ff搜索直接安装即可)
录制测试用例(关键字驱动):
主要为三项:
- command:分为三种类型:action(操作)/accessor(存储,检查)/assertion(断言,验证)
- target:定位元素。用id,name,xpath,链接文字,dom定位,css定位,隐式定位。
- value:字符串
导出:选中文件/export test case suite as (不支持C#和Python2)
2.selenium1 (selenium -RC):几乎支持所有浏览器,但是受js安全模型导致的限制,面向过程。
selenium服务器:对应 selenium-server-standalone-2.44.0.jar,捆绑了selenium core (js程序,一系列js函数,用于调用浏览器内置的js解释器,解释和执行selenese命令),并自动将其注入浏览器,
selenium客户端:对应selenium-java-2.44.0.jar(使用客户端库文件的api函数,执行api函数)
安装准备及使用:
1.安装eclipse,配置环境jdk
2.新建java项目和包,导入 selenium-java-2.44.0.jar(客户端包,junit包配置) 和 selenium-server-standalone-2.44.0.jar(服务器),(后续会有selenium-java-2.44.0-srcs.jar 即不用启动服务器,二代,selenium源码,js文件)
3.导入Selenium IDE的测试脚本(只能为java),特别注意:
selenium = new DefaultSelenium("localhost", 4444, "*iexplore", "http://dhw.lxhbysn.com/pages/E02/index.jsp");
(使用的浏览器为IE的可以打开,其他浏览器需要配置路径,如:"C:\Users\DELL\AppData\Local\Google\Chrome\Application\chromedriver.exe,路径为双反斜线)
4.启动selenium服务器,启动bat(自己手动生成bat文件:java -jar jar包路径)
5.运行测试脚本,即运行junit脚本,测试通过,出现 selenium Remote Control ,脚本开始自动执行。
也可以自己创建selenium脚本进行测试:
(1)创建测试实例(用哪个浏览器,起始的打开页面)
DefaultSelenium selenium = new DefaultSelenium("localhost", 4444, "*iexplore", "http://dhw.lxhbysn.com/pages/E02/index.jsp");
selenium.start();
浏览器导航操作总结:open、goback、refresh、windowsFocus、windowMaxinize、close
对页面元素的操作总结:type、typeKeys、click、clickAt、doubleClick、doubleClickAt、select、check、focus
获取页面元素:getTitle、getLocation、getValue、getText、isChecked、getSelectedIndex、getSelectedLabel、getSelectedValue、getSelectedOptions、getTable、getAttribute、isTextPresent、isElementPresent、isVisible、getXpathCount、
设置等待:waitForPageToLoad(timeout),setTimeout(只针对open),setSpeed(执行速度)
测试控制和调试类:captureEntirePageScreenShot(),highlight(抓取图片时只能用火狐,谷歌和IE代理浏览器)
js弹出框处理:isAlertPresent(是否弹出),getAlert(获取文本内容),chooseOkOnNextConfirmation,AnswerOnNextPrompt
selenium1采用的是js注入进行测试,无法处理js对话框(alert,confirmation,prompt),因为预处理,所以看不到,但是已经处理
浏览器多窗口处理:getAllwindowIds/names/titles(),waitForPopUp(windowID,timeout)/代替thread.sleep()等待窗口完成后,selectPopUp(windowId)/选择子窗口,selectWindow(windowID)/选择任意窗口,openWindow(url,windowID)/在弹出窗口打开新的url
结束测试:close 关浏览器,stop停止服务器会话,关控制界面,shutDownSeleniumServer关服务器。
3.selenium2(WebDriver):一套类库,不依赖任何测试框架(junit),无需启动服务器,通过原生浏览器支持或浏览器扩展直接支持浏览器,基于对象的测试
selenium2:绕过js限制,API更易用,只支持:ff,chrome,ie,opera,android,iphone
selenium1:支持更多的浏览器
安装准备和使用:
1.导入selenium-java-2.44.0-srcs.jar,以后运行脚本不用启动服务器
2.对火狐浏览器自带浏览器驱动,其他的浏览器需要下载并配置如下:
System.setProperty("webdriver.chrome.driver", "C:\Users\DELL\AppData\Local\Google\Chrome\Application\chromedriver.exe");
WebDriver driver = new ChromeDriver();
Navigation navigation = driver.navigate(); //设置导航实例
navigation.to("http://dhw.lxhbysn.com/pages/E02/login.jsp");
导航操作:to、back/forward、refresh
查找元素:WebElment a=driver.findElment.(By.id/name/linkText/ClassName/TagName/Xpath
对页面元素的操作:click(勾选操作也用这个),sendKeys,clear,submit
获取页面元素及其内容:getTitle,getCurrentUrl,getText,selected(勾选状态),getTagName,Enabled,Displayed,getAttribute,
弹出对话框的处理:点击后,driver.switchTo().alert().dismiss()/accept()都是点击后关闭,driver.switchTo().alert().sendKeys()填写内容,driver.switchTo().alert().getText()为得到对话框内容,
浏览器多窗口处理:windowHandles,window(转到某个窗口)
设置管理:cookie,超时时间和浏览器窗口
4.testNG(用于测试管理,生产测试报告)
下载插件(可到微盘上搜)解压后: 将features.rar解压后的文件件放入eclipse安装路径下的features中 org.testng...rar解压后的文件夹放入eclipse安装路径下的plugins文件夹中 重启eclipse即可,文件名太长,将压缩文件拷过去然后用7zip解压即可。
TestNG是一个测试框架,其灵感来自JUnit和NUnit的,但引入了一些新的功能,使其功能更强大,使用更方便。
TestNG是一个开源自动化测试框架;TestNG表示下一代。 TestNG是类似于JUnit(特别是JUnit 4),但它不是一个JUnit扩展。它的灵感来源于JUnit。它的目的是优于JUnit的,尤其是当测试集成的类。 TestNG的创造者是Cedric Beust(塞德里克·博伊斯特)
TestNG消除了大部分的旧框架的限制,使开发人员能够编写更加灵活和强大的测试。 因为它在很大程度上借鉴了Java注解(JDK5.0引入的)来定义的测试,它也可以告诉你如何使用这个新功能在真实的Java语言生产环境中。
TestNG的特点
-
注解
-
TestNG使用Java和面向对象的功能
-
支持综合类测试(例如,默认情况下,没有必要创建一个新的测试每个测试方法的类的实例)
-
独立的编译时间测试代码运行时配置/数据信息
-
灵活的运行时配置
-
主要介绍“测试组”。当编译测试,只要问TestNG运行所有的“前端”的测试,或“快”,“慢”,“数据库”等
-
支持依赖测试方法,并行测试,负载测试,局部故障
-
灵活的插件API
-
支持多线程测试
测试TestNG的设置
创建一个Java类文件名TestNGSimpleTest C: > TestNG_WORKSPACE
import org.testng.annotations.Test;
import static org.testng.Assert.assertEquals;
public class TestNGSimpleTest {
@Test
public void testAdd() {
String str = "TestNG is working fine";
assertEquals("TestNG is working fine", str);
}
}
TestNG的几种不同的方法可以被调用:
-
testng.xml 文件
-
ant
-
命令行
让我们调用使用testng.xml文件。创建一个XML文件名称testng.xml C: > TestNG_WORKSPACE 执行测试用例(s)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite1">
<test name="test1">
<classes>
<class name="TestNGSimpleTest"/>
</classes>
</test>
</suite>
检查结果
类编译使用javac编译如下:
=============================================== Suite1 Total tests run: 1, Failures: 0, Skips: 0 ===============================================