自动化,不可逃避的问题。还好环境配置越来越集成化,相对于最原始的安装简单了许多。
最近看客户使用selenium + testng + reportng搭建的自动化测试环境,将整个环境进行了层次化,想来是做集成测试开发使用,而且客户的环境是平行移植的,并不需要动手逐个部署。
要真正了解架构,亲手尝试是最好的办法,真正的问题来自于实践。
闲来技痒,自己动手尝试在Window7环境下搭建seleninum + testng + reportng的集成测试环境。
先列出基本过程,之后对问题收集、记录和修正。
不断完善,理解自动化测试的理念、框架和实现原理,而具体的项目实现只有到真实项目中不断历练和积累。
参考
1)Selenium:/
2)testng:/doc/
TestNG is a testing framework inspired from JUnit and NUnit but introducing some new functionalities that make it more powerful and easier to use)
3)reportng:http://www.open-/open213925.htm
4)eclipse:/
5)环境组件下载:/
6)配置参考:/SH-xuliang/p/6733285.htmlEnvironment/ -- canbe download from this site
1)OS:Window7 64bit
OS 名称:Microsoft Windows 7 旗舰版OS 版本:6.1.7601 Service Pack 1 Build 7601OS 制造商: Microsoft Corporation
2)Eclipse:Oxygen Release (4.7.0)
3)java:1.8.0
C:\Users\Administrator>java -versionjava version "1.8.0"Java(TM) SE Runtime Environment (build 1.8.0-b132)Java HotSpot(TM) 64-Bit Server VM (build 25.0-b70, mixed mode)
3)Software:Subclipse, subversion for eclipse -- 代码管理
selenium-server-standalone-2.53.0
testNG6.12
reportNG1.1.4Deployment
1)下载并安装Eclipse
2)testNG插件:Help --> Eclipse Marketplace --> Search testNG: TestNG for Eclipse
3)reportNG插件:reportng-1.1.4.jar(/snapshot//maven2/org.uncommons/reportng/1.1.4)
4)新建Java测试项目:File --> New --> Java Project: seAuto
5)新建package:src --> testSuite:testSuite
6)新建testNG:File --> Other --> TestNG --> TestNG class
Note: testNG具体说明,参考官方文档
7)引入testNG lib库
此时提示“The import org.testng cannot be resolved”,需要引用testNG lib库
Select Project --> Build Path --> Configure Build Path --> Libraries --> Add Library --> TestNG8)验证testNG
testSuite.xml --> Run As --> TestNG Suite
此时会执行预设的测试,即testSuite.java中的标记为@test的测试 -- 参见,testSuite.java -- TestNG插件安装完毕
[RemoteTestNG] detected TestNG version 6.12.0[TestNGContentHandler] [WARN] It is strongly recommended to add "<!DOCTYPE suite SYSTEM "/testng-1.0.dtd" >" at the top of your file, otherwise TestNG may fail or not work as expected.===============================================SuiteTotal tests run: 2, Failures: 0, Skips: 0===============================================
使用reportNG插件
9)使用reporNG作为listeners: Window --> Preferences --> TestNG
10)testSuite.xml中注册reportNG
<!-- add listener --><listeners><listener class-name="org.uncommons.reportng.HTMLReporter"></listener></listeners>
11)使用reportNG
执行测试工:testSuite.xml --> Run As --> TestNG Suite,提示如下
[RemoteTestNG] detected TestNG version 6.12.0org.testng.TestNGException: Listener org.uncommons.reportng.HTMLReporter was not found in project's classpathat org.testng.TestNG.addListeners(TestNG.java:1009)at org.testng.TestNG.initializeConfiguration(TestNG.java:976)at org.testng.TestNG.initializeEverything(TestNG.java:1108)at org.testng.remote.support.RemoteTestNG6_12.initialize(RemoteTestNG6_12.java:22)at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:97)at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)
添加reportNG lib库 * Window --> Preferences --> Java --> Build Path --> User Libraries --> lib *Select Project --> Build Path --> Configure Build Path --> Libraries --> Add Library --> User Library: reportng1.1.4.jar12)验证reportNG testSuite.xml --> Run As --> TestNG Suite
[RemoteTestNG] detected TestNG version 6.12.0
===============================================
Suite
Total tests run: 2, Failures: 0, Skips: 0
===============================================
生成test-output目录,即reportNG报告Note: 在执行过程中会提示安装velocity 和guice 插件,具体可参考Question 2
至此,Selenium + testNG + reportNG环境部署完成。自己的测试项目框架配置
**** 原则: 易于实现、方便管理、减小维护成本、报告清晰易分析
逐步细化、分层管理:单一项目可以减少分层,减少维护量;多项目并行,要考虑项目间共用内容
1)分离自动化测试项目的公共方法和业务方法
* 公共方法:将与具体项目业务无关的方法独立实现,供所有不同项目使用
如,系统初始化,测试异常处理
* 业务方法:专注具体项目业务,按业务场景实现测试,同时分离公共的业务操作
2)分离环境
* 分离不同的操作系统
* 分闻不同的浏览器
3)分离业务实现步骤
* 测试数据
* 测度对像操作
* 测试操作步骤
* 测试场景实现
* 测试结果验证
4)持续集成,根据代码变更,完成测试执行和报告生成
5)思考问题
* 哪些项目适合开展自动化测试?
* 使用什么工具开展自动化测试?自我开发?成形的框架?
* 如何提高自动化测试的可维护性?
* 如何提高自动化测试的覆盖率?
* 自动化测试如何发现更多的问题?
* 自动化测试 与 手工测试的配合?Question
1.[TestNGContentHandler][WARN] It is strongly recommended to add "<!DOCTYPE suite SYSTEM"/testng-1.0.dtd" >" at the top of yourfile, otherwise TestNG may fail or not work as expected
解决方法:修改testNG中的xml配置文件
<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEsuiteSYSTEM"/testng-1.0.dtd"><suitename="Suite" parallel="false"><!-- <test name="Test"><classes> <class name="testSuite.Suite"/></classes> </test> --><!-- test for Login --><testname="Login"><classes><classname="testCase.Login"/></classes></test><!-- add listener --><listeners><listenerclass-name="org.uncommons.reportng.HTMLReporter"></listener></listeners> </suite><!-- Suite -->
2.java.lang.ClassNotFoundException: org.apache.velocity.context.Context
java.lang.NoClassDefFoundError:org/apache/velocity/context/Contextatjava.lang.Class.getDeclaredConstructors0(Native Method)atjava.lang.Class.privateGetDeclaredConstructors(Unknown Source)atjava.lang.Class.getConstructor0(Unknown Source)atjava.lang.Class.newInstance(Unknown Source)atorg.testng.internal.ClassHelper.newInstance(ClassHelper.java:65)atorg.testng.TestNG.addListeners(TestNG.java:1012)atorg.testng.TestNG.initializeConfiguration(TestNG.java:976)atorg.testng.TestNG.run(TestNG.java:1102)atorg.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:132)atorg.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:230)atorg.testng.remote.RemoteTestNG.main(RemoteTestNG.java:76)Caused by:java.lang.ClassNotFoundException:org.apache.velocity..URLClassLoader.findClass(Unknown Source)atjava.lang.ClassLoader.loadClass(Unknown Source)atsun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)atjava.lang.ClassLoader.loadClass(Unknown Source)...11 more
解决方法:下载velocity插件,并加载到lib路径中
3.如有兴趣,可以详细阅读相关的源码,以扩展功能,比如按日期和时间生成测试执行报告
反编译可以通过Help --> Eclipse Marketplace --> decompile 安装
4.项目执行中可能会出现缺少commons-*.jar的提示,按提示在 / 下载得到。
说明:eclipse的plugins已经包含了所需的commons组件,可能是由于版本问题无法正常使用。