友好连接

2008年10月14日星期二

天空软件10周年T恤创意大赛

十几年来中国IT业一路蹒跚走来,这个曾经让一代人疯狂的行业在悄然间改变了你身边的世界,影响着你的生活。这一路,许多人倒下,还有一些人坚持过来,天空软件站作为其中一个典型的IT网站伴随着中国IT业一同成长。如今天空软件站创业已有十周年,在这个极具有纪念性的日子里,天空软件站与六分T恤创意平台携手合作,诚挚邀请所有被IT影响着的朋友们聚集在一起,用平凡而又不可或缺的T恤为媒介,一起回顾IT那激情澎湃的过去,畅想无限可能的未来。

征稿范围:

围绕“IT十年”这一主题给你带来的任何联想展开T恤设计与IT经典口号(T标语)创作,回顾历史,畅想未来。为了使所有的爱好者都可以参与到这个活动中来,这个比赛不限制色彩和印刷方式,允许使用符合主题元素的一切设计方式。


需要注意的是:

不要在你的设计里使用“天空软件站”、六分网的名字和标示。这不是一个LOGO设计比赛。请围绕着“IT十年”这一主题展开联想,或回顾过去,或畅想未来,请尽情挥洒创意,不必拘泥于形式。

赞助单位介绍:

天空软件站是国内影响力最大的软件门户网站,每日访问量超过800万。拥有国内超过30家大型ISP的软件频道独家内容提供商。十年来,天空软件站一直致力于为中国用户提供全面的软件下载服务,也现已成为国内更新最快的软件信息发布中心。

组织机构:

赞助单位:天空软件站
承 办 方:六分T恤创意平台
媒体支持:视觉同盟 蓝色理想

大赛活动日程:

大赛活动时间: 9月1日开始接受上传
作品上传有效时间: 9月1日- 10月28日
作品投票有效时间: 9月1日- 11月18日
大赛结果公告日期: 12月18日后

作品评审规则:

本次大赛采取公平公开的网络投票方式,网络投票分数、评论的情况为参考标准之一。一个注册用户对同一件作品多次投票只计投票人的最后一次投票分数。为了限制网络投票的作弊现象,最终的评审解释权归主办方所有。

每件作品的参评时限:按照六分网的惯例每件作品自上传之日起有20天参评时间。20天后投票入口将自动关闭。

参赛步骤:

第一步:于活动期间上主办方活动页面注册用户并填写真实的姓名和联系方式。
第二步:仔细阅读设计说明,然后上传您的设计作品,通过主办单位的初审,符合大赛规定要求的作品将会被显示在六分网站上参加开放式的网络投票。每一件作品从上传日起,有20天评论日,20天后投票入口自动关闭。
第三步:获奖通知:奖项的初步投票结果出来后,主办方将会通知获胜的参赛者提交原始设计图案,请所有参赛者在注册会员时务必填写您的正确联系方式,以便大赛组委会能够及时地将获奖消息传达给您。如无法提供原始设计图的参赛者将被取消获奖资格。
第四步:大赛结果公告:最后的奖项结果将会在大赛结束后一个月后在主办单位的官方网站公布,奖项将会在大赛结果公告后颁发给获胜作品的作者。
作品格式要求:

上传至活动网站前请仔细阅读“大赛设计资料下载包”内的详细要求。请作者务必保留分辨率至少为300dpi或者矢量的原始设计图,以便获胜后凭原始图领取奖品。

原始设计图:使用adobe illustrator或者photoshop等软件均可。非矢量格式的图片实际大小至少为300dpi。设计完成后,请从“大赛设计资料下载包”内提供的体恤模版中选择适合的颜色,并将设计图移至选定的体恤模版上或者人物模特上以展示实际效果。

网上展示图:小图100*70像素,文件大小小于20kb, gif格式;大图640*800像素,文件大小小于400kb,jpg格式。

设计上传网址:
http://www.6-points.com/teemana/sports/sportsContent/
ff8080811b20375f011b25ab69e531f1.html (请注册并登录后提交设计)

奖项设置:

设计一等奖(1名):奖金5000元+获奖T恤一件+价值5000元折扣的T币
设计二等奖(2名):奖金1000元+获奖T恤一件+价值1000元折扣的T币
设计三等奖 (4名) :奖金500元+获奖T恤一件+价值500元折扣的T币
最佳标题语:(共10名):获奖纪念T恤一件+ 印有你的获奖标语的T恤一件+价值500元折扣的T币
最佳六友奖(不限名额):奖励大赛获选T恤一件+5.12爱国纪念T恤一件+价值1000元折扣的T币
奖项评选规则:

