Part One
开始学习Udemy上的一个课程Design Selenium Test framework from scratch-Architect level,随手写一些笔记。
课程第一部分主要在讲testNG,在项目上目前一直接触的是JUnit,用起来还比较方便,小结一下,用到了JUnit里以下特性:
- Category,进行test case分类,方便同一份代码在不同环境下选择执行不同的test case
- Rule,解决test case执行失败时,进行截图并上传至Jenkins
- Runner,解决执行中动态决定是否skip特定的test case
目前在课程中学习到testNG的以下特点:
- testNG本身是测试框架,功能比较丰富
- testNG在Eclipse上有插件支持,使用方便
- testNG可以使用testing.xml来控制测试执行控制,从上到下分了Suit -> test -> classes -> methods这样几个分层
- methods标签下可以使用include、exclude标签来包含或排除某些 method,也即test case
- method,也即test case命名的时候要遵循一个统一的规则,比如FunctionOneLogin(), FunctionTwoOpen()等,方便后续在选择执行的时候,用正则表达式筛选test case,例如name=”Fun.*”表示相应的class里所有以”Fun”开头的test case
Part Two
学习到第12节课程,了解到testNG的anotation有以下(and more):
- @BeforeSuite suite是testNG使用的xml文件中的一个概念,也许可以理解为最上层的一个测试用例套件,一个suite可以包含有多个test
- @BeforeTest test这里可以理解成一个测试模块(test module),一个test可包含多个测试类class
- @BeforeClass class是指测试类,BeforeClass用来标记在一整个class测试类里的所有测试方法执行之前优先执行
- @BeforeMethod method,就是一个测试用例,或者说是一个test类中的单个测试方法
- @Test 用来注释某个测试类里的方法是一个测试方法,也即测试用例
- @AfterMethod
- @AfterClass
- @AfterTest
- @AfterSuite
1 | <?xml version="1.0" encoding="UTF-8"?> |
补充一下,testNG中的xml还可以使用package标签,含义不言自明。
1 | <?xml version="1.0" encoding="UTF-8"?> |
Part Three
学习到18节,完成了testNG的部分,其中包括了以下testNG的特性:
- group,例如加上tag @Test(groups={“smoke”}),就表示这个test属于smoke group,可以属于多个group,然后相应的在xml文件中,做如下定义,即可使用group,这里可以include也可以exclude。
1 | <suite name="Test - 1"> |
- 定义test之间的依赖执行,例如加上tag @Test(dependsOnMethods={“Main03”}),即表示这个test依赖于另一个test Main03,将在其之后执行。
- 参数化,例如以下tag的定义,和xml里的定义,这样即可让Main03 test使用xml里定义的变量值。
1 | // 属于 com.main package里的 MainTest class |
1 | <suite name="My Tet Suite"> |
- @DataProvider特性,具体还是见代码
1 |
|
- Listeners特性,有点像JUnit里的TestWatcher,典型用法就是失败后截图,具体见代码..
1 | package com.main; |
1 | <?xml version="1.0" encoding="UTF-8"?> |