关闭

Maven如何传递系统属性变量到TestNG

发表于:2017-8-15 15:45

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:WadeXu    来源:51Testing软件测试网采编

  本文介绍如何传递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>
  @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被用到了。 
  可以通过命令行运行 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 被覆盖了。
  整个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>
  另外:
  还可以这样写
  <webdriver.chrome.driver>${DRIVER_PATH_CHROME}</webdriver.chrome.driver>
  Maven会去取环境变量DRIVER_PATH_CHROME的值。
   
  比如在Windows下写个bat 文件
  先 SET DRIVER_PATH_CHROME=xxx
  然后 cd 到 工程目录下
  最后 运行 mvn test
  其它操作系统同理。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号