前面我们学会了,根据项目名称去拿到项目下测试计划,前面文章结尾也说了,我们运行用例方式不走Plan方式,而是走项目下测试套件的形式。一个测试套件,在Testlink中直观体现就是一个文件夹,这个文件夹下用来存储多个测试用例。本篇,详细介绍获取项目下测试套件和测试用例的过程。
1.在Testlink创建如下结构
我在API_Automation这个项目下,新建一个了一个测试套件和两个测试用例。测试用例,我们暂且只看测试用例名称,具体测试用例步骤如何写,后面文章介绍。
这里我们来一个约定,一个测试项目下可以有多个TestSuite,例如上面Test_Suite1就是一个测试套件。我们可以创建多个测试套件去存储几百个用例。测试套件一般就是项目中模块的名称。我们的约定就是,我们不能在Test_Suite1下再创建一个测试套件。通过前面我们知道,获取的项目和测试计划,返回都是数组。这里获取TestSuite都是按照层次来获取,也是数组对象。我们这里约定,只有一层测试套件,不搞测试套件下嵌套测试套件。否则,会给我们设计的框架增加很多麻烦和复杂度。
2.获取项目下顶层测试套件数组
这个项目下顶层测试套件就是指上面Test_Suite1这样的例子,记住没有嵌套,只有一个顶层的测试用例集。当然,也可以通过plan来获取测试计划下的测试套件集合。这里,按照我的方式来实现即可。继续先来写一个测试类,然后抽取成方法。在com,testlink.tests包下新建GetTestSuites.java文件
package GetTestSuites;
import org.testng.annotations.Test;
import com.qa.util.TestlinkUtil;
import br.eti.kinoshita.testlinkjavaapi.TestLinkAPI;
import br.eti.kinoshita.testlinkjavaapi.model.TestSuite;
public class GetTestPlans {
//创建一个testlinkapi对象
TestLinkAPI api;
@Test
public void getPlans() {
api = TestlinkUtil.connect();
int projectId = TestlinkUtil.getProjectIdByName(api, "API_Automation");
TestSuite[] suites = api.getFirstLevelTestSuitesForTestProject(projectId);
for (TestSuite testSuite : suites) {
System.out.println(testSuite.getName());
}
}
}
运行结果:
[RemoteTestNG] detected TestNG version 6.14.3
2018-06-02 20:45:12 425 INFO TestBase:28 - 正在读取配置文件...
Hello!
Test_Suite1
PASSED: getPlans
我的Testlink环境只有一个测试套件,你可以在你环境中创建多个顶层测试套件,来测试这个代码是不是有效,是不是可以拿到全部的测试套件名称。接下来,我们把这个方法抽取放TestlinkUtil.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;
import br.eti.kinoshita.testlinkjavaapi.model.TestSuite;
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;
}
/**
* 根据项目名称获取项目下顶层的测试套件数组对象
* @param api
* @param projectName
* @return
*/
public static TestSuite[] getFirstLeverTestSuite(TestLinkAPI api, String projectName) {
int projectId = TestlinkUtil.getProjectIdByName(api, projectName);
TestSuite[] suites = api.getFirstLevelTestSuitesForTestProject(projectId);
return suites;
}
}
这个封装的方法就不写测试用例了,下面介绍根据测试套件获取测试用例数数组。之后写测试用例会覆盖到这个封装方法。3.获取测试用例集合
下面介绍根据测试套件名称去获取测试用例集合的过程。在com.testlink.tests包下新建GetTestCase.java文件
package GetTestCase;
import org.testng.annotations.Test;
import com.qa.util.TestlinkUtil;
import br.eti.kinoshita.testlinkjavaapi.TestLinkAPI;
import br.eti.kinoshita.testlinkjavaapi.model.TestCase;
import br.eti.kinoshita.testlinkjavaapi.model.TestSuite;
public class GetTestCases {
//创建一个testlinkapi对象
TestLinkAPI api;
@Test
public void getTestCases() {
api = TestlinkUtil.connect();
TestSuite[] suites = TestlinkUtil.getFirstLeverTestSuite(api, "API_Automation");
//遍历数组,拿到每个测试套件下测试用例
for (TestSuite testSuite : suites) {
System.out.println("测试套件:"+testSuite.getName()+"有以下测试用例(名称)");
//获取测试用例数组,注意参数写法
TestCase[] cases = api.getTestCasesForTestSuite(testSuite.getId(), true, null);
//遍历,拿到每一个用例名称
for (TestCase testCase : cases) {
System.out.println(testCase.getName());
}
}
}
}
运行结果:
[RemoteTestNG] detected TestNG version 6.14.3
2018-06-02 21:01:35 935 INFO TestBase:28 - 正在读取配置文件...
Hello!
测试套件:Test_Suite1有以下测试用例(名称)
Test_Case1
Test_Case2
PASSED: getTestCases
看到这个运行结果,和我们文章开头的贴图是一致的,说明代码功能没有问题。下面,我们把获取测试用例数组的方法抽取出来,放在TestlinkUtil.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.TestCase;
import br.eti.kinoshita.testlinkjavaapi.model.TestPlan;
import br.eti.kinoshita.testlinkjavaapi.model.TestProject;
import br.eti.kinoshita.testlinkjavaapi.model.TestSuite;
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;
}
/**
* 根据项目名称获取项目下顶层的测试套件数组对象
* @param api
* @param projectName
* @return
*/
public static TestSuite[] getFirstLeverTestSuite(TestLinkAPI api, String projectName) {
int projectId = TestlinkUtil.getProjectIdByName(api, projectName);
TestSuite[] suites = api.getFirstLevelTestSuitesForTestProject(projectId);
return suites;
}
public static TestCase[] getTestCasesForSuite(TestLinkAPI api, String projectName) {
TestSuite[] suites = TestlinkUtil.getFirstLeverTestSuite(api, projectName);
TestCase[] cases = null;
//遍历数组,拿到每个测试套件下测试用例
for (TestSuite testSuite : suites) {
//获取测试用例数组,注意参数写法
cases = api.getTestCasesForTestSuite(testSuite.getId(), true, null);
}
return cases;
}
}
写一个测试类来测试获取测试用例套件和测试用例数组的方法。
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.TestCase;
public class GetSuitesAndCases {
//创建一个testlinkapi对象
TestLinkAPI api = TestlinkUtil.connect();
@Test
public void getCases() {
TestCase[] cases = TestlinkUtil.getTestCasesForSuite(api, "API_Automation");
for (TestCase testCase : cases) {
System.out.println(testCase.getName()+"..."+testCase.getId());
}
}
}
运行结果:
[RemoteTestNG] detected TestNG version 6.14.3
2018-06-02 21:13:52 434 INFO TestBase:28 - 正在读取配置文件...
Hello!
Test_Case1...3
Test_Case2...8
PASSED: getCases
本篇就介绍到这里,下一篇介绍根据测试用例去获取测试用例子步骤等信息。前面一篇和这篇源码,点这里。