51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 6726|回复: 11
打印 上一主题 下一主题

[原创] 结合资料整理了loadrunner java vuser实现smtp邮件发送的脚本

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2009-4-10 16:31:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这种方式是把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中一致,很容易出现错误无法定位问题。使用本机作为负载机情况下未出现什么问题。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1
回复

使用道具 举报

该用户从未签到

2#
发表于 2009-4-16 16:50:23 | 只看该作者
不错,太好了
回复 支持 反对

使用道具 举报

  • TA的每日心情

    2016-12-30 10:59
  • 签到天数: 6 天

    连续签到: 1 天

    [LV.2]测试排长

    3#
    发表于 2009-4-16 17:06:50 | 只看该作者
    不错不错。。。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    4#
    发表于 2009-4-16 23:38:17 | 只看该作者
    怎么看上去像是性能测试从零开始里面的内容。。。其实smtp协议直接录制就行了,干嘛调用java啊,多麻烦。。。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    5#
     楼主| 发表于 2009-4-17 10:16:26 | 只看该作者

    回复 4# 的帖子

    题目都写了是结合资料了,思路自然都是一样;再说都是javamail能有多少差别。
    主要看你动不动手去实践。
    直接录有直接录的好处,不同需求不同方法,如果不实验怎么知道哪种方法好。按需索取也没什么不好。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    6#
    发表于 2009-4-29 13:35:50 | 只看该作者
    支持楼主,呵呵
    这样比直接用协议录制灵活多了,如果再加上java的多线程,就可以不用loadrunner,实现比较简单的性能测试了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    7#
    发表于 2009-4-29 13:46:28 | 只看该作者
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    8#
    发表于 2009-4-29 15:16:44 | 只看该作者
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    9#
    发表于 2009-4-29 15:44:15 | 只看该作者
    要的就是这样专业的东东!!!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    10#
    发表于 2010-4-14 16:13:25 | 只看该作者
    恩很好,谢谢了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    11#
    发表于 2011-9-22 10:53:22 | 只看该作者
    真怕自己把用户名密码忘记了呢,最近都在研究LR 基于java  Vuser的话题
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2015-7-24 09:36
  • 签到天数: 54 天

    连续签到: 1 天

    [LV.5]测试团长

    12#
    发表于 2014-10-13 15:28:04 | 只看该作者
    给力,谢谢整理分享
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-5-5 18:45 , Processed in 0.084932 second(s), 27 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表