2
28

mysql的enum之hibernate映射

作者: 舞命小丢 分类:java 0 comments
package user;      
 
public class User {
	private int id;
	private NetStatus netStatus;      
 
	public final int getId() {
		return id;
	}      
 
	public final void setId(int id) {
		this.id = id;
	}      
 
	public final NetStatus getNetStatus() {
		return netStatus;
	}      
 
	public final void setNetStatus(NetStatus netStatus) {
		this.netStatus = netStatus;
	}      
 
}

创建enum类NetStatus

package user;      
 
public enum NetStatus {
	GOOD, BAD;
}

创建Hibernate自定义类型

package user;     
 
import java.io.Serializable;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;     
 
import org.hibernate.Hibernate;
import org.hibernate.HibernateException;
import org.hibernate.usertype.EnhancedUserType;
import org.hibernate.usertype.ParameterizedType;
import org.hibernate.util.ReflectHelper;     
 
public class EnumUserType implements EnhancedUserType, ParameterizedType {     
 
	public boolean isMutable() {
		return false;
	}     
 
	public Object deepCopy(Object value) {
		return value;
	}     
 
	public Serializable disassemble(Object value) {
		return (Serializable) value;
	}     
 
	public Object assemble(Serializable cached, Object owner) {
		return cached;
	}     
 
	public Object replace(Object original, Object target, Object owner) {
		return original;
	}     
 
	public boolean equals(Object x, Object y) {
		if (x == y)
			return true;
		if (x == null || y == null)
			return false;
		return x.equals(y);
	}     
 
	public int hashCode(Object x) {
		return x.hashCode();
	}     
 
	private Class<enum></enum> enumClass;     
 
	public void setParameterValues(Properties parameters) {
		String enumClassName = parameters.getProperty("name");
		try {
			enumClass = ReflectHelper.classForName(enumClassName);
		} catch (ClassNotFoundException cnfe) {
			throw new HibernateException("Enum class not found", cnfe);
		}
	}     
 
	public Class returnedClass() {
		return enumClass;
	}     
 
	public int[] sqlTypes() {
		return new int[] { Hibernate.STRING.sqlType() };
	}     
 
	public Object fromXMLString(String xmlValue) {
		return Enum.valueOf(enumClass, xmlValue);
	}     
 
	public String objectToSQLString(Object value) {
		return '\'' + ((Enum) value).name() + '\'';
	}     
 
	public String toXMLString(Object value) {
		return ((Enum) value).name();
	}     
 
	public Object nullSafeGet(ResultSet rs, String[] names, Object owner)
			throws SQLException {
		String name = rs.getString(names[0]);
		return rs.wasNull() ? null : Enum.valueOf(enumClass, name);
	}     
 
	public void nullSafeSet(PreparedStatement st, Object value, int index)
			throws SQLException {
		if (value == null) {
			st.setNull(index, Hibernate.STRING.sqlType());
		} else {
			st.setString(index, ((Enum) value).name());
		}
	}
}

创建Hibernate配置文件

创建Hibernate User映射文件

测试程序运行

package user;     
 
import java.util.List;     
 
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;     
 
public class Main {     
 
	public static void main(String[] args) {
		try {
			Configuration config = new Configuration().configure();
			SessionFactory sessionFactory = config.buildSessionFactory();
			Session session = sessionFactory.openSession();     
 
			Transaction t = session.beginTransaction();
			User user = new User();
			user.setNetStatus(NetStatus.GOOD);     
 
			session.save(user);     
 
			session.flush();     
 
			t.commit();     
 
			Query query = session
					.createQuery("from User as u where u.netStatus=user.NetStatus.GOOD");
			List list = query.list();     
 
			if (list != null) {
				for (Object o : list) {
					User u = (User) o;
					System.out.println(u.getId());
					System.out.println(u.getNetStatus().name());
				}
			}     
 
			session.close();     
 
		} catch (HibernateException e) {
			e.printStackTrace();
		}     
 
	}     
 
}

具体的代码请查看源代码,因为WorPress显示代码有很多问题!
源代码:hibernate enum映射配置文件源代码

17fav 收藏本文

标签: , ,

2
17

MaxQ的录制和运行脚本

作者: 舞命小丢 分类:测试 0 comments

录制测试:

  1. 配置你的web浏览器使用localhost:8090作为HTTP代理。确切的步骤依赖于你使用的平台/浏览器。在Windows下的Internet Explorer,这样做:
    • 选择"工具”–>”Internet 选项"...
    • 单击"连接”标签
    • 单击底部的"局域网设置”按钮
    • 单击” 使用一个代理服务器" 复选框
    • "地址”框,输入:localhost
    • "端口”框,输入:8090 (或者通常你指定的端口)
    • 单击"确定”

    注意: 当你推出MaxQ,确认你的浏览器不再使用代理。否则它将不能请求页面。

  2. 通过双击 bin\maxq.bat (Windows) 或者使用命令行运行/Users/oliver/maxq$ bin/maxq
    (UNIX)启动MaxQ
  3. 选择File->New->Standard Script. 这将为你脚本生成样板代码。
  4. 使用你的web浏览器到你要测试的任何地方。因为你没有开始录制,你的web请求会通过MaxQ,但它并不添加任何东西到脚本文件。
  5. 选择Test->Start Recording。
  6. 开始打开你要测试的web页面。作为你在连接上的单击,或者提交表单,python代码会生成在MaxQ窗口。
  7. 当你运行完测试,选择 Test->Stop Recording.。你将提示输入一个测试脚本保存的文件名。我们建议那些文件使用.py扩展名。

