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

📄 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 org.apache.jmeter.assertions;

import junit.framework.TestCase;

import org.apache.jmeter.junit.JMeterTestCase;
import org.apache.jmeter.samplers.SampleResult;
import org.apache.jmeter.threads.JMeterContext;
import org.apache.jmeter.threads.JMeterContextService;
import org.apache.jmeter.threads.JMeterVariables;
import org.apache.jorphan.logging.LoggingManager;
import org.apache.log.Logger;
public class PackageTest extends TestCase {

	public PackageTest() {
		super();
	}

	public PackageTest(String arg0) {
		super(arg0);
	}
	public void testHex() throws Exception {
		assertEquals("00010203", MD5HexAssertion.baToHex(new byte[] { 0, 1, 2, 3 }));
		assertEquals("03020100", MD5HexAssertion.baToHex(new byte[] { 3, 2, 1, 0 }));
		assertEquals("0f807fff", MD5HexAssertion.baToHex(new byte[] { 0xF, -128, 127, -1 }));
	}

	public void testMD5() throws Exception {
		assertEquals("D41D8CD98F00B204E9800998ECF8427E", MD5HexAssertion.baMD5Hex(new byte[] {}).toUpperCase());
	}

	int threadsRunning;

	int failed;

	public void testThreadSafety() throws Exception {
		Thread[] threads = new Thread[100];
		for (int i = 0; i < threads.length; i++) {
			threads[i] = new TestThread();
		}
		failed = 0;
		for (int i = 0; i < threads.length; i++) {
			threads[i].start();
			threadsRunning++;
		}
		synchronized (this) {
			while (threadsRunning > 0) {
				wait();
			}
		}
		assertEquals(failed, 0);
	}

	class TestThread extends Thread {
		static final String TEST_STRING = "DAbale arroz a la zorra el abad.";

		// Used to be 'dábale', but caused trouble on Gump. Reasons
		// unknown.
		static final String TEST_PATTERN = ".*A.*\\.";

		public void run() {
			ResponseAssertion assertion = new ResponseAssertion();
			assertion.setTestFieldResponseData();
			assertion.setToContainsType();
			assertion.addTestString(TEST_PATTERN);
			SampleResult response = new SampleResult();
			response.setResponseData(TEST_STRING.getBytes());
			for (int i = 0; i < 100; i++) {
				AssertionResult result;
				result = assertion.getResult(response);
				if (result.isFailure() || result.isError()) {
					failed++;
				}
			}
			synchronized (PackageTest.this) {
				threadsRunning--;
				PackageTest.this.notifyAll();
			}
		}
	}
	
	public static class XPathAssertionTest extends TestCase {
		private static final Logger log = LoggingManager.getLoggerForClass();

		XPathAssertion assertion;

		SampleResult result;

		JMeterVariables vars;

		JMeterContext jmctx;

		public XPathAssertionTest() {
			super();
		}

		public XPathAssertionTest(String name) {
			super(name);
		}

		public void setUp() {
			jmctx = JMeterContextService.getContext();
			assertion = new XPathAssertion();
			assertion.setThreadContext(jmctx);// This would be done by the run
												// command
			// assertion.setRefName("regVal");

			result = new SampleResult();
			String data = "<company-xmlext-query-ret>" + "<row>" + "<value field=\"RetCode\">LIS_OK</value>"
					+ "<value field=\"RetCodeExtension\"></value>" + "<value field=\"alias\"></value>"
					+ "<value field=\"positioncount\"></value>" + "<value field=\"invalidpincount\">0</value>"
					+ "<value field=\"pinposition1\">1</value>" + "<value field=\"pinpositionvalue1\"></value>"
					+ "<value field=\"pinposition2\">5</value>" + "<value field=\"pinpositionvalue2\"></value>"
					+ "<value field=\"pinposition3\">6</value>" + "<value field=\"pinpositionvalue3\"></value>"
					+ "</row>" + "</company-xmlext-query-ret>";
			result.setResponseData(data.getBytes());
			vars = new JMeterVariables();
			jmctx.setVariables(vars);
			jmctx.setPreviousResult(result);
		}

		public void testAssertion() throws Exception {
			assertion.setXPathString("//row/value[@field = 'alias']");
			AssertionResult res = assertion.getResult(jmctx.getPreviousResult());
			log.debug(" res " + res.isError());
			log.debug(" failure " + res.getFailureMessage());
			assertFalse(res.isError());
			assertFalse(res.isFailure());
		}

		public void testNegateAssertion() throws Exception {
			assertion.setXPathString("//row/value[@field = 'noalias']");
			assertion.setNegated(true);

			AssertionResult res = assertion.getResult(jmctx.getPreviousResult());
			log.debug(" res " + res.isError());
			log.debug(" failure " + res.getFailureMessage());
			assertFalse(res.isError());
			assertFalse(res.isFailure());
		}

		public void testValidationFailure() throws Exception {
			assertion.setXPathString("//row/value[@field = 'alias']");
			assertion.setNegated(false);
			assertion.setValidating(true);
			AssertionResult res = assertion.getResult(jmctx.getPreviousResult());
			log.debug(res.getFailureMessage() + " error: " + res.isError() + " failure: " + res.isFailure());
			assertTrue(res.isError());
			assertFalse(res.isFailure());

		}

