结合TestNG让自动化测试的流程掌控自如
尽管目前的脚本结构已经很清晰,数据和测试逻辑也都分离开来,易于维护,但从测试调度的角度以及可重用的角度来看,还需要进一步改进。
TestNG,即Testing Next Generation,下一代测试技术,是一套根据JUnit 和 NUnit思想而构建的利用注释来强化测试功能的一个测试框架,既可以用来做单元测试,也可以用来做集成测试。
通常编写一个测试的过程有三个典型步骤:
* 编写测试的业务逻辑并在代码中插入TestNG annotation
* 将测试信息添加到testng.xml文件或者build.xml中
* 运行TestNG
在上述段落中我们的Sample scenario是一个相对长的测试用例,如果是将此用于手动测试,应该不失为一个好的测试用例,但是用在自动化测试中,我们期望可以尽可能模块化我们的脚本,以便于以后重用。模块化之后,我们就可以利用TestNG的Annotation指定该模块何时运行,以及运行顺序等,在多个测试用例中也可以重用。
重新组织的Sample Scenario如下:
1.打开Jazz.net: https://jazz.net/
2.打开Login页面
3.输入有效的登录数据
4.进入提问页面
5.填写提问内容
6.提交提问
7.验证提交是否成功
8.Logout
在重构脚本且给测试方法添加TestNG的Annotation之前,需要将Junit的Annotation去除掉,然后引入TestNG相关的Jar包:testng-6.*.jar,添加TestNG的Annotation。经过重构后,脚本片段如下:
▲图11 添加TestNG的Annotation
利用TestNG的优势,我们可以把一些初始化/ 收尾工作的测试方法用@BeforeSuite/@AfterSuite,@BeforeGroups/@AfterGroups, @BeforeTest/@AfterTest等标记, 也可以用一些属性控制它是否不管什么情况下都执行,定义其依赖的方法等。
例如:
▲图12 @BeforeSuite的用法
▲图13 @AfterSuite以及属性alwaysRun的使用
为了定义测试的执行顺序,需要建立xml文件,定义执行顺序。具体的XML中各个节点和属性的含义请参阅TestNG官方站点。
▲图14 用于定义执行顺序的XML文件
然后在main方法通过TestNG来读取xml文件以驱动测试的执行,代码片段如下:
▲图15 通过程序调用TestNG
运行测试用例之后,产生的TestNG的report如下:
我们在充分了解了TestNG的各种Annotation以及如何控制其执行行为,就可以把模块化的测试方法调度的更好,也可以做到很好的重用。