设计奖共七名:由此次大赛的评委小组选出 (网络投票30% 天空软件40% 特约媒体评委 30%)

最佳T标语:创造一句属于IT的经典标语。由上述评委组选出。

最佳六友奖:延续六分的比赛传统,对每一次积极参与六分活动的会员们,都会有机会获得最佳六友奖励。此奖项由“六分网”选出,每次活动最活跃的50名用户将获得此奖励。获选资格:积极为每一件作品评论,打分的用户。此奖项不限制名额上限。

评分标准:

评分标准为网络投票平均分占总成绩的60%,天空软件评委占评分的40%。

注意事项:

参赛作品必须是原创。若发现参赛作品著作权存在争议或瑕疵的,取消比赛资格。
本次大赛中获奖作品归属主办方,若作品在使用中其著作权存在争议,由提供作品的参赛者承担法律责任。参赛者请务必自己保存好高分辨率的原始设计图,如获奖后无法提交原始稿将被取消获奖资格。
所有参赛作品谢绝一稿多投,一经发现将取消获奖资格。
所有投稿作品,主办方拥有展示、展览、宣传和结集出版的权利,获奖设计将会被主办方采纳为产品图案。获奖者接受奖金被视为同意主办方对其作品的商业使用权。
此次活动最终解释权归主办单位。
如果发现参赛者的参赛作品违反了上述任何一条协议,经评审查证核实后,主办方有权立即取消其参赛资格;如已获奖励的,将全数追回。
大赛活动网址:www.6-points.com
六分官方博客: http://blog.sina.com.cn/6points/
六分QQ讨论群:60922664 群管理员:六分
咨询邮件:web[at]6-points.com (我们将在工作日内给您答复)

2008年10月9日星期四

Code Snippets for LoadRunner

1. How to choose the option randomly?
Description:

If one option needs to be chosen randomly in below figure, what can we do in LR?
图略


Solution:

1. Use web_reg_save_param with proper LB, RB and Ord=All to get all options’ value into an array.

2. Get a random value from array.

3. In next web_sumbit_form or web_url use the value.

Code:

Action()

{

//declare variables

int flightCount;

char Flight[100];

//replace with your web_reg_save_param

web_reg_save_param("flightList",

"LB=outboundFlight value=",

"RB=>",

"Ord=All", //Make sure Ord's value is All.

LAST);

//replace with your web submit or web url

web_submit_form("reservations.pl",

"Snapshot=t4.inf",ITEMDATA,

"Name=depart", "Value=Shanghai", ENDITEM,

"Name=arrive", "Value=Beijing", ENDITEM,

LAST);

//get the count of flightList array.

flightCount=atoi( lr_eval_string("{flightList_count}") );

/*save random flight to Flight string.

1 + rand() % flightCount: Generate a Random Number

{flightList_1}: get the first value in flightList

*/

sprintf (Flight,"{flightList_%d}",1 + rand() % flightCount );

//save Flight to String RandFlight

lr_save_string( lr_eval_string (Flight),"RandFlight" );

lr_message( lr_eval_string("{RandFlight}") );

//Use RandFlight in next step

web_submit_form("reservations.pl_2",

"Snapshot=t5.inf",ITEMDATA,

"Name=outboundFlight", "Value={RandFlight}", ENDITEM,

LAST);

return 0;

}

2. How to generate a unique input?
Description:

In the below figure we need to input unique values for the Username. How can we make sure that every username is unique during thousand iterations run?

Solution:

Controller will assign a unique VuserId to every Vuser when we start to run a Vuser. The following is two solutions we can use.

1. VuserId + iteration No

2. VuserId + Current Time (If name will be created twice in one iteration)

Code:

Action()

{

//declare variables

char testname[100];

char *VuserId;

//create a VuserId type parameter named RunningVuserId in Parameter list

VuserId=lr_eval_string("{RunningVuserId}");

//The value saved in ParamTimeStamp is the number of milliseconds since midnight January // 1st, 1970.

web_save_timestamp_param("ParamTimeStamp", LAST);

//Create testname as format: VuserId_ ParamTimeStamp.

strcpy(testname,VuserId);

strcat(testname,"_");

strcat(testname,lr_eval_string("{ParamTimeStamp}"));



lr_save_string(testname,"UniqueTestname");

lr_output_message("the value is %s", lr_eval_string("{UniqueTestname}"));

return 0;

}

