zoukankan      html  css  js  c++  java
  • Maven如何传递系统属性变量到TestNG

     本文介绍如何传递Maven pom.xml里的系统属性参数到TestNG,文章沿用笔者一贯的风格--例子驱动。

    解决什么问题

    1. 用过WebDriver的都知道,当你启动Chrome或IE的时候都需要设置系统属性, 比如

    1     System.setProperty("webdriver.ie.driver", "D:/temp/resources/chromedriver.exe");
    2        WebDriver driver = new ChromeDriver();
    3        driver.get("http://www.cnblogs.com");

    经过本文的学习,在pom.xml里通过插件指定system Property Variables, 就不再需要第一步了。

    并且这个值可以通过Maven的命令来改写,比如把路径改成 /home/tmp/chromedriver.exe 详细如何使用见下文。

    2. 就像开发在不同环境构建系统一样,每种环境都有各自的配置参数,每个环境build前手动修改参数,显然不智能。

    测试人员在开发自动化测试时也有多个环境,到底是测试Dev环境呢还是测试QA环境呢还是Production呢, 我们可以用maven 的 profile 来解决。

    通过Maven命令传递不同的环境变量,代码根据不同的变量值,取不同的数据来进行初始化。

    例子详解

    在pom.xml里定义Maven surefire plugin

     1         <plugin>
     2                 <groupId>org.apache.maven.plugins</groupId>
     3                 <artifactId>maven-surefire-plugin</artifactId>
     4                 <version>2.16</version>
     5                 <configuration>
     6                     <suiteXmlFiles>
     7                         <suiteXmlFile>
     8                             ${basedir}/src/test/resources/testSuite.xml
     9                         </suiteXmlFile>
    10                     </suiteXmlFiles>
    11                     <systemPropertyVariables>
    12                         <webdriver.chrome.driver>D:/temp/resources/chromedriver.exe</webdriver.chrome.driver>
    13                         <webdriver.ie.driver>D:/temp/resources/IEDriverServer.exe</webdriver.ie.driver>
    14                         <environment>${demo.automation.environment}</environment>
    15                     </systemPropertyVariables>
    16                     <testFailureIgnore>true</testFailureIgnore>
    17                 </configuration>
    18             </plugin>

    定义 profile, 用来给<environment>属性赋值,默认激活的为QA profile

     1 <profiles>
     2         <profile>
     3             <id>QA</id>
     4             <activation>
     5                 <activeByDefault>true</activeByDefault>
     6             </activation>
     7             <properties>
     8                 <demo.automation.environment>QA</demo.automation.environment>
     9             </properties>
    10         </profile>
    11         <profile>
    12             <id>DEV</id>
    13             <properties>
    14                 <demo.automation.environment>DEV</demo.automation.environment>
    15             </properties>
    16         </profile>
    17     </profiles>

     ##转载注明出处:http://www.cnblogs.com/wade-xu/p/4857471.html 

    @Test 很简单的测试方法 读取系统属性值

     1 package com.acxiom.insightlab.automation.util;
     2 
     3 import org.testng.annotations.Test;
     4 
     5 /**
     6  * @Description: For demo purpose
     7  * @author wadexu
     8  *
     9  * @updateUser
    10  * @updateDate
    11  */
    12 public class DemoTest {
    13 
    14     @Test
    15     public void simpleTets() {
    16         String chromePath = System.getProperty("webdriver.chrome.driver");
    17         String iePath = System.getProperty("webdriver.ie.driver");
    18         String env = System.getProperty("environment");
    19         
    20         System.out.println("Chrome Driver Path: "+ chromePath);
    21         System.out.println("IE Driver Path: "+ iePath);
    22         System.out.println("Test Environment: "+ env);
    23     }
    24 
    25 }

    直接针对这个DemoTest类来 Run as TestNG, 取值都是Null, 因为根本没设置这些属性值

    Chrome Driver Path: null
    IE Driver Path: null
    Test Environment: null
    PASSED: simpleTets
    
    ===============================================
        Default test
        Tests run: 1, Failures: 0, Skips: 0
    ===============================================
    
    [TestNG] Time taken by org.testng.reporters.XMLReporter@3366184d: 41 ms
    [TestNG] Time taken by org.testng.reporters.EmailableReporter@999c305: 3 ms
    [TestNG] Time taken by org.testng.reporters.JUnitReportReporter@7ced5732: 3 ms
    [TestNG] Time taken by [TestListenerAdapter] Passed:0 Failed:0 Skipped:0]: 0 ms
    [TestNG] Time taken by org.testng.reporters.SuiteHTMLReporter@2eb95569: 38 ms

    应该右击pom.xml -> Run as -> Maven test 如果你用的IDE工具, 或者直接工程目录命令行下运行 mvn test

    Chrome Driver Path: D:/temp/resources/chromedriver.exe
    IE Driver Path: D:/temp/resources/IEDriverServer.exe
    Test Environment: QA
    Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.754 sec - in TestSuite
    
    Results :
    
    Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
    
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 5.138s
    [INFO] Finished at: Thu Oct 08 16:54:19 CST 2015
    [INFO] Final Memory: 11M/217M
    [INFO] ------------------------------------------------------------------------

    注意观察结果,默认的profile 里的 <demo.automation.environment> 值QA被用到了。

    ##转载注明出处:http://www.cnblogs.com/wade-xu/p/4857471.html 

    可以通过命令行运行 mvn test -P DEV   (这个DEV是Profile的id)

    注意观察结果,另一个profile 里的 <demo.automation.environment> 值DEV被用到了。

    通过命令行运行命令加 -D参数 可以覆盖pom里的变量值

    比如运行 mvn test -P DEV -Dwebdriver.chrome.driver=C:/temp/chromedriver.exe -Dwebdriver.ie.driver=C:/temp/IEDriverServer.exe

    注意观察结果: Chrome 和 IE Driver path 被覆盖了。

    ##转载注明出处:http://www.cnblogs.com/wade-xu/p/4857471.html 

    整个pom.xml 文件如下

     1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     2     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
     3     <modelVersion>1.0.0</modelVersion>
     4     <groupId>com.wadeshop.demo.automation</groupId>
     5     <artifactId>demo-automation</artifactId>
     6     <packaging>jar</packaging>
     7     <version>1.0.0-SNAPSHOT</version>
     8     <name>demo-automation</name>
     9 
    10     <properties>
    11         <maven-compiler-version>3.1</maven-compiler-version>
    12         <java-base-version>1.7</java-base-version>
    13         <surefire-version>2.16</surefire-version>
    14     </properties>
    15 
    16     <dependencies>
    17         <dependency>
    18             <groupId>org.testng</groupId>
    19             <artifactId>testng</artifactId>
    20             <version>6.8.7</version>
    21         </dependency>
    22         
    23         <dependency>
    24             <groupId>org.seleniumhq.selenium</groupId>
    25             <artifactId>selenium-java</artifactId>
    26             <version>2.46.0</version>
    27         </dependency>
    28     </dependencies>
    29 
    30     <build>
    31         <plugins>
    32             <plugin>
    33                 <groupId>org.apache.maven.plugins</groupId>
    34                 <artifactId>maven-compiler-plugin</artifactId>
    35                 <version>${maven-compiler-version}</version>
    36                 <configuration>
    37                     <source>${java-base-version}</source>
    38                     <target>${java-base-version}</target>
    39                 </configuration>
    40             </plugin>
    41                       <plugin>
    42                 <groupId>org.apache.maven.plugins</groupId>
    43                 <artifactId>maven-surefire-plugin</artifactId>
    44                 <version>2.16</version>
    45                 <configuration>
    46                     <suiteXmlFiles>
    47                         <suiteXmlFile>
    48                             ${basedir}/src/test/resources/testngCopy.xml
    49                         </suiteXmlFile>
    50                     </suiteXmlFiles>
    51                     <systemPropertyVariables>
    52                         <webdriver.chrome.driver>D:/temp/resources/chromedriver.exe</webdriver.chrome.driver>
    53                         <webdriver.ie.driver>D:/temp/resources/IEDriverServer.exe</webdriver.ie.driver>
    54                         <environment>${demo.automation.environment}</environment>
    55                     </systemPropertyVariables>
    56                     <testFailureIgnore>true</testFailureIgnore>
    57                 </configuration>
    58             </plugin>
    59         </plugins>
    60     </build>
    61 
    62     <profiles>
    63         <profile>
    64             <id>QA</id>
    65             <activation>
    66                 <activeByDefault>true</activeByDefault>
    67             </activation>
    68             <properties>
    69                 <demo.automation.environment>QA</demo.automation.environment>
    70             </properties>
    71         </profile>
    72         <profile>
    73             <id>DEV</id>
    74             <properties>
    75                 <demo.automation.environment>DEV</demo.automation.environment>
    76             </properties>
    77         </profile>
    78     </profiles>
    79 
    80 
    81 </project>
    View Code

    另外:

    还可以这样写

    <webdriver.chrome.driver>${DRIVER_PATH_CHROME}</webdriver.chrome.driver>

    Maven会去取环境变量DRIVER_PATH_CHROME的值。

    比如在Windows下写个bat 文件

    先 SET DRIVER_PATH_CHROME=xxx

    然后 cd 到 工程目录下

    最后 运行 mvn test

    其它操作系统同理。

     

    感谢阅读,如果您觉得本文的内容对您的学习有所帮助,您可以点击右下方的推荐按钮,您的鼓励是我创作的动力。

    ##转载注明出处:http://www.cnblogs.com/wade-xu/p/4857471.html 

  • 相关阅读:
    Spring AOP capabilities and goals
    java Design Patterns
    CDI Features
    connector for python实验
    spring ref &history&design philosophy
    LDAP & Implementation
    RESTful Levels & HATEOAS
    运维管理利器系列--ipmitool
    CentOS8.2同步阿里云Zabbix镜像到本地,本地搭建Zabbix仓库
    CentOS8.2同步阿里云Ceph镜像到本地,本地搭建ceph仓库
  • 原文地址:https://www.cnblogs.com/wade-xu/p/4857471.html
Copyright © 2011-2022 走看看