testNG優雅的使用注解讓你的測試項目開發更高效!


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測試


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM