Jenkins+Saucelabs+Git+Appium+Maven+TestNG+ReportNG之环境搭建与运行

1 背景

最近学了利用Appium+Maven+TestNG(ReportNG)搭建全自动化测试环境,使用https://saucelabs.com/ 网站提供的VM平台(可以手动测试与自动化测试,并且可以多线程多设备并行测试Web,Android与IOS),通过Jenkins从Git下载测试代码并触发运行,实现真正意义上的完全自动化测试。

2 环境搭建流程与运行

下面我们从零开始以搭建环境到运行一个Demo为例来说明整个流程,具体如下步骤即可。

一、jdk 安装与Java环境变量与adb配置

这个没啥说的,网上一堆,自行搜索配置吧。

二、IDE安装

下载安装eclipse用来进行测试代码编写,推荐下载Eclipse Luna java EE版本,自带maven插件,比较稳定。Eclipse Luna java EE版64位下载地址:http://ftp.yz.yamagata-u.ac.jp/pub/eclipse//technology/epp/downloads/release/luna/SR2/eclipse-jee-luna-SR2-win32-x86_64.zip,解压即可。

下载安装Win下的Appium(Appium Server)安装并配置环境变量:

在这里http://appium.io/ 下载Appium压缩包,解压后配置appium环境变量 Path D:\developer\appium\Appium\node_modules.bin;

测试:CMD中输入appium-doctor,能看到All Checks were successful ,说明安装成功!

三、Maven安装配置环境变量

下载Maven并配置环境变量;从maven官网下载maven程序包:http://apache.opencas.org/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.zip,下载后解压,例如我的目录结构是:

配置环境变量MAVEN_HOME,变量值为maven的根目录:D:\developer\apache-maven-3.3.9,在PATH中添加bin的路径:D:\developer\apache-maven-3.3.9\bin。

四、自定义Maven的Setting.xml

打开maven conf目录下的settings.xml文件,配置maven本地仓库地址,我配置的是E:/maven/repo,如下图修改:

五、关联Eclipse与Maven设置

打开Eclipse,在菜单择:windows->Preference->Maven->User Settings,在右侧User Settings选择刚才的settings.xml文件:

配置后,下面步骤在pom.xml配置的依赖包就会从远程仓库下载到本地配置的仓库:E:/maven/repo。

六、TestNG插件安装

安装Eclipse testNG插件,在菜单栏选择help->Eclipse Maketplace,搜索testng,安装,重启Eclipse

七、创建Maven自动化TestCase工程

Eclipse中选择Archetype,输入Group Id、Artifact Id,finish创建完成,如下图:

创建完成后工程目录如下:

八、配置自动化测试依赖的java jar库

配置依赖包:selenium-java(selenium client)、java-client(appium client)、selenium-server(selenium server)、testng(单元测试)、{sauce_testng,commons-lang(saucelabs 上显示测试结果所用)}如果我们不用maven构建工程,那么我们需要去下载这三个包,然后添加到我们的工程中,而maven不需要了,只需要配置依赖关系就可以了,我们可以在maven仓库中搜索我们需要的包,把他们的依赖关系写到pom.xml文件中。

maven仓库地址:http://mvnrepository.com/,例如搜索appium,就可以搜索到appium java client的包,选择最新的包,把依赖关系粘贴打pom.xml中,只需要配置一个selenium依赖就行了,配置后的pom.xml文件如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.mobile.ui</groupId>
  <artifactId>MobileTest</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>
  <name>MobileTest</name>
   <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>6.9.10</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>2.53.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.6</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.saucelabs</groupId>
            <artifactId>sauce_testng</artifactId>
            <version>2.1.21</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>io.appium</groupId>
            <artifactId>java-client</artifactId>
            <version>3.3.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-server</artifactId>
            <version>2.53.0</version>
            <scope>test</scope>
        </dependency>

    </dependencies>
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.0</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.19</version>
                <configuration>
                    <parallel>methods</parallel>
                    <threadCount>20</threadCount>
                    <properties>
                        <property>
                            <name>dataproviderthreadcount</name>
                            <value>2</value>
                        </property>
                    </properties>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

配置后保存,会自动更新依赖包,如果没有更新也可以菜单栏勾选上Project->Build automatically,更新完成后,你就发现你的Maven Dependencies多了很多jar包。

