|
这种方式是把loadrunner作为开发环境,使用java语言编写程序脚本,实现smtp协议的邮件收发。
这种方式是不基于录制的,直接测试邮件服务器的测试方式,不借助于outlook或foxmail这种客户端邮件工具,也不借助于通常邮件系统提供的web界面,直接使用
javamail包编写简易的客户端发邮件程序,利用loadrunner的多用户模拟,持续发送,参数化等特性,实现性能测试。
针对这个协议loadrunner的license必须使用global的,web的不能用。
下面重点介绍一下脚本。
包括几部分:
1、如何创建java vuser脚本
2、如何编写java vuser脚本实现smtp协议发邮件(就是java语言)
3、如何优化脚本实现测试目的。
1、如何创建java vuser脚本。
1)使用vugen工具,选择协议为java vuser。创建新的java vuser脚本。
全部脚本代码都在action中,如下:
import lrapi.lr;
public class Actions
{
public int init() {
return 0;
}//end of init
public int action() {
return 0;
}//end of action
public int end() {
return 0;
}//end of end
}
其中的init()和end()两个方法相当于web协议脚本的init和end action部分,只有action()中的脚本是每次迭代都会执行的部分。所以我们编写的发邮件部分的脚本都在action()中。
2)设置环境变量:
脚本机器需要安装java环境 ,jdk版本限制。
runtime setting中,设置java jvm和 classpath
java jvm这里loadrunner会自动将系统环境变量的path中java_home加载进来,所以只要设置好系统环境变量的java相关参数即可。(JAVA_HOME,PATH)
需要使用几个特殊的包,在loadrunner的runtime setting的java Environment Settings——classpath下增加包,需要下载以下jar包,并均在loadrunner中设置。在环境变量中设置也可以.
mail.jar
jakarta-oro-2.0.8.jar
poi-3.5-beta5-20090219.jar
activation.jar
2、如何编写java vuser脚本实现smtp协议发邮件
脚本分为几个部分:获取stmp邮件服务器地址,获取邮件内容等,发送邮件
各功能都可以在单独的方法中实现,最后在action()中调用即可。
1)定义变量(这些最后优化脚本时都可以使用loadrunner的参数池方式参数化)
Properties props; //系统属性
MimeMessage msg; //mime邮件对象
MimeMultipart mp ; // Multipart对象,邮件内容,标题,附件等内容均添加到其后再生成minmemessage对象
Session session; //邮件会话
boolean needAuth=false; //smtp是否需要认证
String filename=""; //设置文件名
String host=""; //smtp地址
String username=""; //smtp认证用户名
String password=""; //smtp认证用户密码
String subject=""; //邮件主题
String personalname=""; //邮件发送人姓名
String body=""; //邮件正文
String charset=""; //邮件字符集
String mailhead=""; //邮件头
String mailFrom=""; //发件人地址
String mailTo=""; //收件人地址
2)获取stmp邮件服务器地址,通过设定系统属性完成,主要使用的函数是getProperties()和setProperty(),或者put增加系统属性。脚本如下:
//获得smtp环境主机地址,端口host=mail.***.com,username为发件人姓名
props=System.getProperties();
props.setProperty("mail.smtp.host",host);
props.setProperty("mail.smtp.port","25");
3)设置邮件内容
设置邮件正文:
addbody()
mp= new MimeMultipart();
BodyPart bp=new MimeBodyPart();
bp.setContent("<meta http-equiv=Content-Type content=text/html; charset=gb2312>"+body, "text/html;charset=GB2312");
mp.addBodyPart(bp);
设置邮件附件
addFileAffix
mp= new MimeMultipart();
BodyPart bp=new MimeBodyPart();
FileDataSource fileds=new FileDataSource(filename);
bp.setDataHandler(new DataHandler(fileds));
bp.setFileName(fileds.getName());
mp.addBodyPart(bp);
设置邮件总体信息
mailContent()
session=Session.getInstance(props,null);
msg=new MimeMessage(session);
mp= new MimeMultipart();
addbody();
addFileAffix(filename);
InternetAddress[] to = new InternetAddress[1];
InternetAddress from = new InternetAddress(mailFrom,personalname,charset);
to[0] =new InternetAddress(mailTo,personalname,charset);//可设置多个
msg.setContent(mp);
msg.setFrom(from);
msg.setRecipients(Message.RecipientType.TO,to);
msg.setSubject(subject,charset);
msg.setSentDate(new Date());
4)发送邮件
sendmail()
SMTPTransport t = (SMTPTransport)session.getTransport(needAuth ? "smtps" : "smtp");
t.connect(host,username,password);
t.sendMessage(msg, msg.getAllRecipients());
t.close();
5)在action中调用其他方法实现邮件发送
SetMail();
SetSmtpHost();
try
{
mailContent();
sendMail();
}
catch (Exception e)
{
e.printStackTrace();
}
3、如何优化脚本实现测试目的。
1)参数化
将初始化部分使用loadrunner的parameter方式进行参数化。
如发件人,收件人,抄送人,邮件内容,附件等
2)设定事务
将发送邮件部分设定成事务,获取事务处理的时间值。
3)打出适当日志
打出适当日志能够获取当前的事务状态。
4)在场景中使用模拟多用户或多个附件等传送,以吞吐量确定系统处理能力。
4、存在缺点
参数化简单。
如果在场景中设置使用其它机器作为负载机时,则其它机器的java环境变量必须与runtime setting中一致,很容易出现错误无法定位问题。使用本机作为负载机情况下未出现什么问题。 |
|