3. How to check for download function?
Description:

Sometimes we do stress test that download a file from server. When we record this step, our script will generate web_url when we click download link or button. But when you replay it, this web_url always will pass and no file will actually be downloaded in the controller’s location. We can use web_reg_find to check whether we load page properly. How can we check here?

Solution:

The file won't be downloaded (Physically) to the folder but you can determine whether the request was successful or not by determining the size returned by the request. You can use the function "web_get_int_property" and "HTTP_INFO_DOWNLOAD_SIZE” option in that function to determine the size.

Code:

int flen;

//your web url that download file

// get the download file's size.

flen = web_get_int_property(HTTP_INFO_DOWNLOAD_SIZE);

if(flen > 0)

{

lr_end_transaction("S1_D_download", LR_AUTO);

}

else

{

lr_end_transaction("S1_D_download", LR_FAIL);

}



4. How to save file when you download in LR?
Description:

In case 3, if you also want to save the file to a location, what can be done?

Solution:

We can use web_reg_save_param to save all bytes downloaded from server and then these bytes could be written to a location.

Code:

int flen;

long filedes;

int i;



web_reg_save_param("FILED","LB=","RB=","Search=Body",LAST);

//your web url that download file



// get the download file's size.

flen = web_get_int_property(HTTP_INFO_DOWNLOAD_SIZE);

if(flen > 0)

{

//create a new file. If you run the script in controller, you can use unique //name in Case 2 to generate a unique file.

if((filedes = fopen("c:\\test.xls", "wb")) == NULL)

{

lr_output_message("Open File Failed!");

lr_end_transaction("file_download", LR_FAIL);

}

//write the data which are got from server to the file created in your

// location.

i = fwrite(lr_eval_string("{FILED}"), flen, 1, filedes);

lr_output_message("Successfully wrote %d", i );

lr_end_transaction("file_download", LR_AUTO);

fclose(filedes);

}

else

{

lr_end_transaction("S1_D_download", LR_FAIL);

}

5. How to get a substring in LR?
Description:

If the requirement demands us to parse a string, we can use LR_SAVE_VAR.

Solution: See code

Code:

Action()

{

char *mystr = "I come from Shanghai";

lr_save_var(mystr + 12, 8, 0, "Mycity");

lr_output_message("My city is %s",lr_eval_string("{Mycity}"));

return 0;

}



6. How to reformat date?
Description:

When we get some date, but the format is not our expectation, what can we do?

Solution: See code

Code:



char *ReqDate;

lr_save_string("10/11/2006","MyDate");

lr_save_var(lr_eval_string("{MyDate}"),2,0,"Date");

lr_save_var(lr_eval_string("{MyDate}")+3,2,0,"Month");

lr_save_var(lr_eval_string("{MyDate}")+6,4,0,"Year");

ReqDate = lr_eval_string("{Month}/{Date}/{Year}");

lr_output_message("date is %s",ReqDate);

你必须学会的几个常用网络测试命令