运行测试

通过 GUI:

  • 启动 MaxQ
  • 选择File->Open 并加载你要运行的脚本文件
  • 选择Test->Run 来运行脚本。一个新的包含测试输出的对话框将会自动打开。

通过命令行:

详细见命令行 页面。基本就是你启动MaxQ使用-r标记,并且跟上你要运行的脚本文件名 。例如:

maxq -r mytest.py

在不同的服务器运行测试有时运行你录制的一个测试到其他服务器是很有用的。例如我通常会在我的本地PC录制,但是想要在我部署变化前重新运行这个测试套件到我的工作服务器。MaxQ提供了一个-u参数使之成为可能。这个标记通常和-r参数一起使用。例如:

maxq -u localhost:8000 stage.mydomain.com -r mytest.py

重放期间在mytest.py文件的任何 get() 和 post() 方法调用包含的localhost:8000 字符串都会替换为stage.mydomain.com 。在磁盘上的测试文件本身并没有修改。

http://maxq.tigris.org/docs/record.html

17fav 收藏本文

标签: ,

2
15

MaxQ安装

作者: 舞命小丢 分类:测试 3 comments

安装

  1. 确认你有java1.4以上版本。在UNIX下你可以通过命令行运行java -version检查。
    在Windows下你可以检查在添加/删除程序中的列表。如果你的Java是1.4前的版本,你必须 下载一个新版本。Java 标准版 (J2SE) 就可以。
  2. 确认在PATH环境变量中有java命令。如果你可以在命令行运行:
    java -version
    那么一切就是正确的。如果不可以你必须编辑内含的 bin/maxq.bat(Windows) 或者 bin/maxq (UNIX)文件,并使用到java命令的全路径替换java命令( 在 Windows下是java.exe), 或者更改你的PATH环境变量。
  3. 下载最新版本的MaxQ,解压它。 MaxQ 通常不关心它所在的目录,你可以添加MaxQ的bin目录到你PATH环境变量 。
  4. 如果你运行Windows 95, 98 or ME ,那么你必须在bin/maxq.bat文件的set MAXQ行更改目录到包含MaxQ的目录。

如果你有任何问题,询问 我们的 邮件列表

运行在防火墙后

如果你在防火墙后运行MaxQ,那么你必须给MaxQ你的代理服务器地址.。去除注释并在conf/maxq.properties文件中设置下列两行

remote.proxy.server=your.proxy.server

remote.proxy.port=port
原文地址:http://maxq.tigris.org/docs/install.html
17fav 收藏本文

标签:

2
15

MaxQ介绍

作者: 舞命小丢 分类:测试 0 comments

 MaxQ是一个开源的Web功能测试工具。它包含一个记录Jython测试脚本的HTTP代理,一个用于回放测试的命令行实用程序。代理记录器自动存储提交到表单的变量。

MaxQ 记录你使用的web站点。它记录你单击的链接和其他输入到一个Python脚本,你可以任何时候回放它。你可以使用它来:

  • 检查你的web站点依然工作(回归测试)。
  • 检查你的web站点正在产生正确的HTML (使用JTidy)。
  • 从默认的其他web站点自动提取一些信息,或者执行一些操作。

它如何工作

MaxQ数据流图 阅读全文 »

17fav 收藏本文

标签: , , ,

2
08

7. 创建一个数据库测试计划

在这一部分,你将学会如何去创建一个基础的测试计划来测试一个数据库服务器。你会创建10个用户来给数据库服务器发送2次SQL请求。同样,你也可以让用户运行他们的测试三次。这样总的JDBC请求数量就是(10用户)*(2次请求)*(重复3次)=60。要构建这个测试计划,你将会用到下面的元件:线程组,JDBC请求,图形结果。

这个例子使用了MySQL数据库驱动。要使用这个驱动,它所包涵的.jar文件必须复制到../lib/directory下(详情参见JMeter’s ClassPath)。另外我们期望在运行这个测试计划的时候的一个真实的栈数量跟踪。

7.1 添加用户

处理每个JMeter测试计划的第一步就是添加线程组元件。这个线程组会告诉JMeter你想要模拟的用户数量,用户应该发送请求的频率和应该发送的数量。下一步来添加一个线程组:首先选择这个测试计划,用鼠标右键点击然后在得到的菜单中选择”添加”–>”线程组”。这时你应该看到这个线程组已经在测试计划下面了,如果没有看到,就点击测试计划元件展开这个测试计划树。 阅读全文 »

