⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 packagetest.java

📁 测试工具
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * 
 */

/*
 * Package to test functions
 * 
 * Functions are created and parameters set up in one thread.
 * 
 * They are then tested in another thread, or two threads running in parallel
 * 
 */
package org.apache.jmeter.functions;

import java.io.FileNotFoundException;
import java.util.Collection;
import java.util.LinkedList;

import junit.extensions.ActiveTestSuite;
import junit.framework.Test;
import junit.framework.TestSuite;

import org.apache.jmeter.engine.util.CompoundVariable;
import org.apache.jmeter.junit.JMeterTestCase;
import org.apache.jmeter.threads.JMeterContext;
import org.apache.jmeter.threads.JMeterContextService;
import org.apache.jmeter.threads.JMeterVariables;
import org.apache.jmeter.util.JMeterUtils;
import org.apache.jorphan.logging.LoggingManager;
import org.apache.jorphan.util.JMeterStopThreadException;
import org.apache.log.Logger;

/**
 * Test cases for Functions
 */
public class PackageTest extends JMeterTestCase {

	private static final Logger log = LoggingManager.getLoggerForClass();

	static {
		// LoggingManager.setPriority("DEBUG","jmeter");
		// LoggingManager.setTarget(new java.io.PrintWriter(System.out));
	}

	public PackageTest(String arg0) {
		super(arg0);
	}

	// Create the CSVRead function and set its parameters.
	private static CSVRead setParams(String p1, String p2) throws Exception {
		CSVRead cr = new CSVRead();
		Collection parms = new LinkedList();
		if (p1 != null)
			parms.add(new CompoundVariable(p1));
		if (p2 != null)
			parms.add(new CompoundVariable(p2));
		cr.setParameters(parms);
		return cr;
	}

	// Create the StringFromFile function and set its parameters.
	private static StringFromFile SFFParams(String p1, String p2, String p3, String p4) throws Exception {
		StringFromFile sff = new StringFromFile();
		Collection parms = new LinkedList();
		if (p1 != null)
			parms.add(new CompoundVariable(p1));
		if (p2 != null)
			parms.add(new CompoundVariable(p2));
		if (p3 != null)
			parms.add(new CompoundVariable(p3));
		if (p4 != null)
			parms.add(new CompoundVariable(p4));
		sff.setParameters(parms);
		return sff;
	}

	// Create the SplitFile function and set its parameters.
	private static SplitFunction SplitParams(String p1, String p2, String p3) throws Exception {
		SplitFunction split = new SplitFunction();
		Collection parms = new LinkedList();
		parms.add(new CompoundVariable(p1));
		if (p2 != null)
			parms.add(new CompoundVariable(p2));
		if (p3 != null)
			parms.add(new CompoundVariable(p3));
		split.setParameters(parms);
		return split;
	}

	// Create the BeanShell function and set its parameters.
	private static BeanShell BSHFParams(String p1, String p2, String p3) throws Exception {
		BeanShell bsh = new BeanShell();
		bsh.setParameters(MakeParams(p1, p2, p3));
		return bsh;
	}

	private static Collection MakeParams(String p1, String p2, String p3) {
		Collection parms = new LinkedList();
		if (p1 != null)
			parms.add(new CompoundVariable(p1));
		if (p2 != null)
			parms.add(new CompoundVariable(p2));
		if (p3 != null)
			parms.add(new CompoundVariable(p3));
		return parms;
	}

