testNG優雅的使用註解讓你的測試專案開發更高效!

Coding測試發表於2020-11-03

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測試】獲取:
Coding測試

相關文章