Commit 157c5001 authored by xiongjunyi's avatar xiongjunyi

[modify:1.增加循环控制器,可设置用例循环执行次数,增加对应切面类

        2.测试数据增加数据说明列,可明确是什么场景
        3.优化空指针等异常的日志打印
        4.主用例执行方法增加控制器部分代码
        5.配置文件增加bean声明]
parent d14767df
This diff is collapsed.
package com.miya.manning.aspect;
import com.miya.manning.framework.util.ToolUtil;
import org.apache.log4j.Logger;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
......@@ -9,9 +8,9 @@ import org.aspectj.lang.annotation.Aspect;
import java.util.Map;
@Aspect
public class IFConditionAspect {
public class IfConditionAspect {
private static final Logger log = Logger.getLogger(IFConditionAspect.class);
private static final Logger log = Logger.getLogger(IfConditionAspect.class);
/*@Around(value = "execution(* com.miya.manning.vo.conditions.IFCondition.execute(TestCase,List<Script>,String,String,String,Map[]))")*/
@Around(value = "execution(* com.miya.manning.vo.conditions.IFCondition.execute(..))")
public Object ifConditionAspect(ProceedingJoinPoint pjp) throws Throwable {
......@@ -30,14 +29,17 @@ public class IFConditionAspect {
log.info("控制器比较类型为:相等");
if(string_var_map.containsKey(conditions)){
flag = string_var_map.get(conditions).equals(expect);
log.info("控制器条件值为:" + string_var_map.get(conditions) + "," + "比较值为:" + expect);
log.info("控制器条件判断结果为:" + flag);
}
if(int_var_map.containsKey(conditions)){
flag = int_var_map.get(conditions).toString().equals(expect);
log.info("控制器条件值为:" + int_var_map.get(conditions).toString() + "," + "比较值为:" + expect);
log.info("控制器条件判断结果为:" + flag);
}
if(res_map.containsKey(conditions)){
flag = res_map.get(conditions).equals(expect);
log.info("控制器条件值为:" + res_map.get(conditions) + "," + "比较值为:" + expect);
log.info("控制器条件判断结果为:" + flag);
}else{
log.info("变量集中未匹配到变量:" + conditions + ",不执行用例");
......@@ -52,14 +54,17 @@ public class IFConditionAspect {
log.info("控制器比较类型为:不等");
if(string_var_map.containsKey(conditions)){
flag = !string_var_map.get(conditions).equals(expect);
log.info("控制器条件值为:" + string_var_map.get(conditions) + "," + "比较值为:" + expect);
log.info("控制器条件判断结果为:" + flag);
}
if(int_var_map.containsKey(conditions)){
flag = !int_var_map.get(conditions).toString().equals(expect);
log.info("控制器条件值为:" + int_var_map.get(conditions).toString() + "," + "比较值为:" + expect);
log.info("控制器条件判断结果为:" + flag);
}
if(res_map.containsKey(conditions)){
flag = !res_map.get(conditions).equals(expect);
log.info("控制器条件值为:" + res_map.get(conditions).toString() + "," + "比较值为:" + expect);
log.info("控制器条件判断结果为:" + flag);
}else{
log.info("变量集中未匹配到变量:" + conditions + ",不执行用例");
......
package com.miya.manning.aspect;
import org.apache.log4j.Logger;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import java.util.Map;
@Aspect
public class LoopConditionAspect {
private static final Logger log = Logger.getLogger(LoopConditionAspect.class);
/*@Around(value = "execution(* com.miya.manning.vo.conditions.IFCondition.execute(TestCase,List<Script>,String,String,String,Map[]))")*/
@Around(value = "execution(* com.miya.manning.vo.conditions.LoopCondition.execute(..))")
public Object WhileConditionAspect(ProceedingJoinPoint pjp) throws Throwable {
log.info("开始执行循环控制器切面方法...");
Object res = null ;
boolean flag = true;//是否执行标志
Object[] args = pjp.getArgs();
String conditions = (String)args[2];
//String expect = (String)args[3];
//String compareType = (String)args[4];
Map[] maps = (Map[])args[5];
Map<String,String> string_var_map = maps[0];
Map<String,Integer> int_var_map = maps[1];
Map<String,String> res_map = maps[2];
Integer times = Integer.valueOf(conditions);
log.info("开始执行目标方法,一共需要执行" + times + "次");
while(times>0){
pjp.proceed();
times--;
log.info("目标方法执行结束,剩余" + times + "次");
}
//无论目标方法是否执行,最外层都不需要再执行了
res = true;
return res;
}
}
......@@ -2,7 +2,7 @@ package com.miya.manning.enums;
public enum ConditionType {
IF_CONDITION("IF","如果控制器"),
WHILE_CONDITION("WHILE","循环控制器");
LOOP_CONDITION("LOOP","循环控制器");
private String type;
......
......@@ -2,11 +2,15 @@ package com.miya.manning.framework.util;
import com.miya.manning.enums.DataRefTypeEnum;
import com.miya.manning.framework.util.dbutil.MysqlUtil;
import com.miya.manning.test.flow.order.Express;
import com.miya.manning.vo.conditions.Condition;
import com.miya.manning.vo.scripts.Script;
import com.miya.manning.vo.testcase.TestCase;
import org.apache.log4j.Logger;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
......@@ -20,11 +24,9 @@ import java.util.stream.Collectors;
public class TestCaseUtil {
public static void setLogger(Logger logger) {
TestCaseUtil.logger = logger;
}
static Logger logger ;
public static Logger logger = Logger.getLogger(TestCaseUtil.class);;
/**
* 获取一组用例的主要信息,如接口名,方法类型等
* @return 返回一个List<TestCase>对象
......@@ -38,6 +40,7 @@ public class TestCaseUtil {
for(int j = 1 ; j< sheet.getPhysicalNumberOfRows();j++){
XSSFRow eachrow = sheet.getRow(j);
if(!ExcelUtil.IsRowEmpty(eachrow)){
//如果该行不是空,才建立Testcase对象
TestCase ts = new TestCase();
......@@ -74,6 +77,9 @@ public class TestCaseUtil {
for(int j = 1 ; j< sheet.getPhysicalNumberOfRows();j++){
XSSFRow eachrow = sheet.getRow(j);
if(!ExcelUtil.IsRowEmpty(eachrow)){
for(int p = 0 ; p< eachrow.getLastCellNum(); p++){
eachrow.getCell(p).setCellType(Cell.CELL_TYPE_STRING);//每个字段都处理成纯文本
}
//如果该行不是空,才建立Testcase对象
Script script = new Script();
......@@ -97,10 +103,14 @@ public class TestCaseUtil {
for(int j = 1 ; j< sheet.getPhysicalNumberOfRows();j++){
XSSFRow eachrow = sheet.getRow(j);
if(!ExcelUtil.IsRowEmpty(eachrow)){
for(int p = 0 ; p< eachrow.getLastCellNum(); p++){
eachrow.getCell(p).setCellType(Cell.CELL_TYPE_STRING);//每个字段都处理成纯文本
}
//如果该行不是空,才建立Testcase对象
Condition condition = new Condition();
//按照用例约定格式,依次给Testcase对象各属性赋值
condition.setCondition_name(eachrow.getCell(0) == null ? "" : eachrow.getCell(0).toString());//设置控制器名称
condition.setCondition_type(eachrow.getCell(1, Row.RETURN_NULL_AND_BLANK) == null ? "" : eachrow.getCell(1).toString());//设置控制器类型
condition.setCondition_param(eachrow.getCell(2, Row.RETURN_NULL_AND_BLANK) == null ? "" : eachrow.getCell(2).toString());//设置控制器参数
......
......@@ -4,9 +4,6 @@ import com.miya.manning.enums.ConditionType;
import com.miya.manning.enums.ScriptType;
import com.miya.manning.vo.conditions.Condition;
import com.miya.manning.vo.conditions.ExcuteableCondition;
import com.miya.manning.vo.conditions.IFCondition;
import com.miya.manning.vo.conditions.WhileCondition;
import com.miya.manning.vo.scripts.ExcuteableScript;
import com.miya.manning.vo.scripts.JavaScript;
import com.miya.manning.vo.scripts.SSHScript;
import com.miya.manning.vo.scripts.Script;
......@@ -74,8 +71,8 @@ public class ToolUtil {
log.info("开始执行如果控制器:" + cd.getCondition_name());
flag = ifCondition.execute(testCase,scripts,condition,expect,compare_type,var_maps);
}
if(ConditionType.WHILE_CONDITION.getType().equals(cd.getCondition_type())){
ExcuteableCondition whileCondition = (ExcuteableCondition) ac.getBean("whileCondition");
if(ConditionType.LOOP_CONDITION.getType().equals(cd.getCondition_type())){
ExcuteableCondition whileCondition = (ExcuteableCondition) ac.getBean("loopCondition");
log.info("开始执行循环控制器:" + cd.getCondition_name());
flag = whileCondition.execute(testCase,scripts,condition,expect,compare_type,var_maps);
}
......
......@@ -47,21 +47,23 @@ public class Express {
@DataProvider(name = "ex")
public Object[][] Parameter() throws RuntimeException {
public Object[][] Parameter(){
/*return new Object[][]{
{1,10, "200", "null", null},//查询券列表
{2,10, "200", "null", null},//查询券列表第二页
//{ "200", "null", null},//
};*/
Object[][] testcases = null;
try {
Scripts = TestCaseUtil.GetScripts(script_path);
Conditions = TestCaseUtil.GetConditions(condition_path);
TestCaseUtil.setLogger(logger);
testcases = TestCaseUtil.GetMain(path);
} catch (RuntimeException e) {
logger.error(e.getMessage());
logger.error("error:" , e );
}
return TestCaseUtil.GetMain(path);
return testcases;
}
@BeforeClass
......
......@@ -52,7 +52,6 @@ public class Mainprocess {
};*/
try {
Scripts = TestCaseUtil.GetScripts(script_path);
TestCaseUtil.setLogger(logger);
} catch (RuntimeException e) {
logger.error(e.getMessage());
}
......
......@@ -11,11 +11,11 @@ import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class WhileCondition implements ExcuteableCondition{
public class LoopCondition implements ExcuteableCondition{
@Override
public boolean execute(TestCase testCase,List<Script> Scripts ,String condition, String expect, String compareType, Map... var_maps) throws Exception {
String url_start = "https://cs2-uat.mannings.com.cn/";
Logger logger = Logger.getLogger(WhileCondition.class);
Logger logger = Logger.getLogger(LoopCondition.class);
String script_name = testCase.getScript_name();
if(!script_name.isEmpty()){
List<Script> execScriptList = Scripts.stream().filter(x -> x.getScript_name().equals(testCase.getScript_name())).collect(Collectors.toList());
......
......@@ -21,9 +21,11 @@
</bean>
<bean id="ifCondition" class="com.miya.manning.vo.conditions.IFCondition">
</bean>
<bean id="whileCondition" class="com.miya.manning.vo.conditions.WhileCondition">
<bean id="loopCondition" class="com.miya.manning.vo.conditions.LoopCondition">
</bean>
<bean id="ifConditionAspect" class="com.miya.manning.aspect.IFConditionAspect">
<bean id="ifConditionAspect" class="com.miya.manning.aspect.IfConditionAspect">
</bean>
<bean id="loopConditionAspect" class="com.miya.manning.aspect.LoopConditionAspect">
</bean>
<bean id="scriptFactory" class="com.miya.manning.vo.scripts.ScriptFactory"></bean>
<bean id="testCase" class="com.miya.manning.vo.testcase.TestCase"></bean>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment