测试环境:Java+Selenium+TestNG,Jenkins持续集成。css
采用页面对象模型(Page Object),减小UI修改后,对代码的影响。html
Java编写,采用TestNG测试框架。java
先说点概念的:linux
Selenium
Selenium是一套完整的Web应用程序测试系统,它包含了测试的录制(Selenium IDE)、编写及运行(Selenium Remote Control)和测试的并行处理(Selenium Grid)。Selenium的核心Selenium Core基于JsUnit,彻底由JavaScript编写,所以可运行于任何支持JavaScript的浏览器上。
Selenium Core:Selenium的核心部分,它由一些纯js代码组成, 能够运行在windows/linux的不一样browser上,而IDE是在core的基础上的一种应用, 经过UI实现相似QTP/Winner的脚本录制回放功能,它是Selenium IDE 和 Selenium RC 的引擎。
Selenium IDE: FireFox 的一个插件,支持脚本录制。
Selenium RC: Selenium Remote Control,是客户端利用各类编程语言,经过网络向Selenium Server发送指令,Selenium Server接收到测试指令后,启动浏览器并向其发出JavaScript调用实现对Html页面的全面追踪,并经过网络把执行结果返回给调用者。
Selenium WD: Selenium WebDriver。Web驱动。
Selenium Grid:容许同时并行地、在不一样的环境上运行多个测试任务,极大地加快 Web 应用的功能测试。 (没有用过,不太了解)sql
TestNG
TestNG是一个测试框架,使用@Test控制测试的执行,执行后,自动输出测试报告。数据库
根据我的电脑系统类型选择对应的jdk安装包下载(jdk-8u5-windows-x64.exe或jdk-7u45-windows-i586.exe)下载完成以后,打开软件进行安装。apache
配置环境变量编程
系统环境变量JAVA_HOME:d:\Java\jdk1.8.0_05(写本身安装的jdk地址)小程序
系统环境变量Path:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;windows
系统变量CLASSPATH:;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
配置完成以后,在doc下输入javac,若是出现用法:javac。。,证实配置好了
Jdbc用于java读取sql server数据库。
数据库安装就很少说了,我本地64位计算机,jdk1.8,Sql Server 2008R2。
eclipse-standard-kepler-SR1-win32-x86_64
TestNG
TestNG框架相关:
bsh-2.0b4.jar,jcommander.jar,snakeyaml.jar这三个包。
在org.testng.eclipse_6.9.9.201510270734中lib中,我把整个文件夹(rg.testng.eclipse_6.9.9.20151027073)放在了eclipse所在的目录:\eclipse\features\org.testng.eclipse_6.9.9.201510270734\lib ,以后在引入这三个包。
Selenium
selenium-server-standalone-2.48.2.jar
Jxl.jar
用于读取excel表格
浏览器使用火狐浏览器39.0.3,虽然版本比较低,可是与selenium版本兼容,须要安装组件:firepath
经过页面元素的固定属性,来肯定元素。能够经过id,name,className,tagName,cssSelector,linkText,partialLinkText等属性来定位,不太好定位的元素,可使用xpath方式。
driver.findElement( By.id("Text1"))
driver.findElement( By.name("输入"))
driver.findElement( By.xpath("html/body/div[1]/p[1]/label/input"))
driver.findElement( By.linkText ("这是一个连接"))
,须要完整匹配文字
driver.findElement( By. partialLinkText ("连接"))
,不须要完整匹配文字
定位多个元素,返回一个list,List elements,经过elements.get(index).click();进行遍历操做,index从0开始。
注意:若是属性中有空格,就只能使用xpath方法肯定元素。
1.文本框赋值
sendKeys("你好!")
2.清空文本框
clear()
3.获取文本框中内容
getAttribute("value")
4.点击
.click()
5.下拉框
Select select = new Select(driver.findElement(By.xpath("//*[@id='select_k1']")));
//经过可见文本去选择 select.selectByVisibleText("哈尔滨"); //经过html中的value值去选择 select.selectByValue("heb"); //经过index(索引从 0 开始) 选择 select.selectByIndex(2);
获取下拉框已选值
使用getFirstSelectedOption()得到所选的项,再经过getText()得到值:
select. getFirstSelectedOption().getText()
6.复选框
7.单选按钮
//选中
click();
//判断单选框是否被选中,返回布尔值
isSelected();
8.页面弹框处理(alert)
//声明对话框变量 Alert alert = driver.switchTo().alert(); //获取弹框中的文字 alert.getText() //点击弹框中的肯定 alert.accept();
9.表单(Form)
Form 中的元素的操做和其它的元素操做同样,对元素操做完成后对表单的提交:
WebElement approve = driver.findElement(By.id("approve")); approve.submit(); //只适合于表单的提交,例如百度搜索框输入关键字后按回车键进行搜索
10.上传文件
//定位上传控件 WebElement upload = driver.findElement(By.id("替换成实际的定位的值")); //定义了一个本地文件的路径 String filePath = "d:\text.txt"; //为上传控件进行赋值操做,将须要上传的文件的路径赋给控件 upload.sendKeys(filePath);
11.拖拉
//定义第一个元素 WebElement element1 =driver.findElement(By.XX)); //定义第二个元素 WebElement element2= driver.findElement(By.XX)); //将第一个元素拖拽到第二个元素 (new Actions(driver)).dragAndDrop(element1, element2).perform();
12.鼠标悬停
Actions action = new Actions(driver); action.moveToElement(driver.findElement(By.XX)).perform();
13.滚动页面至某元素出现
JavascriptExecutor js = (JavascriptExecutor) driver; js.executeScript("arguments[0].scrollIntoView(true);", driver.findElement(By.XX));
使用TestNG中的@Test执行用例。
@Beforeclass 在执行类以前执行, @Afterclass在执行类以后执行
TestNG自带的结果,html类型。
1.配置:
下载
三个包:guice-3.0.jar,reportng-1.1.4.jar,velocity-dep-1.4.jar,导入到项目中;
配置监听
Windows->preference-TestNG,配置以下图:
关闭默认监听,改成:org.uncommons.reportng.HTMLReporter
配置xml文件
新增:
<listener class-name="org.uncommons.reportng.HTMLReporter" />
注明:我放在了前面
2.二次开发
反编译工具:jd-gui.exe(打开导入文件便可)或jad.exe和net.sf.jadclipse_3.3.0.jar
2.1 配置:
下载jad.exe和jadclipse(须要下载支持eclipse版本的,个人eclipse是4.3.0)。
将jad.exe放在java目录下:E:\Program Files\Java\jdk1.8.0_05\jre\bin;
下载地址:http://download.csdn.net/detail/shilinjie_8952/9674940
将net.sf.jadclipse_3.3.0.jar拷贝到:XX\eclipse\plugins下面,重启eclipse
打开以后,选择Eclipse->Window->Preferences->Java,设置以下图:
配置打开.class默认方式:
.class和.class without source都要修改成默认值是JadClipse
注意:若是修改完成后,打开的.class文件全是注释,说明Jad的路径不正确。
有时这个反编译的很差用,能够配合jd-gui.exe或者其余反编译软件一块儿查看源码。
2.2 修改源码
思路:新建一个工程,导入须要的包,按照ReportNG建立目录和java文件,确定会有些错误,修改一(由于是反编译的,因此会有些问题)能编译经过就能够,(个人是最笨的,一个一个建立的java文件,应该有更好的办法)。按照需求修改源码,右键工程,就能够导出jar了。
两种方法均可以对元素进行管理:
用例管理
用例采用excel进行管理,用sheet区分不一样功能,储存相关须要验证的字段,固定列:第一列(编号),倒数第二列(预期结果),最后一列(错误类型),三列固定的值,用于在代码中使用。
采用Jenkins+Ant+Svn实现。
Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工做,功能包括:持续的软件版本发布/测试项目、监控外部调用执行的工做。
Ant:形象来讲,你要把代码从某个地方拿来,编译,再拷贝到某个地方去等等操做,这里用来:从svn上签出到某个文件夹下—>编译—>执行用例
下载下来的是一个msi文件,直接点击安装,默认安装,时间挺长的,并且好多插件装不上,不要紧,用到再哪一个装哪一个。
装完以后,访问:http://127.0.0.1:8080/ ,须要登陆,登陆名:admin,admin的密码保存在安装目录Jenkins\secrets\initialAdminPassword文件中。
插件安装
Ant Plugin:执行build.xml 文件
SVN Publisher plugin:经过SVN签出源码
HTML Publisher Plugin:将测试结果显示在Jenkins中
Email Extension Plugin:发邮件使用
系统配置
系统管理—Global Tool Configuration,配置jdk和ant
注意:登陆就去有时会报错,错误大概就是插件没有安装好,去系统设置里面,找一下报错的插件,装上就行了。步骤以下:
找到插件,勾选,点击下面直接安装:
安装过程当中可能会出现下载插件失败的状况,能够根据失败提示中的下载地址,下载到本地,选择“高级”上传下载的插件,就会自动安装了:
节点配置:
有时候没有选项:Launch slave agents using Java Web Star
解决:系统管理-Configure Global Security-随机选取勾上 tcp port for JNLP agents,原来是禁用的
环境变量:
ant_home:E:\ant\apache-ant-1.9.7-bin\apache-ant-1.9.7,bin目录所在路径
Path: %ANT_HOME%\bin ant.bat所在路径
在doc下,测试:ant.bat,出现下图配置成功:
1.建立节点
点击ok
进入配置节点:
建立好以后,以下图:
启动节点:点击“Launch”,下载,以后,双击下载到的slave-agent.jnlp文件,或在doc下执行红框中的那一串(我用命令启动提示Unable to access jarfile slave.jar),均可以启动,启动好以下图:
2.建立任务
点击“建立一个新任务”,填写任务名称,选择自由风格,以下图:
设置源码管理:添加svn源码路径,设置svn的用户名密码
构建触发器:设置什么时候什么频率进行构建
我设置的是:天天17点28分构建,28 17 * * *说明:
第一个参数表明的是分钟 minute,取值 0~59;
第二个参数表明的是小时 hour,取值 0~23;
第三个参数表明的是天 day,取值 1~31;
第四个参数表明的是月 month,取值 1~12;
最后一个参数表明的是星期 week,取值 0~7,0 和 7 都是表示星期天。
因此 28 17 * * * 表示的就是天天的17点28构建一次。
构建:选择Execute Windows batch command,填写ant
或者选择Invoke Ant:
构建后,须要显示一下测试报告,采用publish html report方式,实际上就是读取一个html文件,显示在jenkins里面的Html Report中
若是须要发送邮件,也能够添加一个构建后操做:
须要填写收件人地址,邮件内容选择了html;Attach Build Log,选择Attach Build Log(发送日志附件);trigger触发发邮件,选择老是发邮件。
须要参考下面:5.配置发送邮件 将发邮件配置好
Defult content内容
<body> <table border="1" cellspacing="0" cellpadding="5"> <tr height=30 bgcolor="#aaa"> <td align="center" >名称</td> <td align="center" >值</td> </tr> <tr height=30 bgcolor="#d5d5d5"> <td align="left" >项目名称</td> <td align="left" >$PROJECT_NAME</td> </tr> <tr height=30 bgcolor="#d5d5d5"> <td align="left">执行编号</td> <td align="left" >$BUILD_NUMBER</td> </tr> <tr height=30 bgcolor="#d5d5d5"> <td align="left" >构建状态</td> <td align="left" >$BUILD_STATUS</td> </tr> <tr height=30 bgcolor="#d5d5d5"> <td align="left" >触发缘由</td> <td align="left" >${CAUSE}</td> </tr> <tr height=30 bgcolor="#d5d5d5"> <td align="left" >日志地址</td> <td align="left" ><a href="${BUILD_URL}console">${BUILD_URL}console</a></td> </tr> <tr height=30 bgcolor="#d5d5d5"> <td align="left" >构建地址</td> <td align="left" ><a href="$BUILD_URL">$BUILD_URL</a></td> </tr> <tr height=30 bgcolor="#d5d5d5"> <td height=30 bgcolor="#d5d5d5" colspan="2" > ${JELLY_SCRIPT,template="html"} </td> </tr> </table>
到此,任务就建立好了。
构建的过程是:先利用svn签出源码,而后根据构建中的ant命令或Invoke Ant方式执行构建,实际上就是在源码文件夹中寻找build.xml文件,并执行,接下来须要说明一下被执行的build.xml文件如何配置。
3.配置build.xml文件
这个配置很重要,决定了可否执行测试用例
4.构建
能够按照构建触发器中的设置进行构建,也能够马上构建查看各项是否设置正确:
构建过程当中查看控制台,能够查看到过程:
执行完用例以后,经过HTML Report查看结果
5.配置发送邮件
系统设置:Jenkins Location 设置系统管理员地址
系统设置:Extended E-mail Notification设置
我用的是qq邮箱,密码是16位受权码,须要勾选ssl,否则服务器报错
系统设置:邮件通知
要与系统管理员邮箱设置一致,密码16位受权码
1.问题:构建过程当中,不显示浏览器
解决方法:不使用系统级服务,而是手动启动Jenkins。
个人电脑->管理->服务和应用程序->服务,将jenkins服务禁用,而且禁止启动,自行用命令启用
java -Dhudson.model.DirectoryBrowserSupport.CSP= -jar "E:\Program Files (x86)\Jenkins\jenkins.war"
最好写成bat文件,内容:
echo "Jenkins CI automation testting"
java -Dhudson.model.DirectoryBrowserSupport.CSP= -jar "E:\Program Files (x86)\Jenkins\jenkins.war"
pause
每次启动经过bat文件启动
2.问题:构建报错:编码GBK的不可映射字符
解决方法:在build.xml中,javac下,增长,build.xml中有注释。
3.问题:报告显示不正确,index中没有值
解决方法:在启动时,用:java -Dhudson.model.DirectoryBrowserSupport.CSP= -jar "E:\Program Files (x86)\Jenkins\jenkins.war"启动。
转载自《https://testerhome.com/topics/6495》 -- 站在巨人的肩膀上