testng dataprovider接入msyql db初始化参数遇见的问题记录
Posted 哈拉少
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了testng dataprovider接入msyql db初始化参数遇见的问题记录相关的知识,希望对你有一定的参考价值。
自动化接口测试中由于原来用excel时,复制粘贴比较麻烦,且修改参数需要修改工程上传git.
把工程改了一下,dataprovider的参数取值自数据库。
- 遇到的问题,测试主类获取 配置项和 sql maaper autowire没有问题,但是test method使用dataprovider时,在dataprovider提供的class中总是无法加载参数和mapper实例。
解决方案:
//author: dongyl
public class SqlDataProvider implements Runnable {
@Autowired
private CaseParamMapper caseParamMapper;
private Logger logger = LoggerFactory.getLogger(this.getClass());
@Override
public void run() {
// 也可在需要的地方获取bean
caseParamMapper = ApplicationContextProvider.getBean(CaseParamMapper.class);
}
@DataProvider(name = "getDbCaseData")
public Object[][] run(ITestContext context, Method method) {
run();
try {
..
List<CaseParamsModel> paramsList = caseParamMapper.selectParamsByKeys(cprm);
..
//尼玛终于可以使用mapper了。
}
package lli.qa.util;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
/**
* 手动获取bean
*/
@Component
public class ApplicationContextProvider implements ApplicationContextAware {
/**
* 上下文对象实例
*/
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
/**
* 获取applicationContext
* @return
*/
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
/**
* 通过name获取Bean
* @param name
* @return
*/
public static Object getBean(String name){
return getApplicationContext().getBean(name);
}
/**
* 通过Class获取Bean
* @param clazz
* @param <T>
* @return
*/
public static <T> T getBean(Class<T> clazz){
return getApplicationContext().getBean(clazz);
}
/**
* 通过name,以及Clazz返回指定的Bean
* @param name
* @param clazz
* @param <T>
* @return
*/
public static <T> T getBean(String name,Class<T> clazz){
return getApplicationContext().getBean(name,clazz);
}
}
- 做数据初始化时,新建了个sqlfile文件夹,做.sql文件的初始化,发现尼玛老是找不到路径。
di.execDataInit(drvierClass,mysqlurl,username,password, "ew-account-init.sql");
public void execDataInit(String driverClass,String mysqlurl,String username,String password,String FileName) {
try{
ExcuteSqlTool est = new ExcuteSqlTool();
Connection conn = est.executeSql(driverClass,mysqlurl,username,password, FileName);
est.closeConn(conn);
}catch (Exception e) {
e.printStackTrace();
}
}
public Connection executeSql(String driverClassName,String url,String username,String password, String sqlFilePath ){
try {
Class.forName(driverClassName);
connection = DriverManager.getConnection(url, username, password);
} catch (Exception e) {
e.printStackTrace();
}
ClassPathResource rc = new ClassPathResource(sqlFilePath);
EncodedResource er = new EncodedResource(rc, "utf-8");
ScriptUtils.executeSqlScript(connection, er);
return connection;
}
解决方案:
resource文件需要加入 pom文件标志资源文件夹
<profiles>
<profile>
<id>SQLFILE</id>
<properties>
<env>SQLFILE</env>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<build>
<resources>
<resource>
<directory>${project.basedir}/src/test/resources/sqlfile</directory>
</resource>
</resources>
</build>
</profile>
</profiles>
以上是关于testng dataprovider接入msyql db初始化参数遇见的问题记录的主要内容,如果未能解决你的问题,请参考以下文章