17fav 收藏本文

标签: , , , ,

2
07

6. 创建一个高级web测试计划

在这章,你将学到如何创建高级测试计划来测试web站点。

如果需要一个基础的测试计划例子,见 构建一个web测试计划

6.1 用URL重写处理用户会话

如果你的web应用程序使用URL重写优于cookies保存会话信息,那么为了测试你的站点你将需要做一点额外的工作。

为了响应正确到URL重写,JMeter需要解析从服务器接受的HTML和检索唯一的会话ID。利用适当的HTTP URL 重写修改器来完成这些。 简单地输入你的会话ID参数名到修改器,它会找到它并添加它到每一个请求。如果请求已经有一个值,它将会被替代。如果”缓存会话Id?”被选中,那么最后被发现的会话ID将被保存,并且如果HTTP的上次取样不包含一个会话ID它将会被使用。

URL 重写例子

下载 这个例子 。 在图1 展示了一个使用URL重写的测试计划。注意URL重写修改器附属于线程组,因此确定它对在那个线程组的每一个请求有效。

图 1 - 测试树

在图2中,我们看到了URL重写修改器的GUI,它仅仅有一个让用户指定会话ID参数名的文本域。 有一个复选框来指示会话ID将被化为为路径 (以”;”隔开),这样胜过使用一个请求参数。

图 2 - 请求参数

6.2 使用消息头管理

HTTP消息头管理让你定制JMeter在HTTP请求消息头发送的信息。这个消息头包括像”User-Agent”, “Pragma”, “Referer”等属性。

HTTP消息头管理好像HTTP Cookie管理 ,如果你因为一些原因你不希望在你的测试里为不同的HTTP 请求对象指定不同的消息头,可以添加到线程组等级。

17fav 收藏本文

标签: , , , ,

2
07

5. 创建一个Web测试计划

在这一部分,你将学会如何创建一个基础的测试计划来测试一个Web站点,你将会创建5个用户向Jackrta网站上的两个网页发送请求。当然,你也可以让每个用户发送两次。这样,总的HTTP发送请求为(5个用户*2次请求*重复2次)=20。要创建这个测试计划,你将会用到下面的元件:线程组,HTTP请求,HTTP请求默认值和图形结果。

要创建更好的测试计划,可以参考创建一个高级web测试计划阅读全文 »

17fav 收藏本文

标签: , , , ,

2
05

3. 创建一个测试计划

一个测试计划描述了一系列Jmeter运行时要执行的步骤。一个完整的测试计划包含一个或者多个线程组,逻辑控制器,取样发生控制,监听器,定时器,断言和配置元件。

3.1 添加和删除元件

在一个树上通过右击可以添加元件到一个测试计划 ,并且从”添加”列表中选择一个新元件。另外,元件可以从文件加载并且通过选择”打开”选项添加。

为了删除元件,确保元件被选中,正确在元件上右击,并且选择”删除”选项。 阅读全文 »

17fav 收藏本文

标签: , , , ,

2
05

2. 入门

开始使用JMeter最容易的方法是首先下载最新版并且安装它。这个版本包含所有你在构建和运行Web,FTP,JDBC,和JNDI测试时使用的所有文件。

如果你想执行JDBC测试,你当然需要从供应商得到适当的JDBC驱动。JMeter没有提供任何JDBC驱动。

其它你可能需要下载的软件:

详细参见JMeter Classpath 一章安装附加的jar包

下一步, 开始使用JMeter并且参见用户手册创建一个测试计划一章使自己更加熟悉JMeter基础 (例如,添加和删除元件)。 阅读全文 »

17fav 收藏本文

标签: , , , ,

2
04

1. 简介

Apache JMeter是100%纯java桌面应用程序,被设计用来测试客户端/服务器结构的软件(例如web应用程序)。它可以用来测试包括基于静态和动态资源 程序的性能,例如静态文件,Java Servlets,Java 对象,数据库,FTP 服务器等等。JMeter可以用来在一个服务器、网络或者对象上模拟重负载来测试它的强度或者分析在不同的负载类型下的全面性能。

另外,JMeter能够通过让你们用断言创造测试脚本来验证我们的应用程序是否返回了我们期望的结果,从而帮助我们回归测试我们的程序。为了最大的灵活性,JMeter允许我们使用正则表达式创建断言。

1.1 历史

Apache软件组织的Stefano Mazzocchi是JMeter的创始人。他写出它起初是为了测试Apache JServ的性能(一个已经被Apache Tomcat工程所替代的工程)。我们重新设计JMeter来增强用户界面并增加功能测试的能力。

1.2 未来

我们希望看到作为开发者利用它的可插入架构使JMeter的功能快速扩展。未来发展的主要目标是在没有危及JMeter的负载测试能力的情况下尽可能使JMeter成为最实用的回归测试工具。

17fav 收藏本文

标签: , , , ,

收藏 & 分享

Powered by 17fav.com