	public static Test suite() throws Exception {
		TestSuite allsuites = new TestSuite("Function PackageTest");

		TestSuite bsh = new TestSuite("BeanShell");
		bsh.addTest(new PackageTest("BSH1"));
		allsuites.addTest(bsh);

		TestSuite suite = new TestSuite("SingleThreaded");
		suite.addTest(new PackageTest("CSVParams"));
		suite.addTest(new PackageTest("CSVNoFile"));
		suite.addTest(new PackageTest("CSVSetup"));
		suite.addTest(new PackageTest("CSVRun"));

		suite.addTest(new PackageTest("CSValias"));
		suite.addTest(new PackageTest("CSVBlankLine"));
		allsuites.addTest(suite);

		// Reset files
		suite.addTest(new PackageTest("CSVSetup"));
		TestSuite par = new ActiveTestSuite("Parallel");
		par.addTest(new PackageTest("CSVThread1"));
		par.addTest(new PackageTest("CSVThread2"));
		allsuites.addTest(par);

		TestSuite sff = new TestSuite("StringFromFile");
		sff.addTest(new PackageTest("SFFTest1"));
		sff.addTest(new PackageTest("SFFTest2"));
		sff.addTest(new PackageTest("SFFTest3"));
		sff.addTest(new PackageTest("SFFTest4"));
		sff.addTest(new PackageTest("SFFTest5"));
		allsuites.addTest(sff);

		TestSuite split = new TestSuite("SplitFunction");
		split.addTest(new PackageTest("splitTest1"));
		allsuites.addTest(split);

		TestSuite xpath = new TestSuite("XPath");
		xpath.addTest(new PackageTest("XPathtestColumns"));
		xpath.addTest(new PackageTest("XPathtestDefault"));
		xpath.addTest(new PackageTest("XPathtestNull"));
		xpath.addTest(new PackageTest("XPathtestrowNum"));
        xpath.addTest(new PackageTest("XPathEmpty"));
        xpath.addTest(new PackageTest("XPathFile1"));
        xpath.addTest(new PackageTest("XPathFile2"));
        xpath.addTest(new PackageTest("XPathNoFile"));

		allsuites.addTest(xpath);
		
        TestSuite random = new TestSuite("Random");
        random.addTest(new PackageTest("randomTest1"));
        allsuites.addTest(random);

        allsuites.addTest(new PackageTest("XPathSetup1"));
        TestSuite par2 = new ActiveTestSuite("ParallelXPath1");
        par2.addTest(new PackageTest("XPathThread1"));
        par2.addTest(new PackageTest("XPathThread2"));
        allsuites.addTest(par2);

        allsuites.addTest(new PackageTest("XPathSetup2"));
        TestSuite par3 = new ActiveTestSuite("ParallelXPath2");
        par3.addTest(new PackageTest("XPathThread1"));
        par3.addTest(new PackageTest("XPathThread2"));
        allsuites.addTest(par3);

        TestSuite variable = new TestSuite("Variable");
        variable.addTest(new PackageTest("variableTest1"));
        allsuites.addTest(variable);
        
        TestSuite eval = new TestSuite("Eval");
        eval.addTest(new PackageTest("evalTest1"));
        eval.addTest(new PackageTest("evalTest2"));
        allsuites.addTest(eval);

        return allsuites;
	}

	private JMeterContext jmctx = null;

	private JMeterVariables vars = null;

	public void setUp() {
		jmctx = JMeterContextService.getContext();
		jmctx.setVariables(new JMeterVariables());
		vars = jmctx.getVariables();
	}

