Java语言搭建接口自动化框架学习七(多接口批量执行)

ExcelUtils类新增getApiAndCaseByApiId方法

把2个list对象api、case转成指定格式的二维数组,1个api对应多个case,可以通过apiid来实现多接口批量执行

	//返回二维数组<api、case>,根据apiid找到对应的apiinfo和caseinfo
	public static Object[][] getApiAndCaseByApiId(String apiId) {
		//所有的接口信息保存到apiList中
		List<ApiInfo> apiList = getElement(0, 1, ApiInfo.class);
		//所有的接口信息保存到caseList中
		List<CaseInfo> caseList = getElement(1, 1, CaseInfo.class);
		
		//指定apiid对应的api对象(唯一的)保存到wantApi中
		ApiInfo wantApi = null;
		//指定apiid对应的所有case对象保存到wantCase中
		ArrayList<CaseInfo> wantCase = new ArrayList<CaseInfo>();
		
		for(ApiInfo api : apiList) {
			if(apiId.equals(api.getApiId())) {
				wantApi = api;
				break;
			}
		}
		
		for (CaseInfo c : caseList) {
			if(apiId.equals(c.getApiId())) {
				wantCase.add(c);
			}
			
		}
		
		Object[][] datas = new Object[wantCase.size()][2];
		for(int i=0;i<datas.length;i++) {
			datas[i][0] = wantApi;
			datas[i][1] = wantCase.get(i);	
		}
		
		return datas;
		
	}

RegisterCase类修改

public class RegisterCase {
	
	@Test(dataProvider = "datas")
	//修改test方法入参,传api和case对象就可以不关注2个对象的具体属性变化
	public void test(ApiInfo api,CaseInfo c) {
		HttpUtils.call(api.getApiUrl(),api.getApiMethod(),c.getParams());
	}
	
	@DataProvider
	public Object[][] datas(){
		//假设注册接口的在接口信息excel里的ApiId=1
		Object[][] datas = ExcelUtils.getApiAndCaseByApiId("1");
		return datas;
	}


}

新增LoginCase类

		//其他写法和RegisterCase类一致,只需要修改ApiId即可。假设登录接口的在接口信息excel里的ApiId=2
		Object[][] datas = ExcelUtils.getApiAndCaseByApiId("2");

testng.xml里配置多接口案例执行

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="接口自动化" parallel="false">  
  <test name="用户模块">
    <classes>
      <class name="testcase.RegisterCase"/>
      //新增了登录接口,就新增一行class
      <class name="testcase.LoginCase"/>
    </classes>
  </test> 
</suite> 

通过testng方式运行程序,可查看结果
在这里插入图片描述

优化:所有的api和case信息只需要读取一次即可

把getApiAndCaseByApiId方法里的apiList和caseList移出,并且放在ExcelUtils类中做成员变量

	public static List<ApiInfo> apiList;
	public static List<CaseInfo> caseList;

在任何一个案例类中增加BeforeSuite注解实现执行整个测试套件前读取整个接口和案例信息类

	@BeforeSuite
	private void init() {
		ExcelUtils.apiList = ExcelUtils.getElement(0, 1, ApiInfo.class);
		ExcelUtils.caseList = ExcelUtils.getElement(1, 1, CaseInfo.class);

	}

注意:caseList和wantCase这2个list命名问题,一开始都定义成caseList导致运行报错
再次通过testng方式运行程序,查看程序运行是否ok

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值