平平庸庸

响应号召,开始写日志(一):DNS虚拟用户制作

上一篇 / 下一篇  2009-03-18 11:48:41 / 个人分类:测试工具

1.    正文

本文从一下三方面来描述DNS虚拟用户的制作:

l        使用的工具

l        脚本中关键的语句

l        工具关键配置

1.1    使用的工具

名称:loadrunner9.0

Licensegolba

协议:ALL protocolsàDomain name resolutionDNS

NotelrDNS协议是一个低级别的协议。DNS协议模拟用户访问域名服务器来解析主机名称与IP地址。使用此协议需要手动的修改lr自动生成的脚本文件而不是通过录制来获得脚本。

1.2    脚本中的关键语句

lr中,当选择新建了DNS协议得虚拟用户后,lr自动生成4个文件vuser_init,action,vuser_end,globals.h.

其中唯一不同是action部分自动添加如下脚本:

#include "mic_socket.h"

// -------------------------------------------------------------------------------

// DNS - Domain Name Service Vuser

//      This virtual user script. is designed to test hostname resolution against

//      DNS servers. If a host address resolves to multiple addresses, all

//      addresses are displayed in the output.

//

// Usage Notes:

//      {DnsServer} - IP Address of a Domain Name Server

//      {Hostname} - Name of host to resolve IP address for

//

// -------------------------------------------------------------------------------

 

Action()

{

  char *results = NULL;

  int  rescnt = 0;

 

  lr_save_string("199.35.107.2","DnsServer");     // Set DNS server IP Address

  lr_save_string("www.merc-int.com", "Hostname");  // Set hostname to resolve

 

  // Perform. DNS Query(执行dns查询)

  results = (char *) ms_dns_query("DnsQuery",

                    "URL=dns://{DnsServer}",

                    "QueryHost={Hostname}",

           LAST);

 

  // List all the results... (if more than one)(打印查询结果)

  while (*results) {

           rescnt++;

           lr_log_message(

                    lr_eval_string("(%d) IP address for {Hostname} is %s"),

                    rescnt,

                    results);

           results = (char *) ms_dns_nextresult(results);

  }

  return 0;

}

 

我们可以按照其中的提示建立两个参数文件:

 

{ DnsServer }:需要测试的目标DNS服务器的ip地址

{Hostname}:需要DNS解析的ip地址。

 

 

函数

说明

ms_dns_query

这个函数使用dnsserver中指定的dns服务器来解析hostname中的域名。(This function does not automatically add the domain to the hostname —you need to include it explicitly.上面这句英文不十分理解

ms_dns_nextresult

ms_dns_query会返回一个指向一组域名和其ip地址的列表的指针。ms_dns_nextresult函数就是来将这个指针往下移动一格的。

 

很明显

  while (*results) {

           rescnt++;

           lr_log_message(

                    lr_eval_string("(%d) IP address for {Hostname} is %s"),

                    rescnt,

                    results);

           results = (char *) ms_dns_nextresult(results);

  }

 

这段是用来把获得的解析结果写到日志里面的。在场景中可以考虑忽略掉这句话以获得更集中的压力。经过测试去掉这句话可以提升大约23%的请求速度。可以通过在场景的run time setting选择send messages only when an error occurs来关闭lr_log_message

 

1.3    工具关键配置

 

Log配置

假设在脚本调试时需要知道返回的解析内容是否正确,那么按照自动生成的脚本中的样子打印日志。执行后的日志会显示在控制台和output.txt文件中。需要注意的是vugenrun time setting选择always send message

如果在执行场景后需要知道返回的解析内容是否正确,那么按照自动生成的脚本中的样子打印日志。执行后的日志会记录在res文件夹的log子目录中下的txt文件中。需要注意的是controllerrun time setting选择always send message。问题是这样会有N多的日志被记录在那里,影响执行效率的同时也不利用后期的查看。代替方案是使用lr_error_message代替原来脚本中的lr_log_message。此函数的效果是在抛出一个错误。你可以在controllersencrio status中看到这些error。同样的你可以在执行后的res目录中寻找output.mdb。其中的errormessage表中看到这些输出。(errormessage表不重复记录)。

 

结果补充:

TTL是 Time-to-live的缩写,即有效期或生存期,用来表明域名--IP对应关系在多长时间内有效,过了有效期就要重新去查询。
   TTL时间越长,缓存时间越长,更新越不容易及时生效。
   TTL设置的小一些,生效时间就会快一些,像门户通域名托管用户的TTL设置都是30秒,这样做的好处有很多,但是对门户通服务的要压力大一些。

 


TAG: 性能测试 LoadRunner

 

评分:0

我来说两句

Open Toolbar