1. 封装常用函数。
automation.base.cons // 收集多处会使用到的常量, 当需要修改时,只需修改此处。
public class BaseCons{
public static final String DEBUG_MODE = "debug";
............
}
automation.base.core // 把常用操作收集到这个类中, 比如 获取环境变量, 浏览器类型等, 关于 抽象类可以参考 : http://blog.youkuaiyun.com/oh_mourinho/article/details/8216023
public abstract class Abstract {
@BeforeMethod(alwaysRun = true)
public void beforeMethod(ITestContext context, Method method){
try{
logger.info("[SetUp]Test Case ID:" + method.getName() + "====BaseBeforeMethod start");
//Get environment
logger.info("[SetUp]Test Case ID:" + method.getName() + "====current env: " + Util.getEnvStr());
//Get user type
String userType = null;
AutomationAnnotation annotation = method.getAnnotation(AutomationAnnotation.class);
if (annotation != null) {
userType = annotation.userType();
}
logger.info("[SetUp]Test Case ID:" + method.getName() + "====Get user type successfully.");
//Get user by type
UserBean user = UserManager.getUser(userType);
logger.info("[SetUp]Test Case ID:" + method.getName() + "====Get the user you want successfully.");
//Add user into TestObjectManger
logger.info("[SetUp]Test Case ID:" + method.getName() + "====Add the user into TestObjectManager...");
TestObjectManager.addUser(method.getName(), user);
logger.info("[SetUp]Add test case ID: " + method.getName() + ", user: "+TestObjectManager.getUser(method.getName())+" into TestObjectManager successfully.");
// Get browser info.
String browserType = Util.getBrowserType();
String browserVersion = Util.getBrowserVersion();
String platform = Util.getPlatform();
logger.info("[SetUp]Test Case ID:" + method.getName() + "====browserType: " + browserType + ", verison: "
+ browserVersion + ", platform: " + platform);
// Create driver by type
logger.info("[SetUp]Test Case ID:" + method.getName() + "====Creating driver...");
WebDriver driver = SeleniumUtil.createDriver(browserType, browserVersion, platform, method.getName());
logger.info("[SetUp]Test Case ID:" + method.getName() + "====Create driver successfully.");
logger.info("[SetUp]Test Case ID:" + method.getName() + "====Add driver into TestObjectManager...");
TestObjectManager.addDriver(method.getName(), driver);
logger.info("[SetUp]Test Case ID:" + method.getName() + "====Add driver into TestObjectManager successfully.");
// log node to help to debug on Grid
if (Util.isUseGrid()) {
logger.info("[SetUp]Test Case ID:" + method.getName() + "===current node: "
+ Util.GetNodeName(getDriver(method)));
}
String owner = this.getOwner(method);
TestObjectManager.addOwner(method.getName(), owner);
logger.info("[SetUp]Test Case ID:" + method.getName() + "====Add owner into TestObjectManager...");
// Maximize browser window
driver.manage().window().maximize();
String homeURL = Environment.getHomePageUrl();
logger.info("[SetUp]Test Case ID:" + method.getName() + "====Navigating to URL: " + homeURL);
driver.get(homeURL);
// if the URL is failed to forward, refresh the browser again
while (driver.getCurrentUrl().contains("undefined")) {
logger.info("[SetUp]Test Case ID:" + method.getName() + "====Re-Navigating to URL: " + homeURL);
driver.get(homeURL);
}
logger.info("[SetUp]Test Case ID:" + method.getName() + "====Navigate to URL: " + homeURL + " sucessfully.");
logger.info("[SetUp]Test Case ID:" + method.getName() + "====Loading test data...");
this.initTestData(context, method);
logger.info("[SetUp]Test Case ID:" + method.getName() + "====Load test data successfully.");
logger.info("[SetUp]Test Case ID:" + method.getName() + "====BaseBeforeMethod end");
} catch (Exception ex) {
logger.error("[SetUp]-{BaseBeforeMethod}-Test Case ID:" + method.getName() + "====" + ex.getMessage());
logger.error("[SetUp]-{BaseBeforeMethod}-Test Case ID:" + method.getName() + "====The stracktrace of this case====");
ex.printStackTrace();
Assert.fail("[SetUp]-{BaseBeforeMethod}-Test Case ID:" + method.getName() + "====ERROR:Fail to SetUp");
}
}
public String getOwner(Method method) {
String result = "";
AutomationAnnotation annotation = method.getAnnotation(AutomationAnnotation.class);
if (annotation != null) {
result = annotation.owner();
}
return result == null ? "" : result;
}
private void initTestData(ITestContext context, Method method) {
String testcaseId = method.getName();
List<TestDataBean> data = TestDataUtil.getTestData(testcaseId);
TestObjectManager.addTestData(method.getName(), data);
}
public UserBean getUser(Method method) {
return TestObjectManager.getUser(method.getName());
}
public String getTestDataByKey(String testCaseId, String parameter) {
List<TestDataBean> data = TestObjectManager.getTestData(testCaseId);
String env = Environment.getEnvironmentBean().getType().toLowerCase();
for (TestDataBean bean : data) {
if (bean.getParameter().equals(parameter)) {
Map<String, String> dataMap = bean.getDataMap();
return dataMap.get(env.toLowerCase());
}
}
return null;
}
public WebDriver getDriver(Method method) {
return TestObjectManager.getDriver(method.getName());
}
public void closeBrowserSession() throws IOException {
if(Environment.getDefaultPlatform().contains("WINDOWS")){
Runtime.getRuntime().exec("taskkill /F /IM ChromeDriver*");
Runtime.getRuntime().exec("taskkill /F /IM IEDriverServer*");
Runtime.getRuntime().exec("taskkill /F /IM Firefox.exe");
}else{
Runtime.getRuntime().exec("pkill chromedriver");
Runtime.getRuntime().exec("pkill firefox");
}
}
@AfterMethod(alwaysRun = true)
public void afterMethod(ITestContext context, Method method) {
logger.info("[TearDown]Test Case ID:" + method.getName() + "====BaseAfterMethod start");
try {
WebDriver driver = this.getDriver(method);
logger.info("[TearDown]Test Case ID:" + method.getName() + "====URL: " + driver.getCurrentUrl());
//Close windows one by one
Set<String> handles = driver.getWindowHandles();
for(int i=handles.size()-1;i>=0;i--){
driver.switchTo().window(handles.toArray()[i].toString());
driver.close();
}
//closeBrowserSession();
driver.quit();
logger.info("[TearDown]Test Case ID:" + method.getName() + "====All browsers quit successfully on Windows.");
} catch (Exception ex) {
logger.error("[TearDown]-{BaseAfterMethod}-Test Case ID:" + method.getName() + "====" + ex.getMessage());
logger.error("[TearDown]-{BaseAfterMethod}-Test Case ID:" + method.getName() + "====The stracktrace of this case====");
ex.printStackTrace();
logger.error("[TearDown]-{BaseAfterMethod}-Test Case ID:" + method.getName() + "====ERROR:Fail to TearDown");
}
logger.info("[TearDown]Test Case ID:" + method.getName() + "====BaseAfterMethod end");
}
}
}
}
}
automation.base.core.annotation //
@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface AutomationAnnotation {
public String owner() default ""; //test case owner
public String userType() default "";//select a user for testcase
}
automation.base.core.listener
public class BaseSuiteListener implements ISuiteListener{}
public class BaseTestCaseListener extends TestListenerAdapter{}
public class RetryAnalyzer implements IRetryAnalyzer{}
public class RetryListener implements IAnnotationTransformer {}
automation.base.core.report
public class DefaultReportSolution{}
public class PdfReport{}
automation.base.core.testdata
public class TestDataUtil {}
automation.base.core.users
public class UserManager {
private static Logger logger = Logger.getLogger(UserManager.class);
private static Set<UserBean> userSet = null;
private static List<UserBean> inUseList = null;
private static final Object collectionLock = new Object();
static {
List<UserBean> list = Environment.getAllUser();
if (list.size() == 0) {
list = get100MockUsers();
}
userSet = new HashSet<UserBean>(list.size());
inUseList = new ArrayList<UserBean>(list.size());
try {
userSet.addAll(list);
} catch (Exception ex) {
logger.info("[UserManager--init]: Init user failure ====" + ex.getMessage());
}
}
private static List<UserBean> get100MockUsers() {
List<UserBean> mockUsers = new ArrayList<UserBean>();
for (int i = 0; i < 100; i++) {
UserBean user = new UserBean();
user.setName(Integer.toString(i));
user.setPwd(Integer.toString(i));
user.setType("");
mockUsers.add(user);
}
return mockUsers;
}
public static UserBean getUser(String userType) {}