Dagger学习之一步一步搭建简单的自动化测试平台(Selenium+TestNG+Ant+Jenkins)

来源:互联网 发布:表情包文化 知乎 编辑:程序博客网 时间:2024/04/29 12:43

       Dagger(中文含义为“匕首”)是基于Selenium2和TestNG的一个轻量级开源框架,主要对各种web操作进行了封装,并使用TestNG作为测试框架。为实现web端的UI自动化,本文将整理基于Dagger框架的自动化测试平台搭建过程。

      本文Dagger方面的内容,主要参考了陈侃同学的代码和文档,其他内容参考了一些技术博客,接下来会在文中标明。在此感谢各位大神们的分享~

      学习web端UI自动化的初衷,是希望改变手动执行web端的测试用例的现状。特别在产品版本趋于稳定时,后期迭代中需要进行大量的回归测试,这时候仍然使用人工的方式来测试效率会比较低。如果希望将web端的一些用例变成可自动执行的代码,那么Dagger(Selenium+TestNG)+Ant+Jenkins会是一个不错的选择。

      首先简单描述一下这几个框架之间的关系:

      (1)Selenium实现了对web端各种操作的模拟,如打开页面、点击按钮、输入文本等,使用Selenium我们就可以用代码来模拟浏览器的各种操作;

      (2)TestNG提供了一个测试框架,它将用例包裹在测试框架中,规定了测试过程并生成测试结果,使用Selenium+TestNG使得我们能够完成最初步的自动化测试(需要手动在本地执行);

      (3)Dagger就是对Selenium+TestNG进行了进一步的封装,使得它们更简洁易用;

      (4)Ant是一个基于Java的构建工具,使用Dagger+Ant我们可以自动编译并执行用例,而不需要手动执行,这为在远程测试机上执行用例提供了基础;

      (5)Jenkins是基于Java的持续集成工具,它为自动化测试提供了一个管理平台,使用Dagger+Ant+Jenkins,我们可以有效地管理测试源码、测试执行、测试结果等。至此,我们将得到一个简单但完整的自动化测试平台。

      接下来整理在Windows系统下的具体搭建过程(具体原理性知识这里不多作介绍):


      准备工作:正确安装JDK(1.6及以上版本)、Eclipse/MyEclipse,本文中使用的版本是JDK1.8和MyEclipse8.5。

      下文中提到的资源都可以在这里找到。


(一)Dagger(Selenium)

1. 下载Dagger源码:https://github.com/NetEase/Dagger

这里对源码进行几点说明:

(1)/com.netease.dagger/BrowserEmulator.java:Dagger浏览器操作的API,封装了Selenium的部分方法

(2)/com.netease.dagger/GlobalSetting.java:全局设置,包括浏览器类型、浏览器驱动、timout时间等等

(3)/com.netease.demo:一些用例demo,包括直接运行的、使用testNG运行的

(4)/com.netease.test:API的使用demo

(5)/res:浏览器驱动文件

(6)/sreenshot:执行失败的浏览器截图

(7)/test-xml:用例文件

(8)/test-output:测试输出,如测试报告等

(9)prop.properties:配置文件


2. 将Dagger源码导入MyEclipse。此时会发现代码存在错误,这是因为还没有导入必要的jar包,其中就包括Selenium的jar包。


3. 下载相关jar包,拷贝到Dagger/libs目录下并build path

(1)Selenium相关jar包:在Selenium官网下载Selenium Standalone Server和Selenium Client&WebDriver的java版本。本文中使用的版本是selenium-server-standalone-2.18.0.jar(注意这里不使用最新版本的jar包)、selenium-java-2.46.0。

(2)其他jar包:apache-logging-log4j.jar(用于日志)、jxl.jar(用于Excel)


4. 下载浏览器驱动:由于Dagger默认使用Chrome浏览器,下载chromedriver_for_win.exe并拷贝到Dagger/res目录下


5. 运行com.netease.demo包中的GoogleSearch.java,至此已经可以用代码实现浏览器操作啦~

下面是GoogleSearch.java的代码:

package com.netease.demo;import com.netease.dagger.BrowserEmulator;/** * The demo to show Dagger's basic usage * @author ChenKan */public class GoogleSearch {public static void main(String[] args) {String googleUrl = "http://www.google.com";String searchBox = "//input[@name='q']";String searchBtn = "//input[@name='btnK']";BrowserEmulator be = new BrowserEmulator();be.open(googleUrl);             //打开网址be.type(searchBox, "github");   //在搜索框中输入github be.click(searchBtn);            //点击搜索按钮be.expectTextExistOrNot(true, "https://github.com/", 5000);  //检查页面上是否有期待的文本be.quit();}}


6. 下载并安装TestNG

在线安装参考:http://www.cnblogs.com/puresoul/archive/2013/12/20/3483092.html

离线安装参考:http://www.dataguru.cn/thread-472787-1-1.html


7. 使用TestNG运行com.netease.demo包中的TestNg.java

使用TestNG可以让我们:(1)控制测试流程,规定测试前、测试中、测试后要做的事情;(2)同一个case可以使用不同的参数多次执行;(3)统一管理测试数据,将测试数据与测试过程分离(使用DataProvider);(4)规定测试用例之间的依赖关系;(5)进行批量测试(执行xml文件);(6)自动生成简单的测试报告;(7)其他

下面是一个TestNg.java是TestNG的最简单例子:

/* * Copyright (c) 2012-2013 NetEase, Inc. and other contributors * *  Licensed under the Apache License, Version 2.0 (the "License"); *  you may not use this file except in compliance with the License. *  You may obtain a copy of the License at * *      http://www.apache.org/licenses/LICENSE-2.0 * *  Unless required by applicable law or agreed to in writing, software *  distributed under the License is distributed on an "AS IS" BASIS, *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *  See the License for the specific language governing permissions and *  limitations under the License. * */package com.netease.demo;import org.testng.annotations.AfterClass;import org.testng.annotations.BeforeClass;import org.testng.annotations.DataProvider;import org.testng.annotations.Test;import com.netease.dagger.BrowserEmulator;/** * The demo to show TestNg's basic usage * @author ChenKan */public class TestNg {/** * url & xpath */String googleUrl = "http://www.google.com";String searchBox = "//input[@name='q']";String searchBtn = "//input[@name='btnK']";BrowserEmulator be;/** * 数据准备,若在这一步挂掉TestNG标记为Skipped * @throws Exception */@BeforeClasspublic void doBeforeClass() throws Exception {be = new BrowserEmulator();}/** * 测试代码,若在这一步挂掉TestNG标记为Failed,否则标记为Passed * @param keyword * @param result */@Test(dataProvider = "data")public void doTest(String keyword, String result) {be.open(googleUrl);be.type(searchBox, keyword);be.click(searchBtn);be.expectTextExistOrNot(true, result, 5000);}/** * 清理数据,若在这一步挂掉TestNG仍标记为Passed */@AfterClass(alwaysRun = true)public void doAfterClass() {be.quit();}/** * 测试数据 * @return */@DataProvider(name = "data")public Object[][] data() {return new Object[][] { { "java", "www.java.com" }, { "github", "https://github.com/" }, };}}


除了直接运行这个java文件,我们还可以使用xml文件批量执行用例,如/test-xml/demo.xml。执行下面这个xml文件将一次执行TestNg和TestNgClone这两个用例,其中每个<test>标签定义一个用例。

<suite reruntimes="2" thread-count="10" parallel="tests" verbose="10" name="demo" annotations="JDK" time-out="1800000"><test name="TestNg" junit="false" annotations="JDK"><classes><class name="com.netease.demo.TestNg" /></classes></test><test name="TestNgClone" junit="false" annotations="JDK"><classes><class name="com.netease.demo.TestNgClone" /></classes></test></suite>


执行后我们就能会得到类似这样的测试结果:

===============================================
demo
Total tests run: 4, Failures: 0, Skips: 0
===============================================

打开/test-output/index.html可以看到简单的测试报告。


【Note】

Selenium还包含很多内容,包括Selenium IDE、Selenium Romate Control、Selenium Core等等,本文只关注Dagger中封装的相关的内容。Dagger也包含很多内容,本文只关注最基本的API使用。TestNG的报告还可以进行美化,使用TestNG-xslt可以做到。编写测试代码不仅涉及到Dagger的API、TestNG的框架,还需要学习XPath(用来进行网页元素定位)等知识。


【Problem】

(1)ImageContrast.java中import出错

import com.sun.image.codec.jpeg.JPEGCodec;import com.sun.image.codec.jpeg.JPEGImageEncoder;

解决:com.sun.*, sun.* 开头的包都是 JRE 的底层类库,Eclipse默认把这些受访问限制的API设成了ERROR。只要把Windows-Preferences-Java-Complicer-Errors/Warnings里面的Deprecated and restricted API中的Forbidden references(access rules)选为Warning就可以编译通过。


(2)打印Log出错

log4j:WARN No appenders could be found for logger (org.apache.http.client.protocol.RequestAddCookies).log4j:WARN Please initialize the log4j system properly.log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
解决:在BrowserEmulator.java的构造方法中添加Log配置语句:

PropertyConfigurator.configure("[workspace]/Dagger//src/log4j.properties");//加载.properties文件


(二)Dagger+Ant

1. 下载并安装Ant

(1)到Apache Ant官网下载Ant发布版本,解压到任意目录下
(2)配置Ant环境变量,在PATH中添加“[Ant目录]/bin;”


2. 编写Ant构建文件build.xml

在Dagger项目的根目录下新建build.xml(注意一定要在根目录下),下面是一个build.xml的例子,其中定义了classpath、清理、编译、运行等过程:

<?xml version="1.0" encoding="UTF-8"?><project name="Demo" default="run" basedir=".">    <echo  message="import libs" />    <path id="run.classpath">        <fileset dir="${basedir}">            <include name="libs/testng-6.8.5.jar" />        </fileset>        <fileset dir="${basedir}/libs">            <include name="selenium-java-2.46.0.jar" />            <include name="*.jar" />        </fileset>    </path>    <taskdef name="testng" classname="org.testng.TestNGAntTask" classpathref="run.classpath" />    <target name="clean">        <delete dir="build"/>    </target>    <target name="compile" depends="clean">        <echo message="mkdir"/>        <mkdir dir="build/classes"/>        <javac srcdir="src" destdir="build/classes" debug="on" encoding="UTF-8">            <classpath refid="run.classpath"/>        </javac>    </target>    <path id="runpath">          <path refid="run.classpath"/>          <pathelement location="build/classes"/>        </path>     <target name="run" depends="compile">        <testng  classpathref="runpath"  outputDir="test-output">            <xmlfileset dir="${basedir}/test-xml" includes="demo.xml"/>            <jvmarg value="-ea" />        </testng>    </target></project>


(三)Dagger+Ant+Jenkins

1. 安装Jenkins

Jenkins有两种启动方式,一种是下载Jenkins安装包,安装成功后直接访问http://localhost:8080/即可;一种是将Jenkins部署到Tomcat上,使用Tomcat启动。这里介绍后者(前者在实验过程中遇到了未知的问题,导致无法执行构建文件出现timeout)。

(1)下载Tomcat,本文使用直接下载Tomcat7.0源文件的方式,下载完成后直接解压

(2)下载jenkins.war,并复制到Tomcat的webapps目录下

(3)在Tomcat/bin目录下运行startup.bat,启动Tomcat和Jenkins

(4)浏览器打开http://localhost:8080/jenkins,此时可以看到Jenkins页面



2. 简单配置Jenkins

Jenkins系统管理 - 系统配置,设置JDK和Ant路径:




3. 使用Jenkins管理Ant执行

(1)Jenkins - 新建 - 新建一个自由风格的软件项目

           # 选择不使用任何源码管理(以后可以选择SVN、Git等)

           # 构建 - invoke Ant :选择Ant版本;填入Targets(build文件中的default target,一般为用例运行“run”);Build File路径

(2)Jenkins - 立即构建在build history中可以看到正在构建的任务,点击具体任务可以查看详情,Console Output可以查看控制台输出


【Note】

Jenkins中还可以进行邮件发送、源码管理、用户管理、权限管理、节点管理(分布式执行)等等设置,还有很多在测试平台管理中需要用到的插件。本文介绍的是简单进行一个demo执行所要配置的部分。


【Problem】

这里可能会出现一些与路径相关的问题,此时可以检查:

(1)环境变量JAVA_HOME是否正确配置到JDK目录

(2)Jenkins的JDK配置是否正确

(3)项目中的配置文件(特别是prop.properties)路径是否正确

(4)build.xml文件是否放在项目的根目录

(5)invoke Ant的Build File参数可以尝试细化到文件级别(/Dagger/build.xml)


至此,我们已经搭建完成了一个简单的自动化测试平台。

最后给出一个整体的框架图:



以上。



0 0
原创粉丝点击