(十一)性能測試從零開始——LoadRunner入門

 

8.3  VU Java Vuser自開發SMTP程序
        從上節的學習可知,VU可以使用SMTP Vuser來錄製生成基於SMTP協議的腳本,這對於剛入門的測試工程師來說非常快捷和高效,但同時也爲調試腳本帶來一定困難,尤其是郵件中包含一些非英文字符,在dat文件中都是編碼後的字節,難以維護和修改。在這種情況下,如果性能測試工程師具有一定的開發經驗和技術,就可以考慮使用Java Vuser自主開發Java程序來達到相同的目的。
8.3.1  VU創建Java模板虛擬用戶
        我們首先需要創建Java Vuser,然後在Java Vuser環境下加載或開發Java程序。 
        啓動VU,在“File”菜單下選擇“New”,在彈出的Vuser列表中選擇“Java Vuser”,如圖8-16所示。

1.JPG

圖8-16  在虛擬用戶列表中選擇“Java Vuser”
        單擊“OK”按鈕,在VU腳本中我們看到生成如下模板腳本:
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
}
        由上可見,Java Vuser中的Int()、action()、end()函數和C Vuser中的vuser_init、action、vuser_end一樣,迭代的設置只對action生效,而對init和end無效。我們的開發主要在action函數中完成。

8.3.2  設置Java環境
        我們知道Java環境最主要的參數有兩個:一個是Java虛擬機path,另一個是classpath。
        打開Vuser的運行時設置(Run-time Settings)窗口,選擇Java VM,如圖8-17所示。

2.JPG

圖8-17  運行時設置中的Java VM配置頁面
        這裏如果Xbootclasspath沒有特殊的參數設置,對此頁面不要做任何修改。因爲VU將自動從path中獲得Java虛擬機的路徑。
        單擊“Classpath”,顯示如圖8-18所示的配置頁面。
        對於SMTP協議,Java開源組織已經提供了很多相關package封裝,我們可以在Internet上下載,比如在jakarta網站。
        我們在這裏添加3個mail的jar包,即mail.jar、poi.jar和jakarta-oro-2.0.8.jar。單擊“OK”按鈕,關閉“Run-time Settings”窗口。

3.JPG

圖8-18  運行時設置中的Java Classpath配置頁面
        單擊VU運行按鈕,編譯運行通過,驗證我們的設置是正確的。

8.3.3  在Java Vuser中開發SMTP發送mail腳本
        首先我們需要在Java文件頭進行import聲明,包含相關package。
import lrapi.lr;
import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.*;
import org.apache.poi.hssf.usermodel.*;
import com.sun.mail.smtp.*;
        再次運行腳本,以驗證import是否成功,否則Java會報錯,顯示package找不到。
        在action函數中編寫發送郵件的Java代碼,如下:
public int action() {
 
     boolean ssl = false;
     //獲得SMTP環境
     Properties props = System.getProperties();
     //設置SMTP主機地址
     props.put("mail.smtp.host", "192.168.1.100");
     //設置SMTP端口號
     props.put("mail.smtp.port","25");
     //設置SMTP用戶名
     props.put("mail.smtp.user","test1");
     Session session=Session.getInstance(System.getProperties(),null);
     //設置郵件header字段
     String mailer = "send from VU java SMTP";
     //設置收件人
     String sendTo = "[email protected]";
     //設置抄送人
     String sendCC = "[email protected]";
     //設置發件人
     String sendFrom = "[email protected]";
     try{
        //獲得發送實體
        SMTPTransport t = (SMTPTransport)session.getTransport(ssl ? "smtps" : "smtp");
        //與SMTP主機相連
        t.connect("192.168.1.100","test1","123456");
        MimeMessage msg = new MimeMessage(session);
        //設置郵件各個字段
        String subject = "testing mail subject";
        String personalName = "LR JAVA Vuser";
        String body = "testing mail body";
        String charset = "utf-8";
        InternetAddress[] to = new InternetAddress[1];
        InternetAddress from = new
    InternetAddress(sendFrom,personalName,charset);
        to[0] =new InternetAddress(sendTo,personalName,charset);
        msg.setFrom(from);
        msg.setRecipients(Message.RecipientType.TO,to);
        msg.setSubject(subject,charset);
        msg.setText(body,charset);
        msg.setSentDate(new Date()); 
        //發送郵件
        t.sendMessage(msg, msg.getAllRecipients());
    }
    catch (Exception e){
        e.printStackTrace();
    }
    return 0;
}//end of action
        以上代碼運行成功後,Outlook即可收到一封郵件,如圖8-19所示。

4.JPG

圖8-19  Java Vuser成功回放腳本併發送郵件

8.3.4  參數化增強腳本
        以上腳本中的配置信息和郵件字段信息可使用參數化方法,轉移到參數表中存儲。參數化後,代碼有如下變化:
public int action() {

    boolean ssl = false;
     //獲得SMTP環境
     Properties props = System.getProperties();
     //設置SMTP主機地址
     props.put("mail.smtp.host", "<SMTPHost>");
     //設置SMTP端口號
     props.put("mail.smtp.port","<SMTPPort>");
     //設置SMTP用戶名
     props.put("mail.smtp.user","<UserName>");
     Session session=Session.getInstance(System.getProperties(),null);   
     //設置郵件header字段
     String mailer = "<MailHeadere>";
     //設置收件人
     String sendTo = "<SendTo>";
     //設置抄送人
     String sendCC = "<sendCC>";
     //設置發件人
     String sendFrom = "<sendFrom>";
     try{
        //獲得發送實體
        SMTPTransport t = (SMTPTransport)session.getTransport(ssl ? "smtps" : "smtp");
        //與SMTP主機相連
        t.connect("<SMTPHost>","<UserName>","<Passwd>");
        MimeMessage msg = new MimeMessage(session);
        //設置郵件各個字段
        String subject = "<mailSubject>";
        String personalName = "<PersonalName>";
        String body = "<mailBody>";
        String charset = "utf-8";
        InternetAddress[] to = new InternetAddress[1];
        InternetAddress from = new
    InternetAddress(sendFrom,personalName,charset);
        to[0] =new InternetAddress(sendTo,personalName,charset);
        msg.setFrom(from);
        msg.setRecipients(Message.RecipientType.TO,to);
        msg.setSubject(subject,charset);
        msg.setText(body,charset);
        msg.setSentDate(new Date()); 
        //發送郵件
        t.sendMessage(msg, msg.getAllRecipients());
     }
    catch (Exception e){
        e.printStackTrace();
    }

     return 0;
}//end of action
參數化後,驗證腳本,能夠通過。
        我們就可以在參數表中更改測試數據,發送不同字符的郵件了!
中文郵件:如圖8-20所示。

5.JPG

圖8-20  Java Vuser參數化後成功發送中文郵件
日文郵件:如圖8-21所示。
        由此可見,通過Java Vuser的自開發程序代碼,腳本的靈活性大大增強。這是錄製腳本無法比擬的優勢。
        錄製和開發是VU生成腳本的兩種方式,我們應該根據項目需求、時間、資源等綜合因素考慮選擇最合適的方式。

6.JPG

圖8-21  Java Vuser參數化後成功發送日文郵件

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章