前面我们学会了,根据项目名称去拿到项目下测试计划,前面文章结尾也说了,我们运行用例方式不走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本篇就介绍到这里,下一篇介绍根据测试用例去获取测试用例子步骤等信息。前面一篇和这篇源码,点这里。