testNG大部分是通過xml配置測試類和監聽類
- 但是這種方法就像傳統的spring框架一樣需要引入大量的xml配置資訊,而且在各層之間也需要通過new物件傳遞。如果testNG能使用註解注入bean物件,那麼完成一個自動化專案的開發週期必然會縮短很多。於是在spring官網看到支援TestNG Support Classes。大致說明如下:
官方文件地址
可以通過抽象類AbstractTestNGSpringContextTests,實現bean查詢或測試整個上下文的狀態。
現在大部分後端專案是springboot框架,下面就以springboot框架結合testNG實現註解注入bean例項介紹:
- 首先想要通過註解注入bean物件,需要基礎的測試類繼承抽象AbstractTestNGSpringContextTests類,同時基礎測試類還需要加上@SpringBootTest註解和通用@Component註解,這樣就能在各層通過@Component通用註解實現bean物件的傳遞。
- 基礎測試類注入如下:
@Slf4j
@Component
@SpringBootTest
public class BaseTest extends AbstractTestNGSpringContextTests{
/**
* 驅動基類
*/
@Autowired
private BaseChromeDriver baseDriver;
/**
* 驅動
* 對外暴露
*/
public WebDriver driver;
}
- testcase層使用註解注入元素操作層物件,示例如下:
@Listeners(com.iwebui.listener.AssertListener.class)
public class BaiduLoginCase extends BaseTest {
@Autowired
private BaiDuCaseEasypoiHandle baiDuCaseEasypoiHandle;
@Autowired
BaiDuCaseJpaHandle baiDuCaseJpaHandle;
/**
* easypoi實現excel資料驅動
*/
@Severity( SeverityLevel.NORMAL)
@Description("百度登入測試示例--使用easypoi實現")
@Test
public void baibaiDuCaseEasypoiHandle(){
//初始化ticketElement,獲取驅動
baiDuCaseEasypoiHandle.serchBaidu(driver);
//excel資料驅動測試-使用easypoi實現
baiDuCaseEasypoiHandle.loginCase(driver);
}
/**
* JPA實現資料庫資料驅動示例
*/
@Severity( SeverityLevel.NORMAL)
@Description("百度登入測試示例--使用springDataJPA實現")
@Test
public void baiDuCaseJpaHandle(){
//進入被測網址
baiDuCaseJpaHandle.serchBaidu(driver);
//資料庫驅動,使用jpa實現
baiDuCaseJpaHandle.getAll(driver);
}
}
- 元素操作層同樣可以使用註解注入dao層物件,示例如下:
@Component
public class BaiDuCaseJpaHandle extends BaseBrowser {
@Autowired
private BaiDuLoginDao baiDuLoginDao;
@Autowired
private BaiDuUrlDao baiDuUrlDao;
public void serchBaidu(WebDriver driver){
log.info("開始進入被測頁面");
enterPage(driver,AccountData.BAIDUURL);
}
public List<Logincase> getAll(WebDriver driver) {
UIElementUtil.clickButton("百度登入","點選右上角登入按鈕",driver);
UIElementUtil.clickButton("百度登入","點選賬號密碼登入按鈕",driver);
List<Logincase> logincaseList = baiDuLoginDao.findAll();
List<UrlMessage> urlMessageList = baiDuUrlDao.findAll();
//2.使用自定義寫的sql方法運算元據庫
Map<Long, UrlMessage> map = new HashMap<>();
urlMessageList.forEach(urlMessage -> {
map.put(urlMessage.getId(), urlMessage);
});
logincaseList.forEach(logincase -> {
String address = "";
String actual = "";
if (logincase.getCaseStatus().equals(1)) {
UrlMessage urlMessage = map.get(logincase.getUrlId());
if (urlMessage != null) {
address = urlMessage.getAddress();
}
if (!address.equals("")) {
baiDuLoginDao.updateLogincase(address, logincase.getId());
}
UIElementUtil.sendInput("百度登入","登入賬號",driver,logincase.getName());
UIElementUtil.sendInput("百度登入","登入密碼",driver,logincase.getPwd());
UIElementUtil.clickButton("百度登入","登入按鈕",driver);
actual = driver.findElement(AccountData.TIPS).getText();
baiDuLoginDao.updateActual(actual,logincase.getId());
}else {
UrlMessage urlMessage = map.get(logincase.getUrlId());
address = urlMessage.getAddress();
baiDuLoginDao.updateLogincase(address, logincase.getId());
}
});
return null;
}
}
- 由於使用springDataJPA大大簡化了書寫sql語句,直接繼承JpaRepository介面即可。
@Repository
public interface BaiDuUrlDao extends JpaRepository<UrlMessage, Long> {
}
另外大多數testNG配置檔案也是通過xml、config.properties來完成配置檔案的載入,這種配置流程繁瑣。而yaml檔案的配置更簡單上手,這裡通過yaml配置檔案完成配置引數的載入。testNG通過yaml檔案配置如下:
- 通過key|value形式載入配置檔案,編寫載入工具類如下:
public class LoadStaticConfigUtil {
public static Object getCommonYml(Object key){
Resource resource = new ClassPathResource("/application-dev.yml");
Properties properties = null;
try {
YamlPropertiesFactoryBean yamlFactory = new YamlPropertiesFactoryBean();
yamlFactory.setResources(resource);
properties = yamlFactory.getObject();
} catch (Exception e) {
e.printStackTrace();
return null;
}
return properties.get(key);
}
}
-
yaml配置資訊如下:
-
然後就可以通過載入配置檔案工具類,傳入key即可
這樣就完成了yaml獲取配置資訊的過程,更多技術分享可以關注[Coding測試]公眾號。
更多測試技術分享、學習資源以及一些其他福利可關注公眾號:【Coding測試】獲取: