本文介绍如何传递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, 因为根本没设置这些属性值

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

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

  1. Chrome Driver Path: D:/temp/resources/chromedriver.exe
  2. IE Driver Path: D:/temp/resources/IEDriverServer.exe
  3. Test Environment: QA
  4. Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.754 sec - in TestSuite
  5.  
  6. Results :
  7.  
  8. Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
  9.  
  10. [INFO] ------------------------------------------------------------------------
  11. [INFO] BUILD SUCCESS
  12. [INFO] ------------------------------------------------------------------------
  13. [INFO] Total time: 5.138s
  14. [INFO] Finished at: Thu Oct 08 16:54:19 CST 2015
  15. [INFO] Final Memory: 11M/217M
  16. [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. </project>

另外:

还可以这样写

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

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

比如在Windows下写个bat 文件

先 SET DRIVER_PATH_CHROME=xxx

然后 cd 到 工程目录下

最后 运行 mvn test

其它操作系统同理。

  1.  

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

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

Maven如何传递系统属性变量到TestNG的更多相关文章

  1. Ant 脚本打印系统属性变量、ant内置属性

    Ant 脚本打印系统属性变量.ant内置属性 作用 编写ant脚本的时候,经常会引用到系统属性,本脚本用于打印系统常用属性(System.getProperties)与环境变量(Environment ...

  2. java中获取系统属性以及环境变量

    java中获取系统属性以及环境变量 System.getEnv()和System.getProperties()的差别 从概念上讲,系统属性 和环境变量 都是名称与值之间的映射.两种机制都能用来将用户 ...

  3. Spring中如何向 Bean注入系统属性或环境变量

    [转自] http://unmi.cc/spring-injection-system-properties-env/ 在 Spring 中为 javabean 注入属性文件中的属性值一般人都知道的, ...

  4. Java获取系统属性及环境变量

    当程序中需要使用与操作系统相关的变量(例如:文件分隔符.换行符)时,Java提供了System类的静态方法getenv()和getProperty()用于返回系统相关的变量与属性,getenv方法返回 ...

  5. Java获取系统环境变量(System Environment Variable)和系统属性(System Properties)以及启动参数的方法

    系统环境变量(System Environment Variable): 在Linux下使用export $ENV=123指定的值.获取的方式如下: Map<String,String> ...

  6. Java获取环境变量和系统属性

    Java获取服务器环境变量和JVM系统变量    当程序中需要使用与操作系统相关的变量(例如:文件分隔符.换行符)时,Java提供了System类的静态方法getenv()和getProperty() ...

  7. Java取得环境变量和系统属性

    取得所有的环境变量 public class GetEnvAndProp { public static void main(String[] args) { Map<String, Strin ...

  8. springboot读取系统级环境变量,和读写系统属性以及unittest来获取环境变量的方法

    环境变量的读取以及系统属性的设置 环境变量只能读取,不能修改,系统属性可以修改 系统变量的读取方式: System.getEnv() 系统属性有多重读取和修改方式: 其修改方式为: 读取系统属性: @ ...

  9. JVM系统属性 OS环境变量 JVM启动参数

    JVM系统属性(System Properties) 1.不支持通过文件查看和设置系统属性 2.可以通过JDK自带的工具jvisulavm.exe查看 3.可以在Java程序中使用API来查看系统属性 ...

随机推荐

  1. python自动化框架nose

    python除了unittest,还有一款更快捷的nose,nose可以说是对unittest的一种简化吧 但是他不需要unittest那种必须有固有的格式,他只需要文件,类名,方法名等含有test就 ...

  2. SEO如何辨别真假Baiduspider

    我们站长查看网站访问数据,分析IP来源是我们站长的日常工作,对一些异常的IP段,我们首先要区分是否是搜索引擎蜘蛛的IP段,以免误伤,下面我们就以2段IP为例,一个是百度蜘蛛的220.181.108.1 ...

  3. Java复习-oop

    我们可理解“纯粹”的面向对象程序设计方法是什么样的:(1) 所有东西都是对象.可将对象想象成一种新型变量:它保存着数据,但可要求它对自身进行操作.理论上讲,可从要解决的问题身上提出所有概念性的组件,然 ...

  4. 从输入 URL 到浏览器接收的过程中发生了什么事情

    从输入 URL 到浏览器接收的过程中发生了什么事情? 原文:http://www.codeceo.com/article/url-cpu-broswer.html 从触屏到 CPU  首先是「输入 U ...

  5. UE4 Windows平台部署游戏到IOS 第二部分

    点击加号后会出来如下截图 勾选上红色单选框处(因为这个我已经申请过了所以是灰色),然后continue到后面会出现下图 选择一个之前我提到申请证书会用的的那个.csr后缀文件夹,完成以后就可以下载证书 ...

  6. JAVA的单例模式与延时加载

    延迟加载(lazy load)是(也称为懒加载),也叫延迟实例化,延迟初始化等,主要表达的思想就是:把对象的创建延迟到使用的时候创建,而不是对象实例化的时候创建.延迟加载机制是为了避免一些无谓的性能开 ...

  7. 前端学习 第五弹: CSS (一)

    前端学习 第五弹: CSS (一) 创建css: <link rel="stylesheet" type="text/css" href="my ...

  8. 【我是老中医】Win10系统下MATLAB无法正常打开的解决方案

    转眼大四了,要开始做毕设了,导师给的题目要用到他之前做的东西,都是MATLAB做的,所以不太熟悉MATLAB的我也得用这玩意儿了,想想自己目前也就大二的DSS实验和大三的AI实验用过MATLAB,当时 ...

  9. LEETCODE —— Linked List Cycle [Floyd's cycle-finding algorithm]

    Linked List Cycle Given a linked list, determine if it has a cycle in it. Follow up:Can you solve it ...

  10. [转] "self = [super init]"的解释与潜藏bug

    Objective-C的推荐init方法写法如下: - (id) init { if(self = [super init]) { //为子类增加属性进行初始化 } return self; } 这里 ...