从 Hyades 测试中访问数据池

通过从测试的已生成 Java 代码中调用数据池 API,可以从 Hyades 测试中使用数据池。

要使用的数据池必须已存在。

想要使用数据池的测试的 Java 代码必须存在。通过右键单击测试并选择生成来生成代码。

将这些 jar 添加到 Java 构建路径中。[ECLIPSE_HOME] 是 Eclipse 安装目录:
  • [ECLIPSE_HOME]/plugins/org.eclipse.hyades.models.common_3.0.0/common_model.jar
  • [ECLIPSE_HOME]/plugins/org.eclipse.hyades.test.datapool_3.0.0/datapool_api.jar
  • [ECLIPSE_HOME]/plugins/org.eclipse.emf.ecore_2.0.0/runtime/ecore.jar
  • [ECLIPSE_HOME]/plugins/org.eclipse.emf.common_2.0.0/runtime/common.jar
下面列示了从测试的 Java 代码中使用数据池的步骤。这些步骤后面紧接着提供了一个示例。
  1. 在 Java 编辑器中打开测试。不会在测试透视图中显示测试的源代码。要查看测试,请打开 Java 透视图并浏览至源文件夹(缺省情况下是 src/test)。
  2. 转至测试开头,为数据池 API 类添加 import 语句。
  3. 在测试的主体中,找到包含要用数据池列中的值替换的值的公布类。
  4. 转至公布类的开头,添加用于创建对数据池的实例引用并对数据池启动迭代循环的代码。
  5. 找到包含要被替换的值的行并添加将该值替换为对适当数据池列的引用的代码。
  6. 在公布类末尾,并且刚好在右花括号之前,结束对数据池的迭代循环。

以下摘录(说明步骤 2)显示了在生成的 Hyades 测试开头出现的 import 语句。末尾的粗体行是必须添加到测试中的数据池 import 语句。

package test;
import java.util.Random;
import junit.extensions.RepeatedTest;
import junit.framework.Test;
import org.eclipse.hyades.test.common.junit.DefaultTestArbiter;
import org.eclipse.hyades.test.common.junit.HyadesTestCase;
import org.eclipse.hyades.test.common.junit.HyadesTestSuite;
import org.eclipse.hyades.test.http.runner.HttpCookieCache;
import org.eclipse.hyades.test.http.runner.HttpExecutor;
import org.eclipse.hyades.test.http.runner.HttpHeader;
import org.eclipse.hyades.test.http.runner.HttpRequest;
import org.eclipse.hyades.test.http.runner.HttpResponse;
import org.eclipse.hyades.test.http.runner.internal.util.HttpTestUtil;
import org.eclipse.hyades.models.common.datapool.impl.Common_DatapoolFactoryImpl;
import org.eclipse.hyades.execution.runtime.datapool.*;

以下摘录(说明步骤 3)摘自一个生成的测试,在该测试中,测试人员访问 www.amazon.com 并搜索一本名为 atonement 的书。

	public void c8postwww_amazon_com() throws Exception {
		HttpRequest request = new HttpRequest();
		request.setMethod("POST");
		request.setVersion("1.1");
		request.setHost("www.amazon.com");
		request.setPort(80);
		request
				.setAbsolutePath("/exec/obidos/search-handle-form/102-5005957-7048952");
		request
				.setBody("url=index%3Dstripbooks=atonement=10=6");

在以下摘录(说明步骤 4 和 5)中,粗体行显示如何修改生成的测试代码,以使名为 books 的数据池中名为 title 的列替换 atonement 值。在第二行中“pathname of books.datapool”的位置,指定 books 数据池的标准路径名。

	public void c8postwww_amazon_com() throws Exception {

  IDatapoolFactory dpFactory = new Common_DatapoolFactoryImpl();
     IDatapool datapool = dpFactory.load(new File("pathname of books.datapool"), false); //false - nonshared
     IDatapoolIterator iter = dpFactory.open(datapool,
                 "org.eclipse.hyades.datapool.DatapoolIteratorSequentialPrivate");
     iter.dpInitialize(datapool, -1);  //-1 - go through all ECs


     while (!iter.dpDone())
     {

		   HttpRequest request = new HttpRequest();
		   request.setMethod("POST");
		   request.setVersion("1.1");
		   request.setHost("www.amazon.com");
		   request.setPort(80);
		   request
			.setAbsolutePath("/exec/obidos/search-handle-form/102-5005957-7048952");
	// request
		//	.setBody("url=index%3Dstripbooks=atonement=10=6");

    //new
        String title = iter.dpCurrent().getCell("title").getStringValue();
        iter.dpNext();
        String body = "url=index%3Dstripbooks=" +  title + " =10=6";
        request.setBody(body);		
        //end new
        // Lines from test ommitted ...
        }// Close loop through datapool

上级主题:为测试提供可变数据

(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.