zoukankan      html  css  js  c++  java
  • Selenium+TestNG+Java+ReportNG+Jenkins

    原文链接:https://www.cnblogs.com/SH-xuliang/p/6733285.html

    测试环境:Java+Selenium+TestNG,Jenkins持续集成。

    测试代码

    代码结构

    采用页面对象模型(Page Object),减少UI修改后,对代码的影响。

     

    Java编写,采用TestNG测试框架。

    先说点概念的:

    • 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 应用的功能测试。 (没有用过,不太了解)

    • TestNG

      TestNG是一个测试框架,使用@Test控制测试的执行,执行后,自动输出测试报告。

    环境搭建

    Java运行环境

    根据个人电脑系统类型选择对应的jdk安装包下载(jdk-8u5-windows-x64.exe或jdk-7u45-windows-i586.exe)下载完成之后,打开软件进行安装。

    • 配置环境变量

      系统环境变量JAVA_HOME:d:Javajdk1.8.0_05(写自己安装的jdk地址)

      系统环境变量Path:%JAVA_HOME%in;%JAVA_HOME%jrein;

      系统变量CLASSPATH:;%JAVA_HOME%libdt.jar;%JAVA_HOME%lib ools.jar;

    配置完成之后,在doc下输入javac,如果出现用法:javac。。,证明配置好了

    JDBC配置

    Jdbc用于java读取sql server数据库。

    数据库安装就不多说了,我本地64位计算机,jdk1.8,Sql Server 2008R2。

    1. 下载Microsoft JDBC Driver 6.0 (sqljdbc_6.0.7728.100_chs.tar.gz) 官网地址:http://www.microsoft.com/zh-cn/download/details.aspx?id=11774 我只留下了sqljdbc4.jar
    2. 配置环境变量CLASSPATH
      新增:C:sqljdbc4;( 我放在了C盘根目录下)
    3. 复制包到相关目录下
      sqljdbc4.jar文件拷到
      E:Program FilesJavajdk1.8.0_05jrelibext
      E:Program FilesJavajre8libext
      目录下,分别拷贝一份(看你的安装目录了)

    Java开发工具

    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所在的目录:eclipsefeaturesorg.testng.eclipse_6.9.9.201510270734lib ,之后在引入这三个包。

    • Selenium
      selenium-server-standalone-2.48.2.jar

    • Jxl.jar
      用于读取excel表格

    浏览器

    浏览器使用火狐浏览器39.0.3,虽然版本比较低,但是与selenium版本兼容,需要安装组件:firepath

    页面元素

    定位

    通过页面元素的固定属性,来确定元素。可以通过id,name,className,tagName,cssSelector,linkText,partialLinkText等属性来定位,不太好定位的元素,可以使用xpath方式。

    • 1. 通过id定位

    driver.findElement( By.id("Text1"))

    • 2. 通过name定位

    driver.findElement( By.name("输入"))

    • 3. 通过xpath定位

    driver.findElement( By.xpath("html/body/div[1]/p[1]/label/input"))

    • 4. 通过linkText定位链接

    driver.findElement( By.linkText ("这是一个链接")),需要完整匹配文字

    • 5. 通过partialLinkText定位链接

    driver.findElement( By. partialLinkText ("链接")),不需要完整匹配文字

    • 6. findElements()

    定位多个元素,返回一个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:	ext.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

    TestNG自带的结果,html类型。

    ReportNG

    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 FilesJavajdk1.8.0_05jrein;
    下载地址:http://download.csdn.net/detail/shilinjie_8952/9674940
    将net.sf.jadclipse_3.3.0.jar拷贝到:XXeclipseplugins下面,重启eclipse
    打开之后,选择Eclipse->Window->Preferences->Java,设置如下图:

     

    配置打开.class默认方式:

    .class和.class without source都要修改为默认值是JadClipse

     


    注意:如果修改完成后,打开的.class文件全是注释,说明Jad的路径不正确。
    有时这个反编译的不好用,可以配合jd-gui.exe或者其他反编译软件一起查看源码。

    2.2 修改源码

    思路:新建一个工程,导入需要的包,按照ReportNG创建目录和java文件,肯定会有些错误,修改一(因为是反编译的,所以会有些问题)能编译通过就可以,(我的是最笨的,一个一个创建的java文件,应该有更好的办法)。按照需求修改源码,右键工程,就可以导出jar了。

    元素管理

    两种方法都可以对元素进行管理:

    1. Excel文件存储元素
      可以将元素统一存储在excel中,在执行用例之前,统一读取到数组中,包括:编号,名称,查找方法,值,描述。
     
    1. 数据库存储元素
      可以将元素通过工具直接插入到数据库中保存,在执行用例之前,统一读取到数组中,包括:编号,名称,查找方法,值,描述等字段。描述在这里(自己写的C#小程序)
     

    用例管理
    用例采用excel进行管理,用sheet区分不同功能,储存相关需要验证的字段,固定列:第一列(编号),倒数第二列(预期结果),最后一列(错误类型),三列固定的值,用于在代码中使用。

     

    持续集成

    采用Jenkins+Ant+Svn实现。

    Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括:持续的软件版本发布/测试项目、监控外部调用执行的工作。

    Ant:形象来说,你要把代码从某个地方拿来,编译,再拷贝到某个地方去等等操作,这里用来:从svn上签出到某个文件夹下—>编译—>执行用例

    Jenkins配置

    1. 安装jdk
      步骤参考本文环境搭建-Java运行环境。
    2. 下载Jenkins
      通过官网下载:https://jenkins.io/index.html
       

    下载下来的是一个msi文件,直接点击安装,默认安装,时间挺长的,而且好多插件装不上,没关系,用到再哪个装哪个。

    装完之后,访问:http://127.0.0.1:8080/ ,需要登录,登录名:admin,admin的密码保存在安装目录JenkinssecretsinitialAdminPassword文件中。

    1. 插件安装

      Ant Plugin:执行build.xml 文件

      SVN Publisher plugin:通过SVN签出源码

      HTML Publisher Plugin:将测试结果显示在Jenkins中

      Email Extension Plugin:发邮件使用

    2. 系统配置
      系统管理—Global Tool Configuration,配置jdk和ant

       

    注意:登录就去有时会报错,错误大概就是插件没有安装好,去系统设置里面,找一下报错的插件,装上就好了。步骤如下:

     

    找到插件,勾选,点击下面直接安装:

     

    安装过程中可能会出现下载插件失败的情况,可以根据失败提示中的下载地址,下载到本地,选择“高级”上传下载的插件,就会自动安装了:

     

    节点配置:
    有时候没有选项:Launch slave agents using Java Web Star

    解决:系统管理-Configure Global Security-随机选取勾上 tcp port for JNLP agents,原来是禁用的

     

    Ant配置

    1. Jdk安装 参考本文环境搭建-Java运行环境
    2. Ant 下载:http://ant.apache.org/srcdownload.cgihttp://download.csdn.net/detail/shilinjie_8952/9689638下载。
     

    环境变量:

    ant_home:E:antapache-ant-1.9.7-binapache-ant-1.9.7,bin目录所在路径

    Path: %ANT_HOME%in ant.bat所在路径

    在doc下,测试:ant.bat,出现下图配置成功:

     

    Jenkins使用

    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查看结果

  • 相关阅读:
    UOJ #455 [UER #8]雪灾与外卖 (贪心、模拟费用流)
    Codeforces 482E ELCA (LCT)
    Codeforces 798D Mike and distribution (构造)
    AtCoder AGC017C Snuke and Spells
    HDU 6089 Rikka with Terrorist (线段树)
    HDU 6136 Death Podracing (堆)
    AtCoder AGC032D Rotation Sort (DP)
    jenkins+python+kubectl实现批量更新k8s镜像
    Linux 下载最新kubectl版本的命令:
    jenkins X 和k8s CI/CD
  • 原文地址:https://www.cnblogs.com/yimai-series/p/13490291.html
Copyright © 2011-2022 走看看