Java+Testlink实现接口自动化测试-5-获取测试套件和测试用例

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


猜你喜欢

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