	public void BSH1() throws Exception {
		String fn = "testfiles/BeanShellTest.bsh";
		BeanShell bsh;
		try {
			bsh = BSHFParams(null, null, null);
			fail("Expected InvalidVariableException");
		} catch (InvalidVariableException e) {
		}

		try {
			bsh = BSHFParams("", "", "");
			fail("Expected InvalidVariableException");
		} catch (InvalidVariableException e) {
		}

		try {
			bsh = BSHFParams("", "", null);
			assertEquals("", bsh.execute());
		} catch (InvalidVariableException e) {
			fail("BeanShell not present");
		}

		bsh = BSHFParams("1", null, null);
		assertEquals("1", bsh.execute());

		bsh = BSHFParams("1+1", "VAR", null);
		assertEquals("2", bsh.execute());
		assertEquals("2", vars.get("VAR"));

		// Check some initial variables
		bsh = BSHFParams("return threadName", null, null);
		assertEquals(Thread.currentThread().getName(), bsh.execute());
		bsh = BSHFParams("return log.getClass().getName()", null, null);
		assertEquals(log.getClass().getName(), bsh.execute());

		// Check source works
		bsh = BSHFParams("source (\"testfiles/BeanShellTest.bsh\")", null, null);
		assertEquals("9876", bsh.execute());

		// Check persistence
		bsh = BSHFParams("${SCR1}", null, null);

		vars.put("SCR1", "var1=11");
		assertEquals("11", bsh.execute());

		vars.put("SCR1", "var2=22");
		assertEquals("22", bsh.execute());

		vars.put("SCR1", "x=var1");
		assertEquals("11", bsh.execute());

		vars.put("SCR1", "++x");
		assertEquals("12", bsh.execute());

		vars.put("VAR1", "test");
		vars.put("SCR1", "vars.get(\"VAR1\")");
		assertEquals("test", bsh.execute());

		// Check init file functioning
		JMeterUtils.getJMeterProperties().setProperty(BeanShell.INIT_FILE, fn);
		bsh = BSHFParams("${SCR2}", null, null);
		vars.put("SCR2", "getprop(\"" + BeanShell.INIT_FILE + "\")");
		assertEquals(fn, bsh.execute());// Check that bsh has read the file
		vars.put("SCR2", "getprop(\"avavaav\",\"default\")");
		assertEquals("default", bsh.execute());
		vars.put("SCR2", "++i");
		assertEquals("1", bsh.execute());
		vars.put("SCR2", "++i");
		assertEquals("2", bsh.execute());

	}

	public void splitTest1() throws Exception {
		SplitFunction split = null;
		String src = "";

		try {
			split = SplitParams("a,b,c", null, null);
			fail("Expected InvalidVariableException (wrong number of parameters)");
		} catch (InvalidVariableException e) {
			// OK
		}
		src = "a,b,c";
		split = SplitParams(src, "VAR1", null);
		assertEquals(src, split.execute());
		assertEquals(src, vars.get("VAR1"));
		assertEquals("3", vars.get("VAR1_n"));
		assertEquals("a", vars.get("VAR1_1"));
		assertEquals("b", vars.get("VAR1_2"));
		assertEquals("c", vars.get("VAR1_3"));
		assertNull(vars.get("VAR1_4"));

		split = SplitParams(src, "VAR2", ",");
		assertEquals(src, split.execute());
		assertEquals(src, vars.get("VAR2"));
		assertEquals("3", vars.get("VAR2_n"));
		assertEquals("a", vars.get("VAR2_1"));
		assertEquals("b", vars.get("VAR2_2"));
		assertEquals("c", vars.get("VAR2_3"));
		assertNull(vars.get("VAR2_4"));

		src = "a|b|c";
		split = SplitParams(src, "VAR3", "|");
		assertEquals(src, split.execute());
		assertEquals(src, vars.get("VAR3"));
		assertEquals("3", vars.get("VAR3_n"));
		assertEquals("a", vars.get("VAR3_1"));
		assertEquals("b", vars.get("VAR3_2"));
		assertEquals("c", vars.get("VAR3_3"));
		assertNull(vars.get("VAR3_4"));

		src = "a|b||";
		split = SplitParams(src, "VAR4", "|");
		assertEquals(src, split.execute());
		assertEquals(src, vars.get("VAR4"));
		assertEquals("4", vars.get("VAR4_n"));
		assertEquals("a", vars.get("VAR4_1"));
		assertEquals("b", vars.get("VAR4_2"));
		assertEquals("?", vars.get("VAR4_3"));
		assertNull(vars.get("VAR4_5"));

		src = "a,,c";
		vars.put("VAR", src);
		split = SplitParams("${VAR}", "VAR", null);
		assertEquals(src, split.execute());
		assertEquals("3", vars.get("VAR_n"));
		assertEquals("a", vars.get("VAR_1"));
		assertEquals("?", vars.get("VAR_2"));
		assertEquals("c", vars.get("VAR_3"));
        assertNull(vars.get("VAR_4"));

		src = "a,b";
		vars.put("VAR", src);
		split = SplitParams("${VAR}", "VAR", null);
		assertEquals(src, split.execute());
		assertEquals("2", vars.get("VAR_n"));
		assertEquals("a", vars.get("VAR_1"));
		assertEquals("b", vars.get("VAR_2"));
        assertNull(vars.get("VAR_3"));

        src = "a,,c,";
        vars.put("VAR", src);
        split = SplitParams("${VAR}", "VAR5", null);
        assertEquals(src, split.execute());
        assertEquals("4", vars.get("VAR5_n"));
        assertEquals("a", vars.get("VAR5_1"));
        assertEquals("?", vars.get("VAR5_2"));
        assertEquals("c", vars.get("VAR5_3"));
        assertEquals("?", vars.get("VAR5_4"));
        assertNull(vars.get("VAR5_5"));

}

