Java+Testlink实现接口自动化测试-4-获取项目信息和获取项目下测试计划

         经过前面一篇的连接Testlink环境和抽取代码成方法,以及把硬编码内容提取到配置文件。这样的思想或者做法,在我们自动化测试是必须要做的事情。好了,有了前面的基础,我们这篇继续来进行测试获取testlink的信息,并提取成方法,统一放TestlinkUtil.java文件里。

1.获取project信息

       在testlink java client api包中,首先获取到的是当前testlink下全部project,所以得到的是一个数组对象。在com.qa.tests包下,新建一个GetProjectInfo.java文件,直接来看下面的代码。

package com.testlink.tests;

import org.testng.annotations.Test;

import com.qa.util.TestlinkUtil;

import br.eti.kinoshita.testlinkjavaapi.TestLinkAPI;
import br.eti.kinoshita.testlinkjavaapi.model.TestProject;

public class GetProjectInfo {
	
	//创建一个testlinkapi对象
	TestLinkAPI api;
	
	@Test
	public void getProjectInfo() {
		
		//调用连接方法
		api = TestlinkUtil.connect();
		
		//得到当前testlink系统的所有project,返回类型是数组,所有需要用TestProject[]存储
		TestProject[] projects = api.getProjects();
		
		//遍历下数组
		for (int i = 0; i < projects.length; i++) {
			System.out.println(projects[i].getName()+ "...." + projects[i].getId());
		}
		
	}

}

运行结果:

[RemoteTestNG] detected TestNG version 6.14.3
2018-06-02 19:14:57 483 INFO  TestBase:28 - 正在读取配置文件...
Hello!
API_Automation....1
PASSED: getProjectInfo

       我本地testlink环境只有一个project,所以打印出来只有一个。从上面我们可以看出来,你在eclipse中输入api.g,然后看自动代码提示,发现没有单独获取一个project的方法。也就是说,你只能拿到一个project[]数组,我们需要遍历拿到其中一个project对象。

2.获取测试计划

       下面那举例,如何拿到我testlink那个项目的test plan的名称。测试类还是上面那个文件,修改代码如下。

package com.testlink.tests;

import org.testng.annotations.Test;

import com.qa.util.TestlinkUtil;

import br.eti.kinoshita.testlinkjavaapi.TestLinkAPI;
import br.eti.kinoshita.testlinkjavaapi.model.TestPlan;
import br.eti.kinoshita.testlinkjavaapi.model.TestProject;

public class GetProjectInfo {
	
	//创建一个testlinkapi对象
	TestLinkAPI api;
	
	@Test
	public void getProjectInfo() {
		
		//调用连接方法
		api = TestlinkUtil.connect();
		
		//得到当前testlink系统的所有project,返回类型是数组,所有需要用TestProject[]存储
		TestProject[] projects = api.getProjects();
		
		//已知已有API_Automation这个project名称,下面去根据它拿到projectid
		int projectId = 0;
		for (TestProject testProject : projects) {
			if("API_Automation".equals(testProject.getName())) {
				projectId = testProject.getId();
			}
		}
		
		//根据projectid来获取这个项目下所有的测试计划,参数projectid我可以通过projectname去拿到
		TestPlan[] plans = api.getProjectTestPlans(projectId);
		
		for (TestPlan testPlan : plans) {
			System.out.println(testPlan.getName());
		}
	}

}

运行结果:

[RemoteTestNG] detected TestNG version 6.14.3
2018-06-02 19:51:22 974 INFO  TestBase:28 - 正在读取配置文件...
Hello!
PlanA
PASSED: getProjectInfo

       上面的过程,我们通过project name拿到了这个project下的所有的test plan,上面获取的测试计划返回也是一个数组对象,也需要遍历。我这里把根据project name去得到projectId和project下所有测试计划代码抽取出来成方法,放TestlinUtil.java中。

package com.qa.util;

import java.net.MalformedURLException;
import java.net.URL;
import com.qa.base.TestBase;
import br.eti.kinoshita.testlinkjavaapi.TestLinkAPI;
import br.eti.kinoshita.testlinkjavaapi.model.TestPlan;
import br.eti.kinoshita.testlinkjavaapi.model.TestProject;


public class TestlinkUtil {
	
	/**
	 * 连接testlink方法
	 */
	public static TestLinkAPI connect() {
		
		TestBase base = new TestBase();
		
		String url = base.prop.getProperty("TestLinkUrl");
	    String devKey = base.prop.getProperty("DEVKEY");
	    TestLinkAPI api = null;
	     
	    URL testlinkURL = null;
	     
	    try {
	            testlinkURL = new URL(url);
	    } catch ( MalformedURLException mue )   {
	            mue.printStackTrace( System.err );
	            System.exit(-1);
	    }
	     
	    try {
	    	
	           api = new TestLinkAPI(testlinkURL, devKey);
	           
	    } catch( Exception te) {
	            te.printStackTrace( System.err );
	            System.exit(-1);
	    }
	     
	    System.out.println(api.ping());
		return api;
	}
	
	/**
	 * 根据项目名称字符串得到项目id,方便下一个方法(得到项目测试计划)调用
	 * @param api,连接对象,几乎这个类大部分方法都需要这个对象
	 * @param projectName
	 * @return, 返回项目ID号
	 */
	public static int getProjectIdByName(TestLinkAPI api, String projectName) {
		
		//根据项目名称得到这个项目
		TestProject project = api.getTestProjectByName(projectName);
		int projectId = project.getId();
		return projectId;
	}
	
	/**
	 * 根据项目id得到项目下所有的测试计划
	 * @param api
	 * @param ProjectId
	 * @return,测试计划数组对象
	 */
	public static TestPlan[] getAllPlanUnderProject(TestLinkAPI api, int ProjectId) {
		
		TestPlan[] plans = api.getProjectTestPlans(ProjectId);
		return plans;
	}
	
}

在com.testlink.tests包下,再新建一个类用来测试封装的得到项目下测试计划。

package com.testlink.tests;

import org.testng.annotations.Test;

import com.qa.util.TestlinkUtil;

import br.eti.kinoshita.testlinkjavaapi.TestLinkAPI;
import br.eti.kinoshita.testlinkjavaapi.model.TestPlan;

public class GetTestPlans {
	
	TestLinkAPI api;
	
	@Test
	public void getTestPlans() {
		api = TestlinkUtil.connect();
		
		int projectId = TestlinkUtil.getProjectIdByName(api, "API_Automation");
		
		//得到测试计划数组
		TestPlan[] plans = TestlinkUtil.getAllPlanUnderProject(api, projectId);
		
		//遍历数组
		for (TestPlan testPlan : plans) {
			System.out.println(testPlan.getName());
		}
	}

}

运行结果:

[RemoteTestNG] detected TestNG version 6.14.3
2018-06-02 20:14:04 922 INFO  TestBase:28 - 正在读取配置文件...
Hello!
PlanA
PASSED: getTestPlans

 个人建议:

      上面我们获取的project和testplan都是一个数组对象,我建议,在实际testlink环境中,你在一个project下只创建一个Plan就好。而且,我接下来的项目代码中,不再需要获取plan信息。我们重点介绍获取TestSuite和TestCase以及Steps.下一篇介绍,根据项目名称获取项目下的测试套件,和套件下的测试用例。



猜你喜欢

转载自blog.csdn.net/u011541946/article/details/80548866