如果你是一个网络维护人员,那么肯定要经常处理网络故障,了解和掌握下面几个命令将会有助于您更快地检测到网络故障所在,从而节省时间,提高效率。

  Ping

  Ping是测试网络联接状况以及信息包发送和接收状况非常有用的工具,是网络测试最

  常用的命令。Ping向目标主机(地址)发送一个回送请求数据包,要求目标主机收到请求后给予答复,从而判断网络的响应时间和本机是否与目标主机(地址)联通。

  如果执行Ping不成功,则可以预测故障出现在以下几个方面:网线故障,网络适配器配置不正确,IP地址不正确。如果执行Ping成功而网络仍无法使用,那么问题很可能出在网络系统的软件配置方面,Ping成功只能保证本机与目标主机间存在一条连通的物理路径。

  命令格式:

  ping IP地址或主机名 [-t] [-a] [-n count] [-l size]

  参数含义:

  -t不停地向目标主机发送数据;

  -a 以IP地址格式来显示目标主机的网络地址 ;

  -n count 指定要Ping多少次,具体次数由count来指定 ;

  -l size 指定发送到目标主机的数据包的大小。

  例如当您的机器不能访问Internet,首先您想确认是否是本地局域网的故障。假定局域网的代理服务器IP地址为202.168.0.1,您可以使用Ping避免202.168.0.1命令查看本机是否和代理服务器联通。又如,测试本机的网卡是否正确安装的常用命令是ping 127.0.0.1。

  Tracert

  Tracert命令用来显示数据包到达目标主机所经过的路径,并显示到达每个节点的时间。命令功能同Ping类似,但它所获得的信息要比Ping命令详细得多,它把数据包所走的全部路径、节点的IP以及花费的时间都显示出来。该命令比较适用于大型网络。

  命令格式:

  tracert IP地址或主机名 [-d][-h maximumhops][-j host_list] [-w timeout]

  参数含义:

  -d 不解析目标主机的名字;

  -h maximum_hops 指定搜索到目标地址的最大跳跃数;

  -j host_list 按照主机列表中的地址释放源路由;

  -w timeout 指定超时时间间隔,程序默认的时间单位是毫秒。

  例如大家想要了解自己的计算机与目标主机www.cce.com.cn之间详细的传输路径信息,可以在MS-DOS方式输入tracertwww.cce.com.cn。

  如果我们在Tracert命令后面加上一些参数,还可以检测到其他更详细的信息,例如使用参数-d,可以指定程序在跟踪主机的路径信息时,同时也解析目标主机的域名。

  Netstat

  Netstat命令可以帮助网络管理员了解网络的整体使用情况。它可以显示当前正在活动的网络连接的详细信息,例如显示网络连接、路由表和网络接口信息,可以统计目前总共有哪些网络连接正在运行。

  利用命令参数,命令可以显示所有协议的使用状态,这些协议包括TCP协议、UDP协议以及IP协议等,另外还可以选择特定的协议并查看其具体信息,还能显示所有主机的端口号以及当前主机的详细路由信息。

  命令格式:

  netstat [-r] [-s] [-n] [-a]

  参数含义:

  -r 显示本机路由表的内容;

  -s 显示每个协议的使用状态(包括TCP协议、UDP协议、IP协议);

  -n 以数字表格形式显示地址和端口;

  -a 显示所有主机的端口号。

  ipconfig

  ipconfig命令以窗口的形式显示IP协议的具体配置信息,命令可以显示网络适配器的物理地址、主机的IP地址、子网掩码以及默认网关等,还可以查看主机名、DNS服务器、节点类型等相关信息。其中网络适配器的物理地址在检测网络错误时非常有用。

  命令格式:

  ipconfig[/?] [/all]

  参数含义:

  /all 显示所有的有关IP地址的配置信息;

  /batch [file] 将命令结果写入指定文件;

  /renew_ all 重试所有网络适配器;

  /release_all 释放所有网络适配器;

  /renew N 复位网络适配器 N;

  /release N 释放网络适配器 N。

LoadRunner如何获得参数化中每个关键字的搜索响应时间

在测试搜索引擎时我们一般采用大量的搜索关键字,有时有必要了解在并发访问的情况下每个关键字的响应时间,一般如果不对脚本进行处理的话你可以获得每个关键字的响应时间但是这些时间没有跟相应的关键字对应,所以对程序的调优没有什么大的帮助,这里介绍一种方法,可以让你知道在并发访问下每个关键字的响应时间。
解决办法是可以把搜索搜索的操作定义为一个事务,事务名也用参数值代替,这样就可以从测试结果中知道该关键字的响应时间了。举例如下:
#include "web_api.h"
Action()
{
lr_start_transaction(lr_eval_string("{SearchParam}"));
web_url("s",
"URL=http://www.baidu.com/s?wd={SearchParam}",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t1.inf",
"Mode=HTTP",
LAST);
lr_end_transaction(lr_eval_string("{SearchParam}"), LR_AUTO);
return 0;
}
这样就可以在场景运行时通过事务监视图中就可以看到每个关键字的所用的时间了。
这种方法的缺点是当关键字比较多时,监视器中行数会增多,可能导致Controller显示不下。
还有一种方法,示例如下:
#include "web_api.h"
Action(){
float trans_time;
lr_start_transaction("sousuo");
web_url("s",
"URL=http://www.baidu.com/s?wd={SearchParam}",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t1.inf",
"Mode=HTTP",
LAST);
trans_time = lr_get_transaction_duration("sousuo") * 1000;
lr_output_message("SearchParam:%s,duration:%fms",lr_eval_string("{SearchParam}"),trans_time);
lr_end_transaction("sousuo", LR_AUTO);
return 0;
}
一般使用这种方法比较好,可以把lr_output_message函数换为自定义的函数,把结果写到一个结果文件中去,注意写入的文件最好以vuser id来命名,这样可以保证同时只有一个进程在读写这个文件(这样一来不同的用户读写不同的文件,否则如果所有用户写入同一文件在用户数多的情况下并发可能造成对同一文件的访问共享违例,获得vuser id的函数为lr_whoami)。另外需要说明的是这里获得的事务时间可能比通过lr_start_transaction和lr_end_transaction获得的事务的时间要小一些,这是由于测试工具自身的原因造成的,可以不必理会。
同时,如果想知道查询过程中哪个关键字搜索结果错误,也可以加上验证点,同时可以再加一些代码,把搜索超过一定时间的关键字过滤出来。

