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

testNG优雅的使用注解让你的测试项目开发更高效!的更多相关文章

  1. testNG官方文档翻译-2 注解

    这里是一份TestNG中的可用注解及其属性的概述. 一.用于一个TestNG类的信息配置的注解: @BeforeSuite:被BeforeSuite注解的方法将在其所在suite中的所有test运行之 ...

  2. Spring + Spring MVC + Hibernate项目开发集成(注解)

    在自己从事的项目中都是使用xml配置的方式来进行的,随着项目的越来越大,会发现配置文件会相当的庞大,这个不利于项目的进行和后期的维护.于是考虑使用注解的方式来进行项目的开发,前些日子就抽空学习了一下. ...

  3. MyBatis 项目开发中是基于 XML 还是注解?

    只要你对 MyBatis 有所认识和了解,想必知道 MyBatis 有两种 SQL 语句映射模式,一种是基于注解,一种是基于XML. 基于 XML <mapper namespace=" ...

  4. Karmada v1.3:更优雅 更精准 更高效

    摘要:最新发布的1.3版本中,Karmada重新设计了应用跨集群故障迁移功能,实现了基于污点的故障驱逐机制,并提供平滑的故障迁移过程,可以有效保障服务迁移过程的连续性(不断服). 本文分享自华为云社区 ...

  5. Testng之使用@DataProvider注解做数据驱动【转】

    原文:http://www.jianshu.com/p/8e333a0ec42a 前两天学了一下@DataProvider,今天有时间总结一下.testng很强大,提供了很多注解,其中利用@DataP ...

  6. 自动化测试框架selenium+java+TestNG——TestNG注解、执行、测试结果和测试报告

    TestNG是java的一个测试框架,相比较于junit,功能更强大和完善,我是直接学习和使用的TestNG就来谈下TestNG的一些特点吧. TestNG的特点 注解 TestNG使用Java和面向 ...

  7. testng失败截图,注解方式调用。

    今天一整天都在研究testng失败截图的方法,参考网上的前辈们的资料,加上自己的理解,终于搞出来了. package com.dengnapianhuahai; /** * 自定义注释 * */ im ...

  8. testng基础知识:注解的执行顺序

    1. 单类,无继承父子关系 code: public class basicTest { @BeforeSuite(alwaysRun = true) public void beforeSuite_ ...

  9. TestNG @Factory与 @DataProvider 结合使用进行参数化测试

    简介 TestNG是一个设计用来简化广泛的测试需求的测试框架,从单元测试到集成测试,这个是TestNG设计的出发点,不仅仅是单元测试,而且可以用于集成测试.设计目标的不同,对比junit的只适合用于单 ...

随机推荐

  1. 深入了解Redis(6)-持久化原理

    Redis是一个内存数据库,数据保存在内存中.但我们都知道存储在内存中的数据会因为外部因素而丢失,所以Redis会把数据持久化到磁盘中,至于是如何持久化呢? 一.RDB 1.手动触发 save:该命令 ...

  2. 剑指offer-递归和循环

    1. 斐波那契数列 解: 没啥好说的了,直接上高效的滚动迭代解法.矩阵解法和特征根解法这里不讨论了. class Solution: def Fibonacci(self, n): # write c ...

  3. 基础篇:深入解析JAVA注解机制

    目录 java实现注解的底层原理和概念 五种元注解详解 使用动态代理机制处理注解 spring.AOP和注解机制 (题外)@FunctionalInterface原理介绍 欢迎指正文中错误 关注公众号 ...

  4. 059 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 06 增强型for循环

    059 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 06 增强型for循环 本文知识点:增强型for循环 增强型for循环格式 案例练习增强型for循环 数组名字 ...

  5. 017 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 11 变量综合案例

    017 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 11 变量综合案例 本文知识点:变量 相同类型的变量可以一次同时定义多个 例:可以一行代码同时定义2个变量x ...

  6. CentOS openssh升级到openssh-7.2版本

    查看现在的版本SSH -V 一.准备 备份ssh目录(重要) cp -rf /etc/ssh /etc/ssh.bak [ 可以现场处理的,不用设置 安装telnet,避免ssh升级出现问题,导致无法 ...

  7. springcloud学习入门

    Springcloud入门学习笔记 1. 项目初始化配置 1. 1. 新建maven工程 使用idea创建maven项目 1. 2. 在parent项目pom中导入以下依赖 <parent> ...

  8. 解决FAT32格式U盘安装Windows 10时的报错(错误代码:0x8007000D)

    一.现象描述 使用UltraISO软碟通将 Windows 10 version 1909 刻录到U盘内来安装系统. 从U盘启动安装过程中,报错如下: "Windows 无法打开所需的文件 ...

  9. 多测师讲解python _函数的传递_高级讲师肖sir

    题目:   要求1.通过函数来实现       2.引用函数传递方法        3.引用返回值   有一个登录系统:账号admin  密码123456 验证码abc123    账号.密码.验证码 ...

  10. 浅谈MircoPython---ESP8266

    一.连接WIFI 在Putty会话窗口输入 >>>help() 打印的消息会告诉你如何连接WIFI import network sta_if = network.WLAN(netw ...