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测试】获取:

最新文章

  1. 更改conda安装源镜像
  2. 消息智能路由组件SmartRoute
  3. Eclipse系列:如何断点调试web项目
  4. Oracle 数据集成的实际解决方案
  5. J2EE中文乱码处理
  6. 8个必备的PHP功能开发
  7. ajax post data 获取不到数据,注意 content-type的设置
  8. Makefile的几个赋值运算符(转:笔记)
  9. Top 100 Best Blogs for iOS Developers
  10. ksoap2- webservice
  11. R语言写2048游戏
  12. [原创]首次SDN比赛的记录-部分
  13. displaytag如何实现获取到每行的id字段的值。
  14. Kafka 1.0.0集群安装
  15. JS里面的装箱和拆箱操作
  16. Mysql中NUMERIC和DECIMAL类型区别比较
  17. Zookeeper-相关流程
  18. .NET 11 个 Visual Studio 代码性能分析工具
  19. as3.0两点之间简单的运动,斜着运动,任意两点
  20. 函数调用的四种方式 和 相关的 --- this指向

热门文章

  1. Python-in is == 区别
  2. python数据结构之图深度优先和广度优先实例详解
  3. P 4315 月下毛景树
  4. CRUD,分页,排序,搜索与AngularJS在MVC
  5. Java NIO:通道
  6. 高性能HTTP加速器Varnish--基础知识
  7. 自定义Antd Pro 默认元素
  8. ES异常处理-NoNodeAvailableException
  9. go 正则 爬取邮箱代码
  10. 一文读懂Redis常见对象类型的底层数据结构