使用LoadRunner监控Apache的步骤

Apache上的设置

打开\conf\httpd.conf,进行如下修改:

1、 设置允许查看Apache运行状态的主机

#

# Allow server status reports, with the URL of http://servername/server-status

# Change the ".your-domain.com" to match your domain to enable.

#

#取消一下代码前面的注释符号“#”,并且设置Order(顺序)为允许优先





SetHandler server-status



Order allow,deny



Deny from nothing



Allow from all





这样改变以后重新启动Apache在浏览器中输入http://servername/server-status就可以看到Apache运行时的信息,而输入http://servername/server-status?auto就会看到如下信息:

Total Accesses: 124





Total kBytes: 444





CPULoad: 3.32432





Uptime: 37





ReqPerSec: 3.35135





BytesPerSec: 12288





BytesPerReq: 3666.58





BusyWorkers: 1





IdleWorkers: 7





Scoreboard: ____W___.........................



看到这样的信息就表示修改成功,这样就可以使用LoadRunner监视Apache了。

以下两步跟使用LoadRunner监视Apache无关,可以跳过不看。

2、 改变Apache的设置,打开详细状态开关;

#

# ExtendedStatus controls whether Apache will generate "full" status

# information (ExtendedStatus On) or just basic information (ExtendedStatus

# Off) when the "server-status" handler is called. The default is Off.

#

#取消了下面一行前面的注释符号“#”



ExtendedStatus On



3、 有用的设置,查看各模块信息

#

# Allow remote server configuration reports, with the URL of

# http://servername/server-info (requires that mod_info.c be loaded).

# Change the ".example.com" to match your domain to enable.

#

#取消一下代码前面的注释符号“#”,并且设置Order(顺序)为允许优先







SetHandler server-info



Order allow,deny



Deny from nothing



Allow from all







二、LoadRunner上的设置

经过以上第一项设置以后就可以使用LoadRunner监控Apache的运行情况了,在LoadRunner可用的监视器中双击Web Server Resource Graphs下的Apache节点,然后在右边对应的窗口中添加Apache所在主机的IP地址,并且加入计数器后单击OK,这样就可以在LoadRunner中实时显示Apache的运行状态信息了。

注意:您可能收到如下消息【Monitor name :Apache. Parsing error, cannot find token: BusyServers. Measurement: BusyServers|192.168.0.186. Hints: 1) Such a measurement does not exist, or the html page may be different from the supported one. 2) Try to replace the Apache.cfg with appropriate Apache_.cfg file in \dat\monitors and rerun the application (entry point: CApacheMeasurement::NewData). [MsgId: MMSG-47479]】,这是由于要监视Apache的版本提供的计数器与LoadRunner默认的计数器不一致导致的。此时建议先关闭Controller,打开\dat\monitors下的apache.cfg文件(其它文件名类似Apache_.cfg的是Apache监视配置的备份,只有apache.cfg是生效的):

1、 修改Counter0=IdleServers为Counter0=IdleWorkers,同时修改注释信息Label0=#Idle Servers (Apache)为Label0=#Idle Workers (Apache),描述信息也建议修改;

2、 修改Counter4=BusyServers为Counter4=BusyWorkers,同时修改注释信息Label4=#Busy Servers (Apache)为Label4=#Busy Workers (Apache) ,描述信息也建议修改。

然后保存并关闭该文件,重新打开Controller并添加计数器,这样监视就正常了。