九、IDE运行单元测试

创建TestNG测试类,因为是Appium项目,所以我把源代码放在了src/test/java目录下,选中目录,右键选择New->Other->TestNG->TestNG Class:

创建完成后的目录结构:

测试代码LogInTest.java如下:

package com.mobile.ui.MobileTest;

import org.openqa.selenium.By;
import org.openqa.selenium.InvalidElementStateException;
import org.openqa.selenium.WebElement;
import org.testng.AssertJUnit;
import org.testng.annotations.Test;

import io.appium.java_client.AppiumDriver;

import java.lang.reflect.Method;
import java.net.MalformedURLException;
import java.util.List;
import java.util.concurrent.TimeUnit;

public class LogInTest extends SampleSauceTestBase {

    @Test(dataProvider = "hardCodedBrowsers")
    public void logInTest(String os, String deviceName, String platformVersion, Method method)
            throws MalformedURLException, InvalidElementStateException {

        //create webdriver session
        this.createDriver(os, deviceName, platformVersion, method.getName());
        AppiumDriver<WebElement> driver = this.getWebDriver();
        WebElement logInLink = driver.findElement(By.id("com.quest.spotlightexpress:id/sign_in_enter"));
        logInLink.click();

        List<WebElement> logInList = driver.findElements(By.className("android.widget.EditText"));
        logInList.get(0).sendKeys("[email protected]");
        logInList.get(1).sendKeys("123456");
        WebElement saveElement = driver.findElement(By.name("Save"));
        saveElement.click();
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

        WebElement connectLink = driver.findElement(By.id("com.quest.spotlightexpress:id/titleView"));
        connectLink.click();

        WebElement userNameLink = driver.findElement(By.id("com.quest.spotlightexpress:id/top_username"));
        String userName = userNameLink.getText();
        AssertJUnit.assertEquals(userName, "[email protected]");
    }
}

启动Appium Server,连接手机或者启动模拟器,右键选中MobileTest工程,选择Run As->TestNG Test,运行后,会在工程目录下创建一个test-output的文件夹,打开文件夹下的index.html可以查看测试结果,也可以在Eclipse的Console中查看结果,如下图:

这个报告很简陋,下面开始用ReportNG替换TestNG的报告。

十、使用ReportNG生成报告

1、添加依赖,在pom.xml文件中添加下列依赖关系:

<dependency>
             <groupId>org.uncommons</groupId>
             <artifactId>reportng</artifactId>
             <version>1.1.4</version>
             <scope>test</scope>
              <exclusions>
                  <exclusion>
                     <groupId>org.testng</groupId>
                      <artifactId>testng</artifactId>
                 </exclusion>
             </exclusions>
        </dependency>
         <dependency>
             <groupId>com.google.inject</groupId>
             <artifactId>guice</artifactId>
             <version>4.0</version>
            <scope>test</scope>
        </dependency> 

2、配置maven-surefire-plugin并加入reportNG listenser

<build>
         <plugins>
         <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                  <artifactId>maven-surefire-plugin</artifactId>
                  <version>2.17</version>
                  <configuration>
                      <suiteXmlFiles>
                          <suiteXmlFile>xmlfile/testng.xml</suiteXmlFile>
                     </suiteXmlFiles>
                 </configuration>
             </plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
               <version>2.19.1</version>
               <configuration>
                     <properties>
                         <property>
                             <name>usedefaultlisteners</name>
                             <value>false</value>
                         </property>
                         <property>
                             <name>listener</name>
                             <value>org.uncommons.reportng.HTMLReporter, org.uncommons.reportng.JUnitXMLReporter</value>
                         </property>
                    </properties>
                    <workingDirectory>target/</workingDirectory>
                </configuration>
            </plugin>
         </plugins>
     </build>

注意这句:xmlfile/testng.xml,我在工程目录下手动新建了一个文件夹xmlfile,把testng的xml文件都放在这个目录下,如果有多个testng.xml文件的话,这样更直观,如果只有一个的话,不建文件夹也可以。

3、更新一下Maven Project,然后右键选中Maven工程,选择Run As->Maven Test,运行成功后,在target目录下创建了一个surefire-reports目录,打开它下面的html文件夹,打开indel.xml,就可以看到相对美观的报告形式了:

