经过前面一篇的连接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()); } } }
运行结果:
![](/qrcode.jpg)
[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.下一篇介绍,根据项目名称获取项目下的测试套件,和套件下的测试用例。