经过前面一篇的连接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.下一篇介绍,根据项目名称获取项目下的测试套件,和套件下的测试用例。