十一、在jenkins上配置运行

1.去官网(https://jenkins.io/index.html)下载jenkins 下一步,下一步安装成功(官网wiki等目录下一般都有不同平台的安装文档,依据文档安装即可)。

2.构建一个Maven项目:

  1. 设置里工程目录的pom.xml文件的位置:

4.在jenkins 的通过插件管理安装testng Results plugin 并配置工程目录下的testng-results.xml

5.点击jenkins上的立即构建,如图里可以查看测试结果,并设置自动多久执行一次,出错发邮件等。

当然你要问那代码运行在哪里啊?当然是saucelabs 提供的VM平台,它有各个类型的设备。

十二、saucelabs平台运行

在saucelabs 官网https://saucelabs.com/ 注册账号,根据官网的说明文档在你的测试代码里设置你的用户信息和被测app的信息和设置在saucelab上展示测试结果的信息,并通过curl命令把你的被测app上传到saucelabs 仓库,如下命令:

curl -u <sauce_username>:<sauce_access_key> -X POST -H "Content-Type: application/octet-stream" https://saucelabs.com/rest/v1/storage/<sauce_username>/<upload_filename>?overwrite=true --data-binary @/<path/to/your_file_name>

这样的话在jenkins运行的同时你的测试的视频会在saucelabs 上显示,你可以回放测试视频或者查看测试结果:

点击上图LoginTest你可以查看该案例的视频回放如下:

十三、提交自己编写的自动化工程

测试代码你可以放在远程仓库git然后在jenkins上配置clone 到你本地或者远程的jenkins来:

至此一个真正意义上的完全自动化测试环境的搭建与运行就介绍完了,剩下的就是自己补充Test案例编写了,我比较喜欢用Java写而已,也用过C#写过。语言的选择就看你所在公司倾向于啥语言了,因为自动化测试是至此多语言的,譬如Python等等!

3 总结

题外话:

1、上面刚开始运行Maven工程时是让大家直接在Eclipse中右键运行的,其实还可以在命令行运行,譬如:

mvn compile //编译,首次会自动下载依赖包
mvn test    //运行测试
//上面两条还可以缩短为一条编写,如下:
mvn compile test
//或者
mvn clean compile test

2、我们选择Maven是因为工程依赖很多Jar包等,不想在提交代码时提交一堆Jar文件,所以选择了自动化的Maven仓库。其实还可以使用Ant脚本,也就是创建Java工程,使用Ant,同时手动下载下来工程依赖的Jar进行引用而已,与此同时Jenkins的配置也需要配置Ant的选项,而不是Maven的。

3、上面搭建Appium是Android、IOS等移动端UI测试的自动化框架,如果是Web需要配置Selenium2框架来处理,其配置原理和Appium一样,所以不多介绍了。

4. 上面介绍的安装win appium(appium server)我安装的是有界面的,当然可以选择安装无界面的通过命令行启动如下安装:

4.1 下载安装nodejs,选择默认安装

node配置环境变量 Path D:\nodejs\; (也就是node.exe文件所在的目录)测试:CMD中输入node-v,能看到版本号,那么就成功安装了nodejs。

4.2 命令行安装appium

4.2.1 打开CMD窗口,执行 npm install -g appium 命令开始安装Appium. Appium默认被安装到C:\Users\Administrator\AppData\Roaming\npm\ 下。

4.2.2 把路径C:\Users\Administrator\AppData\Roaming\npm\ (appium可执行文件所在的目录)添加到系统环境变量Path中.那么可以直接在cmd命令行直接输入appium,启动appium。

5. appium client下载路径:http://appium.io/downloads.html

6. selenium client 下载路径:http://docs.seleniumhq.org/download/

7. nodejs 下载路径:http://www.nodejs.org/download/

8. 本地调试代码的运行步骤:

8.1 首先连上真机或者启动模拟器;

8.2 接着启动appium sever;

8.3 最后运行你的测试脚本即可。

到此对于Android、IOS、Web的UI测试全自动化平台就搭建完毕了,下面几篇文章会详细介绍相关依赖的一些其他知识。

时间: 2024-11-06 07:10:16

Jenkins+Saucelabs+Git+Appium+Maven+TestNG+ReportNG之环境搭建与运行的相关文章

老李分享:持续集成学好jenkins之Git和Maven配置

老李分享:持续集成学好jenkins之Git和Maven配置 Jenkins专用术语,请参考下面连接: https://wiki.jenkins-ci.org/display/JENKINS/Terminology 1.通过Jenkins web页面添加Git plugin Manage Jenkins->Manage Plugins->Available中选择Git Plugin安装, 注意要填写user name和 email地址,否则日后会碰到git tag的错误 2.Jenkins服务

Jenkins + svn + maven 构建持续集成环境搭建

Jenkins简介 Jenkins是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能. Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括: 1.持续的软件版本发布/测试项目 2.监控外部调用执行的工作 Jenkins环境搭建 环境说明:我们用到的是CentOS 7 x64 1.安装jdk1.7 这里jdk的配置就不做说明了,不过记得配置JAVA_HOME 2.安装svn centos通过yum安装svn yum -y install

Jendins+svn+maven+tomcat自动化部署环境搭建

在一个Tomcat集群的架构体系中,需要一个自动发布平台,对于大的公司都是自己建设,而对于中小公司一般采取的使用开源搭建,所以接下来详细介绍基于Jendins+svn+maven+tomcat的自动化部署环境搭建. 1. jenkins安装(svn,maven,tomcat已安装): 将jenkins.war拷贝到tomcat的webapps目录下 访问ip+端口/jenkins即安装成功: 2. 配置: 全局环境配置: 在jenkins中进入系统管理页面,选择系统管理,配置页面中的JAVA_H

appium之安卓7.0环境搭建

appium 在安卓7.0的手机上运行上报错---------Failure [INSTALL_FAILED_ALREADY_EXISTS: Attempt to re-install io.appium.settings without first uninstalling.] 解决方法: 进入Appium安装目录,找到目录下的adb.js(D:\Program Files (x86)\Appium\node_modules\appium\node_modules\appium-adb\lib

MAC电脑下Appium 的真机测试环境搭建

本人的环境搭建的情况,MAC电脑一台(macOS Mojave 10.14.4),Xcode 10.2.1   ,自己注册的一个Apple ID 账户,必须你的电脑能连接互联网,最好不要用公司的网络,限制太多,容易掉坑里. 1.安装Homebrew  安装 /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"    卸载 ruby -e &qu

Mac Eclipse+Maven+TestNg+ReportNg 生成测试报告

转自:http://blog.csdn.net/a542551042/article/details/46729585 TestNG 是java 的单元测试框架,功能很强大,很方便,但是自动生成的测试报告有待改善,可以使用TestNg 自带的TestNG_xslt更改TestNG报告的样式,这里主要讲解ReportNg,美化下TestNG 的报告 TestNg(TestNg官网): http://testng.org/doc/index.html ReportNg(ReportNg官网): ht

老李分享:持续集成学好jenkins之Git和Maven配置 2

8.检查代码更新并编译 可以通过Poll SCM来设置定时检查编译功能 比如*/5 * * * * 就是每隔5分钟检查一次,如果git仓库中有更新,则执行build操作. 9.使用Maven私服加快下载速度 参阅:http://blog.csdn.net/sheismylife/article/details/7209722 Jenkins的.m2目录路径在:/var/lib/jenkins/.m2/ 先清空所有jar包,后创建settings.xml文件,编辑内容如下: <settings>

cmd下并行执行appium +maven+Testng test

1: first: open two command wins to start appium: appium -p 4725 -bp 4726 -U EP7333W0UR appium -p 4723 -bp 4724 -U 3a2acab thus,appium server for the devices has started 2: go to the directory of the project : cd /Users/huangxiaoshi/Documents/eclipse/

appium+python在Mac上环境搭建

前言 mac上搭建appium+python的环境还是有点复杂的,需要准备的软件 1.nodejs 2.npm 3.cnpm 4.appium 5.pip 6.Appium-Python-Client 一.nodejs安装 1.nodejs下载地址:https://nodejs.org/ 2.下载完成后傻瓜式下一步安装 3.打开终端,查看版本号是否安装成功,输入:node -v 二.npm安装 1.打开终端,输入:sudo bash 2.继续输入:sudo curl -L https://npm