		public void testValidationSuccess() throws Exception {
			String data = "<?xml version=\"1.0\"?>" + "<!DOCTYPE BOOK [" + "<!ELEMENT p (#PCDATA)>"
					+ "<!ELEMENT BOOK         (OPENER,SUBTITLE?,INTRODUCTION?,(SECTION | PART)+)>"
					+ "<!ELEMENT OPENER       (TITLE_TEXT)*>" + "<!ELEMENT TITLE_TEXT   (#PCDATA)>"
					+ "<!ELEMENT SUBTITLE     (#PCDATA)>" + "<!ELEMENT INTRODUCTION (HEADER, p+)+>"
					+ "<!ELEMENT PART         (HEADER, CHAPTER+)>" + "<!ELEMENT SECTION      (HEADER, p+)>"
					+ "<!ELEMENT HEADER       (#PCDATA)>" + "<!ELEMENT CHAPTER      (CHAPTER_NUMBER, CHAPTER_TEXT)>"
					+ "<!ELEMENT CHAPTER_NUMBER (#PCDATA)>" + "<!ELEMENT CHAPTER_TEXT (p)+>" + "]>" + "<BOOK>"
					+ "<OPENER>" + "<TITLE_TEXT>All About Me</TITLE_TEXT>" + "</OPENER>" + "<PART>"
					+ "<HEADER>Welcome To My Book</HEADER>" + "<CHAPTER>"
					+ "<CHAPTER_NUMBER>CHAPTER 1</CHAPTER_NUMBER>" + "<CHAPTER_TEXT>"
					+ "<p>Glad you want to hear about me.</p>" + "<p>There's so much to say!</p>"
					+ "<p>Where should we start?</p>" + "<p>How about more about me?</p>" + "</CHAPTER_TEXT>"
					+ "</CHAPTER>" + "</PART>" + "</BOOK>";

			result.setResponseData(data.getBytes());
			vars = new JMeterVariables();
			jmctx.setVariables(vars);
			jmctx.setPreviousResult(result);
			assertion.setXPathString("/");
			assertion.setValidating(true);
			AssertionResult res = assertion.getResult(result);
			assertFalse(res.isError());
			assertFalse(res.isFailure());
		}

		public void testValidationFailureWithDTD() throws Exception {
			String data = "<?xml version=\"1.0\"?>" + "<!DOCTYPE BOOK [" + "<!ELEMENT p (#PCDATA)>"
					+ "<!ELEMENT BOOK         (OPENER,SUBTITLE?,INTRODUCTION?,(SECTION | PART)+)>"
					+ "<!ELEMENT OPENER       (TITLE_TEXT)*>" + "<!ELEMENT TITLE_TEXT   (#PCDATA)>"
					+ "<!ELEMENT SUBTITLE     (#PCDATA)>" + "<!ELEMENT INTRODUCTION (HEADER, p+)+>"
					+ "<!ELEMENT PART         (HEADER, CHAPTER+)>" + "<!ELEMENT SECTION      (HEADER, p+)>"
					+ "<!ELEMENT HEADER       (#PCDATA)>" + "<!ELEMENT CHAPTER      (CHAPTER_NUMBER, CHAPTER_TEXT)>"
					+ "<!ELEMENT CHAPTER_NUMBER (#PCDATA)>" + "<!ELEMENT CHAPTER_TEXT (p)+>" + "]>" + "<BOOK>"
					+ "<OPENER>" + "<TITLE_TEXT>All About Me</TITLE_TEXT>" + "</OPENER>" + "<PART>"
					+ "<HEADER>Welcome To My Book</HEADER>" + "<CHAPTER>"
					+ "<CHAPTER_NUMBER>CHAPTER 1</CHAPTER_NUMBER>" + "<CHAPTER_TEXT>"
					+ "<p>Glad you want to hear about me.</p>" + "<p>There's so much to say!</p>"
					+ "<p>Where should we start?</p>" + "<p>How about more about me?</p>" + "</CHAPTER_TEXT>"
					+ "</CHAPTER>" + "<illegal>not defined in dtd</illegal>" + "</PART>" + "</BOOK>";

			result.setResponseData(data.getBytes());
			vars = new JMeterVariables();
			jmctx.setVariables(vars);
			jmctx.setPreviousResult(result);
			assertion.setXPathString("/");
			assertion.setValidating(true);
			AssertionResult res = assertion.getResult(result);
			log.debug("failureMessage: " + res.getFailureMessage());
			assertTrue(res.isError());
			assertFalse(res.isFailure());
		}

		public void testTolerance() throws Exception {
			String data = "<html><head><title>testtitle</title></head>" + "<body>"
					+ "<p><i><b>invalid tag nesting</i></b><hr>" + "</body></html>";

			result.setResponseData(data.getBytes());
			vars = new JMeterVariables();
			jmctx.setVariables(vars);
			jmctx.setPreviousResult(result);
			assertion.setXPathString("/html/head/title");
			assertion.setValidating(true);
			assertion.setTolerant(true);
			AssertionResult res = assertion.getResult(result);
			log.debug("failureMessage: " + res.getFailureMessage());
			assertFalse(res.isFailure());
			assertFalse(res.isError());
		}

		public void testNoTolerance() throws Exception {
			String data = "<html><head><title>testtitle</title></head>" + "<body>"
					+ "<p><i><b>invalid tag nesting</i></b><hr>" + "</body></html>";

			result.setResponseData(data.getBytes());
			vars = new JMeterVariables();
			jmctx.setVariables(vars);
			jmctx.setPreviousResult(result);
			assertion.setXPathString("/html/head/title");
			assertion.setValidating(false);
			assertion.setTolerant(false);
			AssertionResult res = assertion.getResult(result);
			log.debug("failureMessage: " + res.getFailureMessage());
			assertTrue(res.isError());
			assertFalse(res.isFailure());
		}

	}

	public static class ResponseAssertionTest extends TestCase{

		private JMeterContext jmctx;
		private ResponseAssertion assertion;

⌨️ 快捷键说明

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