相信软件测试工程师都知道,在进行邮件服务协议录制时,这里采用两种常见的协议进行录制:POP3和SMTP。这两个协议的区别是:POP3是负责收邮件的,SMTP是负责发邮件的。
这里涉及到的软件有:客户端使用Foxmail软件,邮件服务器使用TurboMail软件。在此进行一个简单的实验,将客户端和服务器安装到同一台机器上,但这并不影响后面的实验。当然实际情况下,服务器和客户端一般都是分开的,具体的网络结构拓扑图如图12-12所示。
图12-12 邮件服务器
运行LoadRunner的脚本录制器VuGen,选择New Multiple Portocol Script双协议,同时选择POP3和SMTP两种协议进行录制,如图12-13所示。
在录制程序对话框中设置需要录制的程序,这里需要录制的是Foxmail程序。这时LoadRunner会自动激活Foxmail程序。Foxmail程序运行后,撰写一封邮件并发送。此时发现一个意外的现象,录制过程中LoadRunner的那个浮动小窗口的标题栏一直显示“0 events”事件字样,这表明LoadRunner并没有捕获到网络通信包。停止录制后,发现里面没有生成相关的脚本语言。
当然这种情况可能并不是每个人都会遇到。在网上也看到很多朋友遇到过类似的情况。如果录制不下来,那么使用LoadRunner进行性能测试的希望就变成了泡影。并且没有任何规律,表明什么时候能把脚本录制下来,什么时候录制不下来。一切都是凭运气。
为了解决这种情况下面介绍一种新的录制方法——Port Mapping录制。
图12-13 选择协议
选择录制协议的过程还是不变,接着选择录制的程序,在这里不再选择Foxmail.exe,而是选择LoadRunner安装目录下\bin\wplus_init_wsock.exe程序,如图12-14所示。
图12-14 设置录制程序
点击 按钮,弹出Recording Options对话框。选择Port Mapping并点击 按钮,弹出Server Entry对话框。对其进行如图12-15所示的设置。
各设置项具体含义如下:
Target Server(目标服务器):选择邮件服务器的地址,可以输入IP地址或域名地址,如mail.myspace.com。
图12-15 设置代理
Port(端口号):设置服务ID,这里是POP3协议,所以端口号为110。
Service ID(服务ID):选择需要的协议,这里设置为POP3。
Record Type(录制方式):选择录制方式有代理和直接两种,这里设置为代理。
Traffic Forwarding:将Allow forwarding to target server from local port复选框选中,并设置一个端口。这个端口可以随便设置,这里设置为22。
这些设置项是什么意思呢?LoadRunner录制过程中,首先得到的是22端口的请求,得到22端口请求后,将22端口请求转发到127.0.0.1的110端口。其原理如图12-16所示。
使用同样的方法,设置好SMTP代理。
接下来要对Foxmail进行一些设置。进入“邮箱账户设置”对话框,选择“邮件服务器”属性,将发送邮件服务器(SMTP)和POP3服务器的地址都设置为127.0.0.1或localhost,如图12-17所示。
再在“邮箱账户设置”对话框点击“高级”按钮,进入“高级设置”界面。将SMTP服务器端口和POP3服务器端口分别设置为22和21。22和21是在设置LoadRunner录制选项中Traffic Forwarding的端口号,如图12-18所示。
图12-16 LoadRunner代理过程
图12-17 设置邮箱服务器地址
图12-18 设置服务器端口号
设置完成之后,可以开始录制了,开始录制后,LoadRunner会激活wplus_init_wsock.exe程序,这是一个代理服务器程序,如图12-19所示。
图12-19 服务器代理程序
这时LoadRunner会做一些初始化的工作,会发现在没有做任何动作的情况下LoadRunner就已经捕获了网络通信包,如图12-20所示。
图12-20 网络通信包
进行收取一封邮件操作。根据设置,Foxmail会向127.0.0.1即本机21端口发送POP3命令。这些命令会被wplus_init_wsock.exe捕获,wplus_init_wsock.exe捕获后会将这些命令转发到mail.myspace.com的110端口。这才是真正的邮件服务器,邮件服务器把信取出后,发给wplus_init_wsock.exe,然后wplus_init_wsock.exe把信转发给Foxmail。结果就是Foxmail里面正确地收取到了邮件。
此时LoadRunner显示捕获了35个网络包。扣除上面19个,实际上捕获了35-19=16个网络包。这些网络包就是Foxmail发出的取信请求和邮件服务器传递给Foxmail的邮件,只是这些请求是经过wplus_init_wsock.exe这个代理程序进行转发的。wplus_init_wsock.exe转发的同时,会把这些通信包记录下来,并转化成脚本,这就是LoadRunner录制脚本的真正秘密。
录制结束后,应该把代理程序wplus_init_wsock.exe关闭掉,否则再次录制时,由于端口被占用,导致录制无法进行。
通过这个录制过程,可以看出LoadRunner录制脚本的方式是基于代理(proxy)的方式。只不过在典型的录制方式中,proxy是看不见的,或者说不用处理录制方式,称之为“隐式proxy录制方式”。而这里介绍的方式称之为“显式proxy录制方式”。另外一种录制方式是基于以太网的Sniffer方式,利用以太网的通信特性,采用侦听的方式。网上偷窥别人MSN聊天的MSN嗅探器就是基于这个原理。但是这种Sinffer方式的最大缺陷是录制的客户端和服务器必须在同一个以太网段内。Proxy方式则不受这个限制,甚至可以录制UNIX与UNIX之间的通信,即客户端和服务器都是运行UNIX系统下的录制工作。因此Proxy更加具有通用性。
录制完成后生成如下脚本,录制的业务是使用Foxmail发送一封邮件,邮件的接收方为自己,并使用Foxmail收取邮件。
Action()
{
smtp1 = 0;
smtp_logon_ex(&smtp1, "SmtpLogon",
"URL=smtp://test:1234567@127.0.0.1",
"CommonName=LoadRunner User",
LAST);
smtp_send_mail_ex(&smtp1, "SendMail",
"To=test@myspace.com",
"From= SIZE=1443",
"Subject=Hello",
"ContentType=multipart/alternative;",
MAILOPTIONS,
"From: \"test\" ",
"To: \"test\" ",
"X-mailer: Foxmail 6, 15, 201, 22 [cn]",
MAILDATA,
"AttachRawFile=mailnote1_01.dat",
"AttachRawFile=mailnote1_02.dat",
LAST);
smtp_logout_ex(&smtp1);
smtp_free_ex(&smtp1);
pop31 = 0;
pop3_logon_ex(&pop31, "Pop3Logon",
"URL=pop3://test:1234567@127.0.0.1",
LAST);
pop3_command_ex(&pop31, "Pop3Command",
"Command=STAT",
LAST);
pop3_list_ex(&pop31, "Pop3List",
LAST);
pop3_retrieve_ex(&pop31, "RetrieveMail",
"RetrieveList=1",
"DeleteMail=No",
LAST);
pop3_logoff_ex(&pop31);
pop3_free_ex(&pop31);
return 0;
}
附:川石信息全国校区最新开班时间,课程资料获取13691729932(微信同号)。