标签:
本文介绍如何传递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>
另外:
还可以这样写
<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
标签:
原文地址:http://www.cnblogs.com/wade-xu/p/4857471.html