	public void SFFTest1() throws Exception {
		StringFromFile sff1 = SFFParams("testfiles/SFFTest#'.'txt", "", "1", "3");
		assertEquals("uno", sff1.execute());
		assertEquals("dos", sff1.execute());
		assertEquals("tres", sff1.execute());
		assertEquals("cuatro", sff1.execute());
		assertEquals("cinco", sff1.execute());
		assertEquals("one", sff1.execute());
		assertEquals("two", sff1.execute());
		sff1.execute();
		sff1.execute();
		assertEquals("five", sff1.execute());
		assertEquals("eins", sff1.execute());
		sff1.execute();
		sff1.execute();
		sff1.execute();
		assertEquals("fuenf", sff1.execute());
		try {
			sff1.execute();
			fail("Should have thrown JMeterStopThreadException");
		} catch (JMeterStopThreadException e) {
			// expected
		}
	}

	public void SFFTest2() throws Exception {
		StringFromFile sff = SFFParams("testfiles/SFFTest1.txt", "", null, null);
		assertEquals("uno", sff.execute());
		assertEquals("dos", sff.execute());
		assertEquals("tres", sff.execute());
		assertEquals("cuatro", sff.execute());
		assertEquals("cinco", sff.execute());
		assertEquals("uno", sff.execute()); // Restarts
		assertEquals("dos", sff.execute());
		assertEquals("tres", sff.execute());
		assertEquals("cuatro", sff.execute());
		assertEquals("cinco", sff.execute());
	}

	public void SFFTest3() throws Exception {
		StringFromFile sff = SFFParams("testfiles/SFFTest1.txt", "", "", "");
		assertEquals("uno", sff.execute());
		assertEquals("dos", sff.execute());
		assertEquals("tres", sff.execute());
		assertEquals("cuatro", sff.execute());
		assertEquals("cinco", sff.execute());
		assertEquals("uno", sff.execute()); // Restarts
		assertEquals("dos", sff.execute());
		assertEquals("tres", sff.execute());
		assertEquals("cuatro", sff.execute());
		assertEquals("cinco", sff.execute());
	}

	public void SFFTest4() throws Exception {
		StringFromFile sff = SFFParams("xxtestfiles/SFFTest1.txt", "", "", "");
		assertEquals(StringFromFile.ERR_IND, sff.execute());
		assertEquals(StringFromFile.ERR_IND, sff.execute());
	}

	// Test that only loops twice
	public void SFFTest5() throws Exception {
		StringFromFile sff = SFFParams("testfiles/SFFTest1.txt", "", "", "2");
		assertEquals("uno", sff.execute());
		assertEquals("dos", sff.execute());
		assertEquals("tres", sff.execute());
		assertEquals("cuatro", sff.execute());
		assertEquals("cinco", sff.execute());
		assertEquals("uno", sff.execute());
		assertEquals("dos", sff.execute());
		assertEquals("tres", sff.execute());
		assertEquals("cuatro", sff.execute());
		assertEquals("cinco", sff.execute());
		try {
			sff.execute();
			fail("Should have thrown JMeterStopThreadException");
		} catch (JMeterStopThreadException e) {
			// expected
		}
	}

	// Function objects to be tested
	private static CSVRead cr1, cr2, cr3, cr4, cr5, cr6;

	// Helper class used to implement co-routine between two threads
	private static class Baton {
		void pass() {
			done();
			try {
				// System.out.println(">wait:"+Thread.currentThread().getName());

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -