发布新日志

  • loadrunner 对接口进行测试

    bob123654 发布于 2011-12-26 10:26:49

    Action()
    {
       char * filename ="E:/test.txt"; //文件名称

       long file; //文件的句柄


       /*打开刚定义的问题,如果找不到就给出提示*/
       if ((file = fopen(filename, "wt+")) == NULL) { 
         lr_output_message ("Unable to create %s", filename); 
        }

        /*关联所有返回的数据,如果有错误的话,可以抓了进行分析*/
    web_reg_save_param("Return_All",
    "LB/IC=",
    "RB/IC=",
    "Ord=1",
    "NotFound=ERROR",
    "Search=All",
    LAST);

     /*针对关键字进行抓取,利用该参数来判断服务器返回值是否成功*/
        web_reg_save_param("Status",
    "LB/IC=status\":\"",
    "RB/IC=\"}",
    "Ord=1",
    "NotFound=ERROR",
    "Search=All",
    LAST);


    lr_think_time(10);


    web_url("ddz_pair.do",
    "URL=http://localhost:8080/kpclientservice/ddz_pair.do?JSON={要传送的消息体}",
    "Resource=0",
    "RecContentType=text/html",
    "Referer=",
    "Snapshot=t2.inf",
    "Mode=HTML",
    LAST);


    if (lr_eval_string("{Status}")!="1") {//因为消息体给出的是1是错误,2是正确,所有如果返回的状态值为1就报错


     //lr_output_message("返回的所有消息%s",lr_eval_string("{Return_All}"));
             fwrite(lr_eval_string("{Return_All}"),strlen(lr_eval_string("{Return_All}")),1,file);

    }

    return 0;

    }


    另附:c语言fopen函数

      fopen函数用来打开一个文件,其调用的一般形式为:
      文件指针名=fopen(文件名,使用文件方式);
      其中,
      “文件指针名”必须是被说明为FILE 类型的指针变量;
      “文件名”是被打开文件的文件名;
      “使用文件方式”是指文件的类型和操作要求。
      “文件名”是字符串常量或字符串数组
      例如:
      FILE *fp;
      fp=fopen("file a","r");
      其意义是在当前目录下打开文件file a,只允许进行“读”操作,并使fp指向该文件。
      又如:
      FILE *fphzk
      fphzk=fopen("c:\\hzk16","rb");
      其意义是打开C驱动器磁盘的根目录下的文件hzk16,这是一个二进制文件,只允许按二进制方式进行读操作。两个反斜线“\\ ”中的第一个表示转义字符,第二个表示根目录。
      使用文件的方式共有12种,下面给出了它们的符号和意义。
      文件使用方式
      意义
      “rt”
      只读打开一个文本文件,只允许读数据
      “wt”
      只写打开或建立一个文本文件,只允许写数据
      “at”
      追加打开一个文本文件,并在文件末尾写数据
      “rb”
      只读打开一个二进制文件,只允许读数据
      “wb”
      只写打开或建立一个二进制文件,只允许写数据
      “ab”
      追加打开一个二进制文件,并在文件末尾写数据
      “rt+”
      读写打开一个文本文件,允许读和写
      “wt+”
      读写打开或建立一个文本文件,允许读写
      “at+”
      读写打开一个文本文件,允许读,或在文件末追加数据
      “rb+”
      读写打开一个二进制文件,允许读和写
      “wb+”
      读写打开或建立一个二进制文件,允许读和写
      “ab+”
      读写打开一个二进制文件,允许读,或在文件末追加数据
      对于文件使用方式有以下几点说明:
      1) 文件使用方式由r,w,a,t,b,+六个字符拼成,各字符的含义是:
      r(read): 读
      w(write): 写
      a(append): 追加
      t(text): 文本文件,可省略不写
      b(binary): 二进制文件
      +: 读和写
      2) 凡用“r”打开一个文件时,该文件必须已经存在,且只能从该文件读出。
      3) 用“w”打开的文件只能向该文件写入。若打开的文件不存在,则以指定的文件名建立该文件,若打开的文件已经存在,则将该文件删去,重建一个新文件。
      4) 若要向一个已存在的文件追加新的信息,只能用“a”方式打开文件。但此时该文件必须是存在的,否则将会出错。
      5) 在打开一个文件时,如果出错,fopen将返回一个空指针值NULL。在程序中可以用这一信息来判别是否完成打开文件的工作,并作相应的处理。因此常用以下程序段打开文件:
      6) if((fp=fopen("c:\\hzk16","rb")==NULL)
      {
      printf("\nerror on open c:\\hzk16 file!");
      getch();
      exit(1);
      }
      这段程序的意义是,如果返回的指针为空,表示不能打开C盘根目录下的hzk16文件,则给出提示信息“error on open c:\ hzk16 file!”,下一行getch()的功能是从键盘输入一个字符,但不在屏幕上显示。在这里,该行的作用是等待,只有当用户从键盘敲任一键时,程序才继续执行,因此用户可利用这个等待时间阅读出错提示。敲键后执行exit(1)退出程序。
      7) 把一个文本文件读入内存时,要将ASCII码转换成二进制码,而把文件以文本方式写入磁盘时,也要把二进制码转换成ASCII码,因此文本文件的读写要花费较多的转换时间。对二进制文件的读写不存在这种转换。
      8) 标准输入文件(键盘),标准输出文件(显示器),标准出错输出(出错信息)是由系统打开的,可直接使用。


  • 初级-Linux查看命令大全

    aklszt 发布于 2011-04-21 09:49:37

    版权声明:可以任意转载,但转载时必须标明原作者charlee、原始链接http://tech.idv2.com/2008/01/11/linux-sysinfo-cmds/以及本声明。

    最近看了一些Linux命令行的文章,在系统信息查看方面学到不少命令。想起以前写过的一篇其实Linux这样用更简单,发现这些系统信息查看命令也可以总结出一篇小小的东西来了。

    另外这里还有非常多的命令,可以作为参考。

    系统

    # uname -a               # 查看内核/操作系统/CPU信息
    # head -n 1 /etc/issue   # 查看操作系统版本
    # cat /proc/cpuinfo      # 查看CPU信息
    # hostname               # 查看计算机名
    # lspci -tv              # 列出所有PCI设备
    # lsusb -tv              # 列出所有USB设备
    # lsmod                  # 列出加载的内核模块
    # env                    # 查看环境变量

    资源

    # free -m                # 查看内存使用量和交换区使用量
    # df -h                  # 查看各分区使用情况
    # du -sh <目录名>        # 查看指定目录的大小
    # grep MemTotal /proc/meminfo   # 查看内存总量
    # grep MemFree /proc/meminfo    # 查看空闲内存量
    # uptime                 # 查看系统运行时间、用户数、负载
    # cat /proc/loadavg      # 查看系统负载

    磁盘和分区

    # mount | column -t      # 查看挂接的分区状态
    # fdisk -l               # 查看所有分区
    # swapon -s              # 查看所有交换分区
    # hdparm -i /dev/hda     # 查看磁盘参数(仅适用于IDE设备)
    # dmesg | grep IDE       # 查看启动时IDE设备检测状况

    网络

    # ifconfig               # 查看所有网络接口的属性
    # iptables -L            # 查看防火墙设置
    # route -n               # 查看路由表
    # netstat -lntp          # 查看所有监听端口
    # netstat -antp          # 查看所有已经建立的连接
    # netstat -s             # 查看网络统计信息

    进程

    # ps -ef                 # 查看所有进程
    # top                    # 实时显示进程状态

    用户

    # w                      # 查看活动用户
    # id <用户名>            # 查看指定用户信息
    # last                   # 查看用户登录日志
    # cut -d: -f1 /etc/passwd   # 查看系统所有用户
    # cut -d: -f1 /etc/group    # 查看系统所有组
    # crontab -l             # 查看当前用户的计划任务

    服务

    # chkconfig --list       # 列出所有系统服务
    # chkconfig --list | grep on    # 列出所有启动的系统服务

    程序

    # rpm -qa                # 查看所有安装的软件包

  • 技术管理初体验

    liangjz 发布于 2008-03-22 10:41:35

     

     

    在技术管理方面,偶是绝对的新手。

    不过就像很多事情一样 ,都有人无师自通的 J ,可惜偶不算这种。

    以下都是偶的一些浅显见解。

     

    技术管理和纯技术工作还是有很大的不同

    1)      技术管理需要经常REVIEW 成员的成果,REVIEW的工作量取决于REVIEW的粒度,太细会把握不住重点且工作量大,太粗无法看出门道。由于要REVIEW 组员成果,需要对组员的工作领域有比较深刻的把握,故技术管理需要杂家 纯技术则一门心思把自己的事情做好,并偶尔帮忙请教的同事解决问题,在自己的领域专注得比较深

    2)      技术管理的重点在于把握人,要鼓励组员积极发挥主观能动性,及时发现组员的思想情绪变化,也需要授权给与组员充分的信任但还是需要REVIEW成果;纯技术则重点在于管事,把颗粒很细的事情解决掉,当然也有培养接口人的任务。

    3)      技术管理的绩效考核从团队业绩出发,一华为跳槽过来的哥们说的: 团队PKI 比个人PKI 更难出彩; 纯技术工作更多把自己的活做好,并影响周围人积极向前

    4)      技术管理的工作经常被打断,思路也随之被打断,故在时间管理上提出更高要求;纯技术则干扰少一些 ,技术管理者需要帮纯技术的同事创造一个尽少被干扰的环境

    5)      在技能要求方面,作为一个上通下达的角色,技术管理在领悟能力、沟通、协调等 软技能方面提出很高的要求,另外在某些时刻需要根据直觉决断 ;纯技术则需要在技术细节方面把握很到位

     

    技术管理方面碰到的一些容易困惑的问题

    1)      技术管理碰到最大的问题是资源短缺,如何平衡各方的需求成为一个最棘手的问题

    2)      绩效考核,技术工作很难单纯用数字量化,如何甄别组员的优秀,需要有伯乐的眼光

    3)      一直保持良好的团队激情、氛围。基层的技术管理者手上有的 赏的权利很小,手段多为肯定、赞扬组员的工作,呵呵,有时候这些手段是不够 J

    4)      技术管理如何协调团队内外的关系。外部期望值一般都很高 ,作为技术管理者在满足外部需求时,需要权衡团队的承担能力

    5)      怎样的领导风格最适合团队? 太严格,容易压抑;太宽松,容易散漫;太武断,容易听不见他人意见,太犹豫容易错失时机

    6)      技术管理,自身还需要承担很多技术工作,比如确定技术研究方向、解决技术问题,技术和管理分配的时间比率为多少最合适?

    7)      …..

    说到底,面对诸多问题,有一个度量把握的问题,这个很需要艺术。 也是偶的努力方向。

       

  • web软件测试碰到的难题

    liangjz 发布于 2008-05-25 15:36:21

    最近在整理测试难题,以及打算在跨子公司讨论、分享的话题。呵呵,大致列举一些

    1 如何清晰度量产品的测试质量?

       按测试覆盖率?按BUG遗漏数?按已经发现BUG的曲线图?哪些标准度量最合适

    2 如何为复杂产品/大型测试项目选取测试策略? 如
     
    镜像站点测试
    异地数据同步测试
    重构项目测试

    3 支持多浏览器(IE6/ie7/firefox...)/多OS软件如何测试?

    降低成本的测试方法有哪些?

    正交表测试方法满足我们的需求么?

    4 支持国际化语言版本的软件如何测试?如国际站网站支持英文,繁体版,马来西亚语言。
    降低成本的测试方法有哪些?

    5 如何在时间、进度压力下,最优选取测试集合?
    回归测试的面积多大算合理?

    6 如何提高估计测试时间的准确度?

    7 跨部门、跨公司的接口测试如何开展,以提高协调效率?

    如中文站和阿里软件贸易通状态接口,国际站和后台CRM 接口,

    8 如何有效度量测试工程师的绩效?

    9 生产环境依赖于外部昂贵的设备,在测试环境开展性能测试如何模拟?

    比如专用邮件服务器,图片服务器?

    10 生产环境的数据量巨大,如何剪裁合适的数据集作为性能测试基准数据?

    11 如何更快找到合适的测试人才?

    12 如何提高开发、测试双方的满意度?

    13 如何在没有单元测试代码情况下,度量代码测试覆盖率

    14 现有的软件测试平台更适合传统的大型软件测试,能否、如何定制更适合快速上线的WEB系统?

    如QC 的报表、需求管理2部分功能一直没有采用。

    15 项目管理、需求管理、缺陷管理多个系统入口, 并没有统一关联。另外代码与需求之间映射关系随着业务变更也难以一一映射

    ...待续

  • [论坛] 微软软件测试质量体系最佳实践课程

    liangjz 发布于 2008-06-06 21:54:03

    MSUP的课程。看了很是心动:)

    陆宏杰的课程偶旁听过,给你展现很多MS的东东。有兴趣的朋友请

    祥见:www.msup.com.cn



    陆宏杰 曾任微软亚洲工程院部门经理
    微软资深专家顾问,曾任职于微软亚洲工程院,十余年的软件开发、软件测试和团队管理经验,曾主管过多个大型复杂项目的开发和测试工作,尤其在自动化测试技术和测试管理方面积累了大量的实际项目经验。对于各种测试方法的重点、难点和实施技巧有深入的研究,其主持开发和测试的项目多次获得微软全球最高技术奖项和工程奖项,并获得msup 2007年度top one金牌分享大师、msup 2007年度软件企业内训最佳好评讲师。

    课题
    简述
    Topic 1
    对软件测试的理解
    (1)软件测试的最高境界是什么
    (2)测试驱动开发模式
    (3)测试是需要额外增加项目时间
    还是加速开发进度?
    (4)通过测试提高开发有效代码率
    (5)软件测试的存在阶段
    (6)怎样实施不间断测试
    (7)缺陷分类对开发管理支撑作用
    (8)软件风险的概念
    (9)测试的充分性准则
    要做好测试,首先要有深刻的理解,对实践中最重要、最容易混淆或最容易出问题的地方结合实例阐述,讲解将测试融入开发进程的实战策略以及自动化测试的部署策略。

    Topic 2
    测试计划
    (1)测试计划的制定策略
    (2)测试计划和需求分析之间的联系
    与配合
    (3)如何科学评定工作量、所需人数
    和各方面设备
    (6)测试范围的界定
    (7)测试目标的界定和考评
    (8)项目风险评估
    (9)测试过程中的假定和局限
    (11)被测对象特性描述
    (12)具备可操作性的发布标准
    (13)对验证粒度的管理和要求
    (14)通用方法/工具的建立
    (15)所需拓扑逻辑的定义
    (16)各种测试工具的比较和选择标准
    (17)怎样提高测试效率
    (18)如何组织和管理需求文档、设计文档和测试文档
    分析文档的核心价值和在软件项目中的作用,为什么要写文档?不写行不行?要写哪些文档?准备文档对项目整体进度的影响是什么?

    这部分内容将分别从测试执行者和测试管理者的角度分别出发,讲解如何制定能覆盖到细节的测试计划,文档对项目的实用价值,对文档质量的评审流程,以及准备资源的依据,并最终评定每一个测试人员的测试执行情况。

    Topic 3
    测试用例
    设计
    (1)黑盒测试
    (2)白盒测试
    (3)等价类划分法
    (4)边界值分析法
    (5)因果图法如何提高测试技术复用程度
    在众多测试用例中,验证的深度和白盒测试是测试活动中比较突出的难点,大部分理论中的描述不具有可操作性。这部分内容会着重讲解如何进行深度验证和解决白盒测试的难点,使得白盒测试可以真正得以实施,同时,介绍提高测试效率及效果的技术复用策略。

    Topic 4
    测试度量体系建立
    (1)缺陷库的建立
    (2)用例库的建立
    (3)测试结果库的建立
    (4)自动化测试体系
    (5)高效的工作流程
    (6)数据统计和数据挖掘
    (7)缺陷追踪体系 科学的测试管理
    通过对测试度量体系的构建,深入理解如何工程化实施大规模深度测试。

    Topic 5
    自动化测试
    方法及技巧
    (1)对功能测试的控制
    (2)黑盒/白盒测试的部署技巧
    (3)安全性测试的难点和特点
    (4)Help、手册和文档的测试分工
    (5)全球化和本地化测试
    (6)可用性测试定义
    (7)可扩展性测试
    (8)Geo/Political/Legal的测试方法
    (9)Logging/ Message format Tracing/Counters( Diagnos ability)
    (10)Testability的评估
    (11)Test Hooks高级测试方法
    (12)基于场景的测试
    (13)可靠性/耐久性测试
    (14)集成测试
    (15)交互性测试
    (16)兼容性测试
    (17)UE测试
    (18)性能测试的方法和要点
    (19)Benchmark
    (20)压力测试
    (21)性能测试和压力测试的区别
    (22)压力测试的难点和技巧
    (23)对系统的压力测试
    (24)对界面的压力测试
    (25)使用工具进行性能测试和压力测试
    这一章是自动化测试的重要实战部分,将对每一种测试方法的重点、难点和实施技巧进行讲解,用一个真实的企业级软件项目作为案例,讲解如何在一个真实项目中逐一实施这些测试方法,其中绝大部分的测试方法都以自动化测试的技术和实现方法来讲解。当所有的测试方法都部署完成,讲解何如把这些独立的测试方法和测试活动整合成自动化测试体系。从而实现缺陷预防的持续改进。

    Topic 6
    自动化测试体系
    (1)自动化测试对Bug的控制力度
    (2)多种自动化测试工具的分析
    (3)自动化测试的运行部署策略
    (4)数据驱动的测试
    (5)核心功能的自动化测试标准
    (6)Pass Rate:测试活动的重要标准
    (7)代码覆盖率检查,对测试质量的审查
    (8)自动化测试的缺陷跟踪
    (9)GUI测试自动化的难点和解决方法
    (10)自动化测试的自动化
    (11)如何将多种自动化测试工具和技术部署为一个复杂完备的大型质量保证体系
    这部分内容是核心中的核心,它是建立在前面用例设计、测试计划和各种测试方法的基础上的,可以说前面的内容都是在为这一块打基础,对于自动化测试来说,光有技术和工具还不够,需要工程化的综合使用,使之成为一个体系,甚至需要实现自动化测试的自动化。

    Topic 7
    测试管理
    (1)如何着手组建和优化测试团队?
    (2)一个测试团队必须的3种人才
    (3)产品Bug和测试Bug
    (4)如何从每一个细节控制测试进度和项目进度
    (5)如何协调测试团队和其他团队的配合
    (6)周期性测试的活动安排
    (7)测试人员的考评标准
    (8)测试纪律的制定策略
    (9)质量文化
    (10)对工作项的时间限定
    (11)数据统计和数据挖掘
    (12)如何制定项目计划,包括开发计划和测试计划
    (13)合理的里程碑及里程碑之间的工作计划
    (14)长期计划、中期计划、短期计划
    (15)Guideline和CheckList
    (16)在项目进度要求很紧的情况下如何保证测试的质量和完备性
    (17)作为一个管理者必须控制的3件大事
    (18)保持项目的持续成长
    没有科学的测试管理就不可能建立完备的质量保证体系,这部分内容分享在测试管理中的有效经验,通过流程控制与过程改进优化测试效率,保证测试质量,加强测试对于需求分析和开发过程以及技术应用的配合,从而完整实现测试驱动软件开

    [ 本帖最后由 liangjz 于 2008-6-6 21:55 编辑 ]
  • [论坛] 测试计划考虑的几点

    liangjz 发布于 2009-02-13 22:08:11

    测试计划最终结果把WBS有控制完成。测试计划符合SMART原则。

    1 选人:
    从几个纬度考虑
    (1) 尽量发挥技术特长
    (2) 结合项目兴趣
    (3) 技能高+ 技能低些的结合。涵盖项目所需技能。或者不完全具备,需要有学习能力强的排头兵

    2 工时估算

    这个是一个很难估算准确的活。因为一个项目充满变数。
    学会工作分解,然后再按每个功能点/测试范围乘一个冗余系数
    可以采用project, mindmap, excel等

    3 风险分析与规避
    通常测试项目风险
    1) 研发提交代码质量不高,冒烟测试失败
    2) 研发更改频繁,送测版本过多
    3) 需求文档或者设计书不够明确,QA 和需求/研发细化耗时
    4) QA 测试分析不够全面
    5) 性能问题分析以及调整影响面过大
    6) 测试的覆盖率过低
    7) 技术难题或者测试环境资源问题
    ...

    4 确定测试范围

    由于项目有外部耦合模块,要非常明确影响范围十分困难。
    通常做法: 用工具绘制调用网状图。或者分析正相关的模块结合自动化测试脚本确定测试范围

    5 确定测试策略

    确认系统是否需要性能测试,安全测试,兼容性测试,本地化测试...

    以及是否需要验证系统的高可用方案, 新旧系统平滑过渡方案 ,可扩展容量估算公式...。

    6 项目的工作约定

    比如采用的模版,沟通方式(IM/周会。。。),项目出现问题的解决流程
  • 极具挑战性的测试领域

    liangjz 发布于 2009-09-11 19:47:37

     测试工程师做到一定阶段,需要极强的创新能力及发散能力.

    可以考虑做的事情(部分为加分项):

     

    1) 架构及技术方案,设计评审

    如评审算法选择合理性,架构是否考虑可扩展性...

    2) bug 定位及提出fixed bug建议

    3) 性能诊断及瓶颈定位, 就是 profile 能力. 以及性能调优,容量建模及预测

    4) 大型复杂项目自动化框架建设

    5)复杂项目回归测试范围界定

          如从字节码角度出发追溯

    6)安全测试,fuzz测试及漏洞修复

    7)应对复杂多样的客户端os,浏览器,编程语言及服务器集群的大型分布式跨平台的应用测试. 如云计算平台

    8)根据bug 以及漏测缺陷, 反推残留的bug 地图

    9) 软件质量度量的维度及落地

    10)作为pm backup,从全局角度驱动项目质量提升

    11)研发测试代码 code review...

    12)...

     

     

      综合以上方向,测试做到高端,和研发高端是重合的.  需要具备研发的深厚功底以及测试的敏锐嗅觉,全局视觉, 极具挑战性

     

           事情做到极致,就能不断获得成就感….

     

  • 国内测试专业blog(部份),欢迎一起完善

    liangjz 发布于 2009-10-29 01:40:15

       偶对平常访问较多or有意思的专业测试blog做一个简单的分类,或许有错,也肯定有很多遗漏.呵呵,欢迎大家一起完善,给大家提供一些便利.

    Webx朱少民—质量管理

    http://blog.csdn.net/kerryzhu

    陈绍英--- 性能测试
     http://blog.csdn.net/chenshaoying

    段念---性能测试:
     http://www.guanhe.cn/
     http://guanhe.cnblogs.com/

    深圳oracle 朱波 –oracle测试,性能/自动化测试
    http://www.rickyzhu.com/

    陈雷-- 性能,管理 :
     http://jackei.cnblogs.com/

    柳胜(性能+自动化):
     http://www.cesoo.com/
     http://blog.csdn.net/namesliu/category/236043.aspx

    文斯(白盒):
    http://blog.csdn.net/vincetest/
     http://blog.csdn.net/wayne_chan/category/241332.aspx

    微软余正洋:
     http://blog.csdn.net/rogeryu/

    jack-测试架构:
     http://www.51testing.com/?uid-293557

    广东赛宝陈能技-自动化:
     http://blog.csdn.net/Testing_is_believing

    刘艳会—c++工具:
     http://www.51testing.com/?uid-10851

    于涌—性能测试:
     http://tester2test.cnblogs.com/

    深圳金蝶杨学明:
     http://mikeyond.cnblogs.com/

    秋阳-综合:

    http://www.cnitblog.com/qiuyangzh/category/375.html

    阳光:
    http://blog.csdn.net/Test_sunny

    微软李和恒:

     http://blog.csdn.net/papercrane
    微软安全测试:
       http://blog.csdn.net/goldcattle/

    楷子狐:
     http://hi.baidu.com/higkoo

    zee ---性能测试:
    http://www.7dtest.com/
    http://blog.csdn.net/zeeslo
    http://blog.csdn.net/zeeslo/category/215291.aspx


    盛大龚X—性能测试:
    http://blog.csdn.net/jacky8024
    http://blog.csai.cn/user1/37626/index.html

    成都四方辛凯:
     http://blog.csdn.net/nilxin/category/144266.aspx

    安全测试:
     http://www.51testing.com/?uid/59943

    51testing云层—性能测试

     http://www.51testing.com/?uid-104

    崔启亮---本地化:
     http://blog.csdn.net/giltworld/

    mayingbao—测试管理:
    http://mayingbao.cnblogs.com/

    贺炘:
     http://blog.csdn.net/hxcat

    小布播客---性能:
     http://wilson66.cublog.cn/
     
    阿里云刘新宇:
       http://blog.csdn.net/omomo/
      
    阿里巴巴 SQA :
     http://hi.baidu.com/jacob/blog/index/0

    阿里巴巴QA:
     http://www.51testing.com/index.php?uid-159438
    阿里云陈洪:
     http://hi.csdn.net/linkyou

    淘宝QA:
      http://www.51testing.com/?uid-84753

    阿里之家:
     http://fafeng.blogbus.com/


    陈卫俊:
    http://www.51testing.com/?uid/5534

    51testing朴春龙---LR:
    http://blog.csdn.net/piaocl

    宋峰---QTP自动化:
    http://www.51testing.com/?uid-35-action-spacelist-type-blog

    苏州风过无息---QTP自动化:
    http://www.51testing.com/?uid-3528

    更夫:
    http://www.51testing.com/?uid-1592

  • LINUX下查看CPU使用率的命令

    lily4205 发布于 2009-07-27 21:57:57

    1.top

    使用权限:所有使用者

    使用方式:top [-] [d delay] [q] [c] [S] [s] [i] [n] [b]

    说明:即时显示 process 的动态

    d : 改变显示的更新速度,或是在交谈式指令列( interactive command) s

    q : 没有任何延迟的显示速度,如果使用者是有 superuser 的权限,则 top 将会以最高的优先序执行

    c : 切换显示模式,共有两种模式,一是只显示执行档的名称,另一种是显示完整的路径与名称 S : 累积模式,会将己完成或消失的子行程 ( dead child process ) CPU time 累积起来

    s : 安全模式,将交谈式指令取消, 避免潜在的危机

    i : 不显示任何闲置 (idle) 或无用 (zombie) 的行程

    n : 更新的次数,完成后将会退出 top

    b : 批次档模式,搭配 "n" 参数一起使用,可以用来将 top 的结果输出到档案内

     

    范例:

    显示更新十次后退出 ;

    top -n 10

     

    使用者将不能利用交谈式指令来对行程下命令 :

    top -s

     

    将更新显示二次的结果输入到名称为 top.log 的档案里 :

    top -n 2 -b < top.log   

    另附一个命令简介linux traceroutewindows tracert两个命令相当,跟踪网络路由

     

    2.vmstat

    正如我们之前讨论的任何系统的性能比较都是基于基线的,并且监控CPU的性能就是以上3点,运行队列、CPU使用率和上下文切换。以下是一些对于CPU很普遍的性能要求:

    1. 对于每一个CPU来说运行队列不要超过3,例如,如果是双核CPU就不要超过6

    2. 如果CPU在满负荷运行,应该符合下列分布,

    a) User Time65%70%

    b) System Time30%35%

    c) Idle0%5%

    3. mpstat

    对于上下文切换要结合CPU使用率来看,如果CPU使用满足上述分布,大量的上下文切换也是可以接受的。

    常用的监视工具有:vmstat, top,dstatmpstat.

    # vmstat 1

    procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----

    r b swpd free buff cache si so bi bo in cs us sy id wa

    0 0 104300 16800 95328 72200 0 0 5 26 7 14 4 1 95 0

    0 0 104300 16800 95328 72200 0 0 0 24 1021 64 1 1 98 0

    0 0 104300 16800 95328 72200 0 0 0 0 1009 59 1 1 98 0

    r表示运行队列的大小,

    b表示由于IO等待而block的线程数量,

    in表示中断的数量,

    cs表示上下文切换的数量,

    us表示用户CPU时间,

    sys表示系统CPU时间,

    wa表示由于IO等待而是CPU处于idle状态的时间,

    id表示CPU处于idle状态的总时间。

    dstat可以给出每一个设备产生的中断数:

    # dstat -cip 1

    ----total-cpu-usage---- ----interrupts--- ---procs---

    usr sys idl wai hiq siq| 15 169 185 |run blk new

    6 1 91 2 0 0| 12 0 13   | 0 0 0

    1 0 99 0 0 0| 0     0   6 | 0 0 0

    0 0 100 0 0 0| 18 0   2 | 0 0 0

    0 0 100 0 0 0| 0     0   3 | 0 0 0

    我们可以看到这里有3个设备号15169185.设备名和设备号的关系我们可以参考文件/proc/interrupts, 这里185代表网卡eth1.

    # cat /proc/interrupts

    CPU0

    0: 1277238713 IO-APIC-edge timer

    6: 5 IO-APIC-edge floppy

    7: 0 IO-APIC-edge parport0

    8: 1 IO-APIC-edge rtc

    9: 1 IO-APIC-level acpi

    14: 6011913 IO-APIC-edge ide0

    15: 15761438 IO-APIC-edge ide1

    169: 26 IO-APIC-level Intel 82801BA-ICH2

    185: 16785489 IO-APIC-level eth1

    193: 0 IO-APIC-level uhci_hcd:usb1

    mpstat可以显示每个CPU的运行状况,比如系统有4CPU。我们可以看到:

    # mpstat –P ALL 1

    Linux 2.4.21-20.ELsmp (localhost.localdomain) 05/23/2006

    05:17:31 PM CPU %user %nice %system %idle intr/s

    05:17:32 PM all 0.00 0.00 3.19 96.53 13.27

    05:17:32 PM 0 0.00 0.00 0.00 100.00 0.00

    05:17:32 PM 1 1.12 0.00 12.73 86.15 13.27

    05:17:32 PM 2 0.00 0.00 0.00 100.00 0.00

    05:17:32 PM 3 0.00 0.00 0.00 100.00 0.00

    总结的说,CPU性能监控包含以下方面:

    检查系统的运行队列,确保每一个CPU的运行队列不大于3.

    确保CPU使用分布满足70/30原则(用户70%,系统30%)。

    如果系统时间过长,可能是因为频繁的调度和改变优先级。

    CPU Bound进程总是会被惩罚(降低优先级)而IO Bound进程总会被奖励(提高优先级)。

     

    4.prstat 命令

    要显示系统上当前运行的进程和项目的各种统计信息,请使用带有 -J 选项的 prstat 命令:

     

    % prstat -J

              PID USERNAME  SIZE   RSS STATE  PRI NICE      TIME  CPU PROCESS/NLWP

     21634 jtd      5512K 4848K cpu0    44    0   0:00.00 0.3% prstat/1

       324 root       29M   75M sleep   59    0   0:08.27 0.2% Xsun/1

     15497 jtd        48M   41M sleep   49    0   0:08.26 0.1% adeptedit/1

       328 root     2856K 2600K sleep   58    0   0:00.00 0.0% mibiisa/11

      1979 jtd      1568K 1352K sleep   49    0   0:00.00 0.0% csh/1

      1977 jtd      7256K 5512K sleep   49    0   0:00.00 0.0% dtterm/1

       192 root     3680K 2856K sleep   58    0   0:00.36 0.0% automountd/5

      1845 jtd        24M   22M sleep   49    0   0:00.29 0.0% dtmail/11

      1009 jtd      9864K 8384K sleep   49    0   0:00.59 0.0% dtwm/8

       114 root     1640K  704K sleep   58    0   0:01.16 0.0% in.routed/1

       180 daemon   2704K 1944K sleep   58    0   0:00.00 0.0% statd/4

       145 root     2120K 1520K sleep   58    0   0:00.00 0.0% ypbind/1

       181 root     1864K 1336K sleep   51    0   0:00.00 0.0% lockd/1

       173 root     2584K 2136K sleep   58    0   0:00.00 0.0% inetd/1

       135 root     2960K 1424K sleep    0    0   0:00.00 0.0% keyserv/4

    PROJID    NPROC  SIZE   RSS MEMORY      TIME  CPU PROJECT

        10       52  400M  271M    68%   0:11.45 0.4% booksite

         0       35  113M  129M    32%   0:10.46 0.2% system

     

    Total: 87 processes, 205 lwps, load averages: 0.05, 0.02, 0.02

    要显示系统上当前运行的进程和任务的各种统计信息,请使用带有 -T 选项的 prstat 命令:

     

    % prstat -T

       PID USERNAME  SIZE   RSS STATE  PRI NICE      TIME  CPU PROCESS/NLWP

     23023 root       26M   20M sleep   59    0   0:03:18 0.6% Xsun/1

     23476 jtd        51M   45M sleep   49    0   0:04:31 0.5% adeptedit/1

     23432 jtd      6928K 5064K sleep   59    0   0:00:00 0.1% dtterm/1

     28959 jtd        26M   18M sleep   49    0   0:00:18 0.0% .netscape.bin/1

     23116 jtd      9232K 8104K sleep   59    0   0:00:27 0.0% dtwm/5

     29010 jtd      5144K 4664K cpu0    59    0   0:00:00 0.0% prstat/1

       200 root     3096K 1024K sleep   59    0   0:00:00 0.0% lpsched/1

       161 root     2120K 1600K sleep   59    0   0:00:00 0.0% lockd/2

       170 root     5888K 4248K sleep   59    0   0:03:10 0.0% automountd/3

       132 root     2120K 1408K sleep   59    0   0:00:00 0.0% ypbind/1

       162 daemon   2504K 1936K sleep   59    0   0:00:00 0.0% statd/2

       146 root     2560K 2008K sleep   59    0   0:00:00 0.0% inetd/1

       122 root     2336K 1264K sleep   59    0   0:00:00 0.0% keyserv/2

       119 root     2336K 1496K sleep   59    0   0:00:02 0.0% rpcbind/1

       104 root     1664K  672K sleep   59    0   0:00:03 0.0% in.rdisc/1

    TASKID    NPROC  SIZE   RSS MEMORY      TIME  CPU PROJECT                    

       222       30  229M  161M    44%   0:05:54 0.6% group.staff                

       223        1   26M   20M   5.3%   0:03:18 0.6% group.staff                

        12        1   61M   33M   8.9%   0:00:31 0.0% group.staff                

         1       33   85M   53M    14%   0:03:33 0.0% system                     

     

    Total: 65 processes, 154 lwps, load averages: 0.04, 0.05, 0.06      


    -J -T 选项不能一起使用。

     

  • 31个用来测试你网站各项性能的免费在线工具

    lc448589698 发布于 2009-03-18 10:32:26

     你是否肯定你的网站完全兼容各大浏览器?是否知道多少秒可以打开你的网站? 是否可以自信地说你的网站根本就没有打不开的时候? 是否……
    虽然它看似不重要,但这些在一定程度上也对你的网站的访问量产生了影响 (其它一部分影响浏览量的原因及解决办法 )。这里列出了一份31 个我最喜爱的免费在线测试工具,你可以通过这些工具来测试你的网站,并根据结果对你的网站进行修改。

    网站代码验证 没人可以细致到保证自己的网站代码都是正确的,你可以通过以下测试来验证网站代码是否正确。

    1 .WDG HTML Validator
    一个很好的工具,能找出网站语法错误的地方,并标注出来,也可选择对网站上单独的每一页进行单页分析。( 强烈推荐

    2 .W3C Markup Validation Service
     
    HTML XHTML 都能进行代码测试,自称是互联网络上第一个(也是使用者最多的)的 HTML 验证工具。

    3 .W3C CSS Validation Service
     
    用于验证 css 源代码,能够标注出不好的 css 代码设计。例如:“Same colors for color and background-color in two contexts”

    4 .RUWF XML Syntax Checker 用于查找 XML 文件的错误。

    5 .W3C Feed Validation Service

    用于查找 Atom RSS feed 中的错误语法。( 这个我经常用到

    6 .W3C Link Checker

     用于搜寻查明你网站内的所有链接里是否有断链。( 强烈推荐

    7 .Juicy Studio Link Analyser
     
    测试网站内的链接的 URL 是否存在死链,与 W3C Link Checker 很类似。
    网站的使用性

    我们常常看到网站设计者把重点放在怎网站的吸引力上,而完全不考虑会不会影响来访者的使用,一个浏览难度很大的网页是注定要失败,要让你的来访者方便的得到他要的信息(从而成为重复访客),你的网站应当遵循 WCAG section 508 易用性规则。

    8 .Watchfire WebXACT
     
    所有严谨的设计师和开发者都必须使用的工具,它会生成一个非常详尽的报告书,包括:网站质量,易用性和隐私等。( 强烈推荐

    9 .ATRC Web Accessibility Checker 测试网站的 WCAG 2.0 Level2 兼容性,它会生成一份报告,提出一系列建议,如:如何提升页头,链接,数据,图表和文字的访问速度。

    10 .WAVE 3.0 Web Accessibility Tool 高度可定制的工具,它采用了图形化模型展示网站兼容性问题( WCAG 1.0 and section 508 )。( 强烈推荐

    11 .TAW Web Accessibility Test 测试网页是否存在冲突( WCAG 1.0 兼容性 ),通过图形模式生成一份依据 wcag 优先模式为基础的网站修改建议。

    12 . HiSoftware CynthiaSays portal 采用了非常严格的规则来测试网页( 根据 section 508 WCAG 1.0 规则 ),生成的报告也极为详细( 详细到很难看懂 )。

    13 .HERA Accessibility testing with Style 使用一种极为复杂但容易理解方式指出网页的 wcag1.0 兼容性问题。

    14 .Juicy Studio CSS Analyser 进行了色彩对比测试,以确保你的网站的色调会符合 WCAG 1.0 的要求。

    15 .Juiciy Studio Readability Test 分析你网站上的文字是否有语法错误或拼写错误等问题,容易让人理解不( 根据 the Flesch Reading Ease Flesch-Kincaid grade level algorithms 规则 )。( 适合英文网站使用 )

    网站的速度
    打开你的网站的速度快慢,是来访者会不会再次访问网站的关键因素,在一般情况下,一个网络不是很快的来访者是不愿意访问一个充满着图片、flash 动画、多媒体文件的网站。为了使你的网站覆盖人群的范围最大化,你必须优化你的网站,使它的打开速度尽可能的快。

    16 .Web Page Analyzer from Website Optimization 一个很好的工具,它在分析完一个网页后,会为减少加载时间提出优化建议,着重优化物体的数目,图片和网站的总体大小。( 强烈推荐

    17 .WebSitePulse Test Tools 有一系列的工具来确定网站的加载速度和主机信息。

    18 .Internet Supervision Url Check 从世界各地不同的服务器来测试你的网站的加载时间,用于确定是不是各地的来访者都能顺利快速的打开你得网站。
    浏览器模拟工具

    这是一个普遍的问题,因为现在有着很多的操作系统和浏览器,你得网站必须得兼容它们,但这绝不是一件容易的事。通过下列工具,你可以了解你得网站在各种浏览器上的显示效果。

    19 .Browsershots 能给出你的网站在不同浏览器下显示效果的截图,包括:Firefox Internet Explorer Windows )、Firefox Safari Mac OS X )、Iceweasal Konqueror Linux ),但是结果要在 1 - 3 小时后才能出来。

    20 .IE NetRenderer

    实时生成你的网站在 Internet Explorer 5.5 6.0 7.0 下的截图。

    21 .MobiReady Report

    分析使用手机访问网页的兼容性问题,会生成一份详细的报告,并提供了在两种不同类型的手机浏览器上你得网站可能显示的样子。
    搜索引擎优化 (SEO)
    一个网站,如果对搜索引擎有着比较好的友好度,一定会比较有竞争力。

    22 .UrlTrends
    会显示网站的访客是如何通过搜索引擎来到你的网站,还有各个流量是多少。这些数据是包括 Google, Yahoo, MSN, Alexa, AlltheWeb, AltaVista 和其他一些网站。( 强烈推荐

    23 .iWEBTOOL Backlink Checker
    一个很好的工具,它能找出有什么站点链接到你的站点,那些站点是什么类型的站点。

    24 .iWEBTOOL Multi-Rank Checker
    显示你网站的 Alexa Google PageRank 数值。

    25 .Microsoft adCenter Labs: Advertising and Keyword Research Tools
    一个极好的工具,用于分析和预测你网站的来访者和市场。( 强烈推荐

    26 .Domain Tools Whois lookup
    一个 WHOIS 网络工具。

    27 .SEO-Browser
    可以让你看到在搜索引擎眼里一样的网站( 去掉所有的美丽配件 )。

    28 .SEO Workers SEO Analysis Tool
    非常有用的工具,分析了网站上的各种分类特征,包括 meta. 标签、关键字密度及加载时间。( 强烈推荐

    29 .Seekport Seekbot
    可以分析网站的数据和内容,以得出搜索引擎会如何有效的解释分析的网站。

    30 .SEO Chat SEO Tools
    用以分析网站 Google adsense 盈利潜力,关键字密度,Meta. tag 等等……

    31 .Marketleap Search Engine Marketing Tools
    用来分析网页,让你知道你的网站检索、设定的关键字好不好。

     

  • Loadrunner最大承载用户数?

    qiguojie 发布于 2007-09-11 11:23:00

    Loadrunner性能测试指标分析

    (写完这篇总结,我自己都迷糊,希望有大大看到指点迷津一下,也希望各位看文的博友能提一些建议)

    响应博友们的建议,修改一下标题~~~

    PS:本人在51testing和sina blog上的文章全部为原创,转载请注明出处!!

    昨晚在家无所事事上网时,有个熬夜加班的网友问了我一个问题,如果估算系统一天的最大承载用户数?其实最近在做项目的过程中,我也是很迷茫(估计还是我WEB相关知识的匮乏,很多都不知道的原因),在和他讨论的过程中,心里也在不断的质疑自己的理解是否正确,结果讨论到最后,心里也没底,郁闷..

    今天在论坛里看到一个老帖:http://bbs.51testing.com/thread-10681-1-1.html
    发现很多牛人(PCL以及sunshinelius)的回复,仔细的琢磨了一下,觉得自己的思路还是没有错,下面整理一下:

    1、从其他项目经验库或者项目其他角色处获得的性能指标
    A、项目经验库
    前些日子拜读了csdn的一个专家的文章,他描述了一个完整的性能测试流程(虽然简单了点儿~),但是我还是从其中找到了一些我想要的东西,包括建立项目经验库;
    每次测试结束
    ◇把项目的性能指标(平均响应时间、最大用户数、最大并发数等web服务器或数据库的性能指标)收集起来,建立性能指标库
    ◇把脚本代码及相关文件(参数化数据文件)收集整理并存档(重点是可以重用的部分),建立脚本代码库
    ◇把测试方案场景设计(可能包含在测试计划里)收集整理,建立测试方案设计库
    ◇把测试结果(Analysis结果以及你的性能测试报告)收集整理,建立测试结果备份库
    ◇把项目性能调优过程(包括负载均衡配置、IIS或tomcat或apache的设置更改、应用程序调优更改、数据库配置调优方法等)记录下来,形成调优方法库
    如果仔细的建立上面的工作模式并积极积累,再经过5-10个左右的不同的项目,相信大家再做项目时,不能说是轻松,只能说是异常轻松了,呵呵
    至于怎么记录这些信息,使用什么工具比较好,各位自行挖掘!

    B、项目需求
    有经验的系统分析师或者架构师,在设计项目需求的时候都会包含项目的性能指标,这些指标是我们性能测试方案以及场景设计的主要参考

    C、模糊的目标
    不能否认的是,现在很多开发人员甚至开发经理,项目经理这些人物,其实对性能测试以及项目的性能指标概念也是非常模糊,他们的经验可能大多都没有规范的性能测试这块儿

    的,而在不同的公司结构里,这些人也会提出一些非常模糊的性能指标让我们来测试;就像文章开始的那位网友遇到的,她的领导大口一张,出来一个指标,汗!!通常这类模糊的目标,我们在测试的报告中都要提供,否则领导们会翻脸、PK、爆踹各位云云,没准儿也会sm哦!!那怎么解决呢??看pcl2004_27大大的一句话:
    “性能测试是个收集分析数据的过程”;
    所以,我们把模糊的性能指标合理的分析解释为LR的一些标准元素,这样我们就可以理解并且进行测试了!

    2、尝试把性能指标分析
    还是拿“如果估算系统一天的最大承载用户数?”为例子吧!首先:
    ◇这个所谓的用户数到底是啥东西?
    领导们的意思可能是真实的用户,而真实的用户对于我们来说几乎无法统计,所以这里我用虚拟用户来进行统计;
    要统计一天的用户数,我们必须分析虚拟用户的具体访问行为,我管这个指标叫“生命周期”:生命周期就是一个用户从登录到退出之间所做的操作,也就是迭代次数;
    比如:我们打开news.sina.com.cn,看了3个新闻后关闭,这就是一个用户的生命周期,在这个生命周期里虚拟用户做了3次迭代操作;比如说我们登录论坛后回帖5个后退出,这也是一个生命周期,在这个生命周期里虚拟用户做了5次迭代操作;这里恐怕有人就要问了,我登录论坛后,我可能发3个新帖,回5个帖,然后浏览20个别人的帖后才退出啊!这样,我们的分析就更必须复杂了,碰到这种情况,我通常把一个用户分成3个独立的用户行为,既第一个行为发了3个新帖,第二个行为回了5个帖,第三个行为浏览了20个别人的帖,用脚

    本实现如下:
    Action()
    {
       //发帖的脚本;
    }
    Action2()
    {
       //回帖的脚本;
    }
    Action3()
    {
       //浏览的脚本;
    }
    然后在runtime-setting里设置action的迭代次数为3,action2的迭代次数为5,action3的迭代次数为20,就搞定了一个虚拟用户的生命周期;但是因为LR不好统计一个vuser生命周期的处理速度(通常我们只是统计事务的响应时间,而我定义的用户生命周期如果包含很多action或事务,而且只能统计每个Action或者事务的TPS,那么我将无法统计整个生命周期的处理速度),所以,应该把所有的事务都放在一个大的事务里去,实现方法如下:
    Action()
    {
       int i,j,k;
       for(i=0;i<3;i++)
       {
             //发帖的脚本;
       }
       for(j=0;j<5;j++)
       {
             //回帖的脚本;
       }
       for(k=0;k<20;k++)
       {
             //浏览的脚本;
       }
    }
    这样,我就可以统计了。
    通过与项目其他角色的探讨与分析,讨论出目标系统的典型用户生命周期(记得加入思考时间模拟用户的真实访问),然后设计好脚本。

    ◇何为最大承载?
    既然是最大,那么就一定是一个极值;因为通常在负载量不断加大的情况下,服务器会有性能下降,从而造成处理能力下降和速度慢,所以我认为这个极值是处理典型用户的生命周期的最快速度。
    获取这个速度,我认为有以下几个方法(写完下面的我也很郁闷,汗~):
    可以用不断增加负载的加压场景测试出TPS最大值时的虚拟用户数,然后以这个虚拟用户数为目标,查看TPS是否趋于稳定并且可以达到那个最大值;
    可以以TPS为目标,建立一个较高的目标,然后加载足够的虚拟用户,查看TPS实际最大可以达到多少(因为在以目标的场景中,可能只加载几十个用户也能达到TPS最大值,郁闷);
    ◎也可以直接设计场景运行10分钟或者半小时,查看处理典型用户生命周期pass数(要在系统稳定的情况下,通常事务通过率应超过99%),然后除以时间算出典型用户生命周期的TPS.


    ◇算出一天的用户处理量
    假设那位网友测出这个速度为:N个典型用户的声明周期/秒(这里注意这个速度一定是趋于稳定的),这样我们就可以算出1天(24h)的时间内最快能处理完多少个典型用户生命周期的个数(N*60*60*24),从而得到系统一天的最大承载用户数。


    欢迎各位同行大拿批评指教,可直接在留言板留言,也可以加msn: qiguojie at hotmail dot com 或者 QQ 410225

  • loadrunner函数 lr_save_datetime

    qiguojie 发布于 2007-07-06 14:00:19

    loadrunner 获取当前系统时间(补充:函数lr_save_datetime)

    今天到51testing的blog里查看文章《Loadrunner获取当前系统时间》的回复,51testing的网友persist提到了一个lr函数实现的方法也可以实现,在这里非常感谢persist;只有

    交流和不断的学习,我们的技术水平才能进步哈!!

    本人在51testing的blog全部为原创,转载请注明!!

    扯的有点远了,还是看这个函数吧!!

     

    lr_save_datetime

    void lr_save_datetime(const char *format, int offset, const char *name);

    中文解释:
    lr_save_datetime将当前日期和时间,或具有指定偏移的日期和时间保存在参数中。如果达到MAX_DATETIME_LEN个字符,结果字符串将被截断。

    参数说明:
    1、const char *format
       格式化信息
       同fopen、lr_message等相同;例如:"the first is %s"

    2、int offset
       时间的偏移量
         DATE_NOW(现在的日期)
         TIME_NOW(现在的时间)
         ONE_DAY(一天的时间)
         ONE_HOUR(一小时的时间)
         ONE_MIN(一分钟的时间)

       需要注意的是,时间的偏移量可以使用公式,例如:DATE_NOW+ONE_DAY

       这样,我们就可以取得昨天、明天的日期了
         DATE_NOW-ONE_DAY(昨天)
         DATE_NOW+ONE_DAY(明天)

       那么,我们就可以使用如下表示得到前天的日期
         lr_save_datetime("%Y-%B-%d",DATE_NOW-2*(ONE_DAY),"abc");
         lr_save_datetime("%Y-%B-%d",DATE_NOW-2*24*(ONE_HOUR),"abc");
         lr_save_datetime("%Y-%B-%d",DATE_NOW-2*24*60*(ONE_MIN),"abc");

       当然,我们也可以使用如下表示2个小时后的时间
         lr_save_datetime("%H:%M:%S",TIME_NOW+2*(ONE_HOUR),"ab");   
         lr_save_datetime("%H:%M:%S",TIME_NOW+2*60*(ONE_MIN),"ab");
     

    3、const char *name
       参数保存的参数名;使用时lr_eval_string("{参数名}")

    示例如下:
    ===========================================
    Action()
    {
        lr_save_datetime("%y-%b-%d",DATE_NOW-2*24*(ONE_HOUR),"abc");
         //保存前天的日期到参数abc中
        lr_message("the day before yesterday is:%s",lr_eval_string("{abc}"));
         //输出abc的值
        lr_save_datetime("%H:%M:%S",TIME_NOW+2*(ONE_HOUR),"ab");
         //保存2个小时后的时间到参数ab中
        lr_message("the time after two hour is:%s",lr_eval_string("{ab}"));
         //输入ab的值
        return 0;
    }


    执行结果如下:
    the day before yesterday is:07-七月-04
    the time after two hour is:15:33:41
    ===========================================


    附:《lr_save_datetime格式参数表》
    %a 星期几的简写
    %A 星期几的全称
    %b 月分的简写
    %B 月份的全称
    %c 标准的日期的时间串
    %C 年份的后两位数字
    %d 十进制表示的每月的第几天
    %D 月/天/年
    %e 在两字符域中,十进制表示的每月的第几天
    %F 年-月-日
    %g 年份的后两位数字,使用基于周的年
    %G 年分,使用基于周的年
    %h 简写的月份名
    %H 24小时制的小时
    %I 12小时制的小时
    %j 十进制表示的每年的第几天
    %m 十进制表示的月份
    %M 十时制表示的分钟数
    %n 新行符
    %p 本地的AM或PM的等价显示
    %r 12小时的时间
    %R 显示小时和分钟:hh:mm
    %S 十进制的秒数
    %t 水平制表符
    %T 显示时分秒:hh:mm:ss
    %u 每周的第几天,星期一为第一天 (值从0到6,星期一为0)
    %U 第年的第几周,把星期日做为第一天(值从0到53)
    %V 每年的第几周,使用基于周的年
    %w 十进制表示的星期几(值从0到6,星期天为0)
    %W 每年的第几周,把星期一做为第一天(值从0到53)
    %x 标准的日期串
    %X 标准的时间串
    %y 不带世纪的十进制年份(值从0到99)
    %Y 带世纪部分的十制年份
    %z,%Z 时区名称,如果不能得到时区名称则返回空字符。
    %% 百分号

  • Loadrunner 用户自定义函数

    qiguojie 发布于 2007-06-18 11:14:07

    Loadrunner可以使用标准C语言的函数,因此我们可以在脚本中编写自己的函数用于调用,把脚本结构化,更好的进行重用。
    先看一个例子:
    Action()
    {
     int i,j;
     j = 1;
     for (i=0;i<10;i++)
     {
      lr_message("i+j=%d",sum(i,j));
      j++;
     }
     return 0;
    }
    int sum(int a,int b)//简单的求和函数
    {
     return a+b;
    }
    例子说明:
    我写了一个很简单的函数sum,求2个整数的和;
    1、函数实现可以放在lr脚本的任意位置(函数的作用域);
       例如action、vuser_init、vuser_end这些脚本的主函数外,则不需要考虑函数的作用域;在任意地方都可以调用。
       如果放到Action()、vuser_init()、vuser_end()这些函数体内,则只有本函数体内才可以调用。
    例如:
    Action()
    {
     int sum(int a,int b)//简单的求和函数
     {
      return a+b;
     }

     int i,j;
     j = 1;
     for (i=0;i<10;i++)
     {
      lr_message("i+j=%d",sum(i,j));
      j++;
     }
     return 0;
    }
    上例则只有action内部可以调用sum函数。

    2、如果想跳出函数,使用return 0或break即可

    再看一个稍微复杂点的例子:
    Action()
    {
     int aa[20];
     CheckChar("AaBbCc001 1 1",aa);
     lr_message("字符串长度为:%d",aa[0]);
     lr_message ("统计-大写字符:%d",aa[1]);
     lr_message ("统计-小写字符:%d",aa[2]);
     lr_message ("统计-数字字符:%d",aa[3]);
     lr_message ("统计-空格字符:%d",aa[4]);
     return 0;
    }
     
    void CheckChar(char ch[],int a[]) //统计函数,分别统计字符串长度;大写、小写、数字和空格的个数,返回整形保存在数组里
    {
     int i;
     for(i=0;i<=3;i++)
      a[i]=0;
     a[0] = strlen(ch);//获取字符串长度
     for(i=0;i<a[0];i++)
     {
      if(ch[i]>='A' && ch[i]<='Z') //如果是大写字符
       a[1]++;
      else if(ch[i]>='a' && ch[i]<='z') //如果是小写字符
       a[2]++;
      else if(ch[i]>='0' && ch[i]<='9') //如果是数字
       a[3]++;
      else if(ch[i]==' ') //如果是空格
       a[4]++;
     }
    }
    写了一个检查字符串成分的函数,只能检查出字符串长度,大写、小写、数字和空格的个数。

    由此可见,lr中使用C函数还是比较灵活。

  • 软件测试名词解释大全

    dolphin227 发布于 2008-09-26 23:58:44

    Unit testing(单元测试),指一段代码的基本测试,其实际大小是未定的,通常是一个函数或子程序,一般由开发者执行。

    Integration testing(集成测试),被测试系统的所有组件都集成在一起,找出被测试系统组件之间关系和接口中的错误。该测试一般在单元测试之后进行。

    Acceptance testing(验收测试),系统开发生命周期方法论的一个阶段,这时相关的用户和/或独立测试人员根据测试计划和结果对系统进行测试和接收。它让系统用户决定是否接收系统。它是一项确定产品是否能够满足合同或用户所规定需求的测试。这是管理性和防御性控制。

    Alpha testing (α测试),是由一个用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环境下进行的受控测试,Alpha测试不能由程序员或测试员完成。

    Beta testing(β测试),测试是软件的多个用户在一个或多个用户的实际使用环境下进行的测试。开发者通常不在测试现场,Beta测试不能由程序员或测试员完成。

    Black box testing(黑盒测试),指测试人员不关心程序具体如何实现的一种测试方法。根据软件的规格对软件进行各种输入和观察软件的各种输出结果来发现软件的缺陷的测试,这类测试不考虑软件内部的运作原理,因此软件对用户来说就像一个黑盒子。

    White box testing(白盒测试),根据软件内部的工作原理分析来进行测试,基于代码的测试测试人员通过阅读程序代码或者通过使用开发工具中的单步调试来判断软件的质量,一般白盒测试由项目经理在程序员开发中来实现。

    Automated Testing(自动化测试),使用自动化测试工具来进行测试,这类测试一般不需要人干预,通常在GUI、性能等测试中用得较多。

    Bug (错误),有时称作defect(缺陷)或error(错误),软件程序中存在的编程错误,可能会带来不必要的副作用,软件的功能和特性与设计规格说明书或用户需求不一致的方面。软件缺陷表现特征为:软件未达到产品说明书标明的功能;软件出现产品说明书指明不会出现的错误;软件功能超出产品说明书指明的范围;虽然产品说明书未指出但是软件应达到的目标;软件测试人员或用户认为软件难以理解,不易使用,运行速度缓慢等问题。 Bug report(错误报告),也称为“Bug record(错误记录)”,记录发现的软件错误信息的文档,通常包括错误描述、复现步骤、抓取的错误图像和注释等。

    Bug tracking system(错误跟踪系统,BTS),也称为“Defect tracking system,DTS”,管理软件测试缺陷的专用数据库系统,可以高效率地完成软件缺陷的报告、验证、修改、查询、统计、存储等任务。尤其适用于大型多语言软件的测试管理。

    Exception(异常/例外),一个引起正常程序执行挂起的事件。

    Crash(崩溃),计算机系统或组件突然并完全的丧失功能,例如软件或系统突然退出或没有任何反应(死机)。

    Build(工作版本),软件开发过程中用于内部测试的功能和性能等不完善的软件版本。工作版本既可以是系统的可操作版本,也可以是展示要在最终产品中提供的部分功能的部分系统。

    Functional testing (功能测试),也称为behavīoral testing(行为测试),根据产品特征、操作描述和用户方案,测试一个产品的特性和可操作行为以确定它们满足设计需求。本地化软件的功能测试,用于验证应用程序或网站对目标用户能正确工作。使用适当的平台、浏览器和测试脚本,以保证目标用户的体验将足够好,就像应用程序是专门为该市场开发的一样。

    Load testing(负载测试),通过测试系统在资源超负荷情况下的表现,以发现设计上的错误或验证系统的负载能力。在这种测试中,将使测试对象承担不同的工作量,以评测和评估测试对象在不同工作量条件下的性能行为,以及持续正常运行的能力。负载测试的目标是确定并确保系统在超出最大预期工作量的情况下仍能正常运行。此外,负载测试还要评估性能特征,例如,响应时间、事务处理速率和其他与时间相关的方面。

    Performance testing(性能测试),评价一个产品或组件与性能需求是否符合的测试。包括负载测试、强度测试、数据库容量测试、基准测试等类型。

    Pilot testing(引导测试),软件开发中,验证系统在真实硬件和客户基础上处理典型操作的能力。在软件外包测试中,引导测试通常是客户检查软件测试公司测试能力的一种形式,只有通过了客户特定的引导测试,软件测试公司才能接受客户真实软件项目的软件测试。

    Portability testing(可移植性测试),测试软件是否可以被成功移植到指定的硬件或软件平台上。

    Compatibility Testing(兼容性测试),也称“Configuration testing(配置测试)”,测试软件是否和系统的其它与之交互的元素之间兼容,如:浏览器、操作系统、硬件等。验证测试对象在不同的软件和硬件配置中的运行情况。

    Installing testing(安装测试),确保该软件在正常情况和异常情况的不同条件下,例如,进行首次安装、升级、完整的或自定义的安装都能进行安装。异常情况包括磁盘空间不足、缺少目录创建权限等。核实软件在安装后可立即正常运行。安装测试包括测试安装代码以及安装手册。安装手册提供如何进行安装,安装代码提供安装一些程序能够运行的基础数据。

    International testing(国际化测试),国际化测试的目的是测试软件的国际化支持能力,发现软件的国际化的潜在问题,保证软件在世界不同区域中都能正常运行。国际化测试使用每种可能的国际输入类型,针对任何区域性或区域设置检查产品的功能是否正常,软件国际化测试的重点在于执行国际字符串的输入/输出功能。国际化测试数据必须包含东亚语言、德语、复杂脚本字符和英语(可选)的混合字符。

    Localizability testing(本地化能力测试),本地化能力是指不需要重新设计或修改代码,将程序的用户界面翻译成任何目标语言的能力。为了降低本地化能力测试的成本,提高测试效率,本地化能力侧是通常在软件的伪本地化版本上进行。本地化能力测试中发现的典型错误包括:字符的硬编码(即软件中需要本地化的字符写在了代码内部),对需要本地化的字符长度设置了国定值,在软件运行时以控件位置定位,图标和位图中包含了需要本地化的文本,软件的用户界面与文档术语不一致等。

    Localization testing(本地化测试),本地化测试的对象是软件的本地化版本。本地化测试的目的是测试特定目标区域设置的软件本地化质量。本地化测试的环境是在本地化的操作系统上安装本地化的软件。从测试方法上可以分为基本功能测试,安装/卸载测试,当地区域的软硬件兼容性测试。测试的内容主要包括软件本地化后的界面布局和软件翻译的语言质量,包含软件、文档和联机帮助等部分。

    Ad hoc testing (随机测试),没有书面测试用例、记录期望结果、检查列表、脚本或指令的测试。主要是根据测试者的经验对软件进行功能和性能抽查。随机测试是根据测试说明书执行用例测试的重要补充手段,是保证测试覆盖完整性的有效方式和过程。

    Smoke testing(冒烟测试),冒烟测试的对象是每一个新编译的需要正式测试的软件版本,目的是确认软件基本功能正常,可以进行后续的正式测试工作。冒烟测试的执行者是版本编译人员。参考“Sanity testing(健全测试)”。

    Sanity testing(健全测试),软件主要功能成分的简单测试以保证它是否能进行基本的测试。

    User interface(用户界面,UI),广义是指使用户可以和计算机进行交互的硬件和/或软件。狭义是指软件中的可见外观及其底层与用户交互的部分(菜单、对话框、窗口和其它控件)。

    User interface testing (用户界面测试),指测试用户界面的风格是否满足客户要求,文字是否正确,页面是否美观,文字,图片组合是否完美,操作是否友好等等。UI 测试的目标是确保用户界面会通过测试对象的功能来为用户提供相应的访问或浏览功能。确保用户界面符合公司或行业的标准。包括用户友好性、人性化、易操作性测试。

    Static testing(静态测试),不通过执行来测试一个系统。如代码检查,文档检查和评审等。

    Regression testing(回归测试),在发生修改之后重新测试先前的测试以保证修改的正确性。理论上,对软件的任何新版本,都需要进行回归测试,验证以前发现和修复的错误是否在新软件版本上再现。

    Capture/Replay Tool (捕获/回放工具),一种测试工具,能够捕获在测试过程中传递给软件的输入,并且能够在以后的时间中,重复这个执行的过程。这类工具一般在GUI测试中用的较多。

    Debug(调试),开发人员确定引起错误的根本原因和确定可能的修复措施的过程。一般发生在子系统或单元模块编码完成时,或者根据测试错误报告指出错误以后,开发人员需要执行调试过程来解决已存在的错误。

    Deployment(部署),也称为shipment(发布),对内部IT系统而言,指它的第一个版本通过彻底的测试、形成产品、交付给付款客户的阶段。 Dynamic testing(动态测试),通过执行软件的手段来测试软件。

    Garbage characters(乱码字符),程序界面中显示的无意义的字符,例如,程序对双字节字符集的字符不支持时,这些字符不能正确显示。

    GB 18030 testing(GB 18030测试),软件支持GB 18030字符集标准能力的测试,包括GB 18030字符的输入、输出、显示、存储的支持程度。

    Priority(优先权),从商业角度出发是指错误的重要性,尤其是从客户和用户的角度出发,是指错误对于系统的可行性和可接受性的影响。与“Severity(严重性)”相对照。

    Severity(严重性),错误对被测系统的影响程度,在终端用户条件下发生的可能性,软件错误妨碍系统使用的程度。

    Quality assurance(质量保证QA),采取相关活动,以保证一个开发组织交付的产品满足性能需求和已确立的标准和过程。

    Review(评审),在产品开发过程中,把产品提交给项目成员、用户、管理者或其它相关人员评价或批准的过程。

    Screen shot(抓屏、截图),软件测试中,将软件界面中的错误(窗口、菜单、对话框等)的全部或一部分,使用专用工具存储成图像文件,以便于后续处理。

    Software life cycle(软件生命周期),开始于一个软件产品的构思,结束于该产品不再被使用的这段期间。

    Structured query language(结构化查询语句,SQL),在一个关系数据库中查询和处理数据的一种语言。

    TBD(To be determined,待定),在测试文档中标是一项进行中的尚未最终确定的工作。

    Test(测试),执行软件以验证其满足指定的需求并检测错误的过程。检测已有条件之间的不同,并评价软件项的特性软件项的分析过程。软件工程过程的一个活动,它将软件在预定的条件下运行以判断软件是否符合预期结果。

    Test case(测试用例),为特定目标而开发的一组测试输入、执行条件和预期结果,其目标可以是测试某个程序路径或核实是否满足某个特定的需求。

    Testing coverage(测试覆盖),指测试系统覆盖被测试系统的程度,一项给定测试或一组测试对某个给定系统或构件的所有指定测试用例进行处理所达到的程度。

    Testing environment(测试环境),进行测试的环境,包括测试平台、测试基础设施、测试实验室和其他设施。

    Testing item(测试项),作为测试对象的工作版本。

    Testing plan(测试计划),描述了要进行的测试活动的范围、方法、资源和进度的文档。它确定测试项、被测特性、测试任务、谁执行任务、各种可能的风险。

    Testing procedure(测试过程),指设置、执行给定测试用例并对测试结果进行评估的一系列详细步骤。

    Testing scrīpt(测试脚本),一般指的是一个特定测试的一系列指令,这些指令可以被自动化测试工具执行。

    Testing suite(测试包),一组测试用里的执行框架;一种组织测试用例的方法。在测试包里,测试用例可以组合起来创造出独特的测试条件。

    AutoRunner(自动化测试工具),可以用于黑盒测试功能测试等。是国内优秀软件。

    TestCenter(测试管理工具),可以用来管理测试用例,以复用测试用例来提高测试管理质量。

    软件测试中的基本词汇
    ü       黑盒测试 (Black box testing) ── 不考虑内部设计和代码,根据需求和功能进行测试。

    ü       白盒测试 (White box testing) ── 根据应用软件的代码的内部逻辑,按照代码的语句、分支、路径和条件进行测试。

    ü       功能测试 (functional testing) ── 对一个应用软件的功能模块进行黑盒测试。这种测试应当由测试人员进行。但这并不意味着程序员在推出软件之前不进行代码检查。(这一原则适用于所有的测试阶段。)

    ü       系统测试 ── 针对全部需求说明进行黑盒测试,包括系统中所有的部件。

    ü       端到端测试 (end-to-end testing) ── 类似于系统测试,但测试范围更“宏观”一些。模仿实际应用环境,对整个应用软件进行使用测试。例如与数据库进行交互作业、使用网络通信、与其他硬件、应用程序和系统之间的相互作用是否满足要求。

    ü       回归测试 (regression testing) ── 每当软件经过了整理、修改、或者其环境发生变化,都重复进行测试。很难说需要进行多少次回归测试,特别是是到了开发周期的最后阶段。进行此种测试,特别适于使用自动测试工具。

    ü       负荷试验 (load testing) ── 在大负荷条件下对应用软件进行测试。例如测试一个网站在不同负荷情况下的状况,以确定在什么情况下系统响应速度下降或是出现故障。

    ü       压力测试 (stress testing) ── 经常可以与“负荷测试”或“性能测试”相互代替。这种测试是用来检查系统在下列条件下的情况:在非正常的巨大负荷下、某些动作和输入大量重复、输入大数、对数据库进行非常复杂的查询,等等。

    ü       性能测试 (performance testing) ── 经常可以与“压力测试”或“负荷测试”相互代替。理想的“性能测试”(也包括其他任何类型的测试) 都应在质量保障和测试计划的文档终予以规定。

    ü       可用性测试 (usability testing) ── 是专为“对用户友好”的特性进行测试。这是一种主观的感觉,取决于最终用户或顾客。可以进行用户会见、检查、对用户会议录像、或者使用其他技术。程序员和测试人员通常不参加可用性测试。

    ü       恢复测试 (recovery testing) ── 在系统崩溃、硬件故障、或者其他灾难发生之后,重新恢复系统的情况。

    ü       安全测试 (security testing) ── 测试系统在应付非授权的内部/外部访问、故意的损坏时的防护情况。这需要精密复杂的测试技术。

    ü       α 测试 (alpha testing) ── 在开发一个应用软件即将完成时所进行的测试。此时还允许有较小的设计修改。通常由最终用户或其他人进行这种测试,而不是由程序员和测试人员来进行。

    ü     β 测试 (beta testing) ── 当开发和测试已基本完成,需要在正式发行之前最后寻找毛病而进行的测试。通常由最终用户或其他人进行这种测试,而不是由程序员和测试人员来进行。

  • [转]Weblogic服务器性能调优

    Zee 发布于 2008-09-26 12:05:20

    注:在下面做的介绍都是以Weblogic8.1为例的,其它版本的Weblogic可能会有些许不同。

    1) 设置JAVA参数

    a) 编辑Weblogic Server启动脚本文件;

        * BEA_HOME\user_projects\domains\domain-name\startWebLogic.cmd(startWebLogic.sh on Unix)
        * BEA_HOME\user_projects\domains\domain-name\startManagedWebLogic.cmd(startManagedWebLogic.sh on Unix)

    b) 编辑set JAVA_OPTIONS命令,如:set JAVA_OPTIONS=-Xms256m –Xmx256m;

    c) 保存,重启即可。

    注:在WebLogic中,为了获得更好的性能,BEA公司推荐最小Java堆等于最大Java堆。

    2) 开发模式 vs. 产品模式;

    开发模式和产品模式的一些参数的默认值不同,可能会对性能造成影响,下面是对性能有影响的参数列表:

    参数
           

    开发模式默认值
           

    产品模式默认值

    Execute Queue: Thread Count
           

    15 threads
           

    25 threads

    JDBC Connection Pool: MaxCapacity
           

    15 connnections
           

    25 connections

    3) 尽量开启本地I/O;

    通过启动管理控制台,在域(如:mydomain)> 服务器 > server实例(如:myserver)> 配置 > 调整选择启用本地I/O。

    注:此值也可通过手动的修改config.xml配置文件。

    4) 调优执行队列线程;

    a) 修改默认执行线程数

    在这里,执行队列的线程数表示执行队列能够同时执行的操作的数量。但此值不是设的越大越好,应该恰到好处的去设置它,太小了,执行队列中将会积累很多待处理的任务,太大了,则会消耗大量的系统资源从而影响整体的性能。在产品模式下默认为25个执行线程。

    为了设置理想的执行队列的线程数,我们可以启动管理控制台,在域(如:mydomain)> 服务器 > server实例(如:myserver)> 监视 > 性能中监控最大负载时执行队列的吞吐量和队列中的等待请求数,据此确定理想的数值。

    理想的默认执行线程数是由多方面的因素决定的,比如机器CPU性能、总体体系架构、I/O、操作系统的进程调度机制、JVM的线程调度机制。随着CPU个 数的增加,WebLogic可以近乎线性地提高线程数。线程数越多,花费在线程切换的时间也就越多;线程数越小,CPU可能无法得到充分的利用。为获取一 个理想的线程数,需要经过反复的测试。在测试中,可以以25*CPU个数为基准进行调整。当空闲线程较少,CPU利用率较低时,可以适当增加线程数的大小 (每五个递增)。对于PC Server和Windows 2000,则最好每个CPU小于50个线程,以CPU利用率为90%左右为最佳。

    通过启动管理控制台,在域(如:mydomain)> 服务器 > server实例(如:myserver)> Execute Queue > weblogic.kernel.Defalt > 配置中修改线程计数。

    b) 设定执行队列的溢出条件;

    Weblogic Server提供给默认的执行队列或用户自定义的执行队列自定义溢出条件的功能,当满足此溢出条件时,服务器改变其状态为“警告”状态,并且额外的再分配一些线程去处理在队列中的请求,而达到降低队列长度的目的。

    通过启动管理控制台,在域(如:mydomain)> 服务器 > server实例(如:myserver)> Execute Queue > weblogic.kernel.Defalt > 配置下面几项:

        * 队列长度:此值表示执行队列中可容纳的最大请求数,默认值是65536,最后不要手动改变此值。
        * 队列长度阈值百分比:此值表示溢出条件,在此服务器指出队列溢出之前可以达到的队列长度大小的百分比。
        * 线程数增加:当检测到溢出条件时,将增加到执行队列中的线程数量。如果CPU和内存不是足够的高,尽量不要改变默认值“0”。因为Weblogic一旦增加后不会自动缩减,虽然最终可能确实起到了降低请求的作用,但在将来的运行中将影响程序的性能。
        * 最大线程数:为了防止创建过多的线程数量,可以通过设定最大的线程数进行控制。

    在实际的应用场景中,应根据具体情况适当的调整以上参数。

    c) 设定执行队列监测行为

    Weblogic Server能够自动监测到当一个执行线程变为“阻塞”。变为“阻塞”状态的执行线程将无法完成当前的工作,也无法再执行新请求。如果执行队列中的所有执 行线程都变为“阻塞”状态,Weblogic server可能改变状态为“警告”或“严重”状态。如果Weblogic server变为“严重”状态,可以通过Node Manager来自动关闭此服务器并重新启动它。具体请参考:Node Manager Capabilities文档。

    通过启动管理控制台,在域(如:mydomain)> 服务器 > server实例(如:myserver)>配置 > 调整下可配置下面几项:

        * 阻塞线程最长时间:在此服务器将线程诊断为阻塞线程之前,线程必须连续工作的时间长度(秒)。默认情况下,WebLogic Server 认为线程在连续工作 600 秒后成为阻塞线程。
        * 阻塞线程计时器间隔:WebLogic Server 定期扫描线程以查看它们是否已经连续工作了 "阻塞线程最长时间" 字段中指定的时间长度的间隔时间(秒)。默认情况下,WebLogic Server 将此时间间隔设置为 600 秒。

    5) 调优TCP连接缓存数;

    WebLogic Server用Accept Backlog参数规定服务器向操作系统请求的队列大小,默认值为50。当系统重载负荷时,这个值可能过小,日志中报Connection Refused,导致有效连接请求遭到拒绝,此时可以提高Accept Backlog 25%直到连接拒绝错误消失。对于Portal类型的应用,默认值往往是不够的。Login Timeout和SSL Login Timeout参数表示普通连接和SSL连接的超时时间,如果客户连接被服务器中断或者SSL容量大,可以尝试增加该值。

    通过启动管理控制台,在域(如:mydomain)> 服务器 > server实例(如:myserver)>配置 > 调整下可配置“接受预备连接”。

    6) 改变Java编译器;

    标准的Java编译器是javac,但编译JSP servlets速度太慢,为了提高编译速度,可以使用sj或jikes编译器取代javac编译器。下面说说更改Java编译器:

    通过启动管理控制台,在域(如:mydomain)> 服务器 > server实例(如:myserver)>配置 > 常规下改变Java 编译器,默认为javac。输入完整路径,如:c:\visualcafe31\bin\sj.exe。然后打开高级选项,在预规划到类路径填写编译 Java 代码时为 Java 编译器类路径预规划的选项,如:BEA_HOME\jdk141_02\jre\lib\rt.jar。

    7) 使用Webogic Server集群提高性能;

    具体关于如何配置Weblogic集群,我就不细说了。详情可参考:Introduction to WebLogic Server Clustering。

    8) Weblogic EJB调优

    由于EJB2.0已经很少项目在用了,EJB3.0再成熟一点,我再补充这一部分吧!

    9) JDBC应用调优

    JDBC Connection Pool的调优受制于WebLogic Server线程数的设置和数据库进程数,游标的大小。通常我们在一个线程中使用一个连接,所以连接数并不是越多越好,为避免两边的资源消耗,建议设置连 接池的最大值等于或者略小于线程数。同时为了减少新建连接的开销,将最小值和最大值设为一致。

    增加Statement Cache Size对于大量使用PreparedStatement对象的应用程序很有帮助,WebLogic能够为每一个连接缓存这些对象,此值默认为10。在保 证数据库游标大小足够的前提下,可以根据需要提高Statement Cache Size。比如当你设置连接数为25,Cache Size为10时,数据库可能需要打开25*10=250个游标。不幸的是,当遇到与PreparedStatement Cache有关的应用程序错误时,你需要将Cache Size设置为0。

    尽管JDBC Connection Pool提供了很多高级参数,在开发模式下比较有用,但大部分在生产环境下不需调整。这里建议最好不要设置测试表, 同时Test Reserved Connections和Test Released Connections也无需勾上。 当然如果你的数据库不稳定,时断时续,你就可能需要上述的参数打开。

    最后提一下驱动程序类型的选择,以Oracle为例,Oracle提供thin驱动和oci驱动,从性能上来讲,oci驱动强于thin驱动,特别是大数 据量的操作。但在简单的数据库操作中,性能相差不大,随着thin驱动的不断改进,这一弱势将得到弥补。而thin驱动的移植性明显强于oci驱动。所以 在通常情况下建议使用thin驱动。而最新驱动器由于WebLogic server/bin目录下的类包可能不是最新的,请以Oracle网站为准: http://www.oracle.com/technology ... va/sqlj_jdbc/htdocs /jdbc9201.html。

    10) JSP调优

        * 设置jsp-param pageCheckSeconds=-1;
        * 设置serlet-reload-check=-1或ServletReloadCheckSecs=-1;
        * 设置jsp-param precompile=true,关闭JSP预编译选项。
  • 实现的15位和18位身份证格式验证算法

    shen1936 发布于 2008-05-19 16:11:33

    18位身份证标准在国家质量技术监督局于1999年7月1日实施的GB11643-1999《公民身份号码》中做了明确的规定。 GB11643-1999《公民身份号码》为GB11643-1989《社会保障号码》的修订版,其中指出将原标准名称"社会保障号码"更名为"公民身份号码",另外GB11643-1999《公民身份号码》从实施之日起代替GB11643-1989。GB11643-1999《公民身份号码》主要内容如下:
    一、范围
         该标准规定了公民身份号码的编码对象、号码的结构和表现形式,使每个编码对象获得一个唯一的、不变的法定号码。
    二、编码对象
         公民身份号码的编码对象是具有中华人民共和国国籍的公民。
    三、号码的结构和表示形式
    1、号码的结构
        公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。
    2、地址码
        表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按GB/T2260的规定执行。
    3、出生日期码
        表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日代码之间不用分隔符。
    4、顺序码
         表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。
    5、校验码
    (1)十七位数字本体码加权求和公式
    S = Sum(Ai * Wi), i = 0, ... , 16 ,先对前17位数字的权求和
    Ai:表示第i位置上的身份证号码数字值
    Wi:表示第i位置上的加权因子
    Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2

    (2)计算模
    Y = mod(S, 11)

    (3)通过模得到对应的校验码
    Y: 0 1 2 3 4 5 6 7 8 9 10
    校验码: 1 0 X 9 8 7 6 5 4 3 2
    四、举例如下:
    北京市朝阳区: 11010519491231002X
    广东省汕头市: 440524188001010014

    再看一下身份证的含义:

        '15位身份证号码含义:
        '----------------------------------------
        '113343    450321        432(身份证号:只作假设,可能此号并不存在,请勿对号入座)
        '前6位     中间6位       后三位
        '地区代码  生日:年月日  奇为男,偶为女
        '----------------------------------------
        '其中:
        '各省市地区国家代码前两位代码是:
        '----------------------------------
        '北京 11 吉林 22  福建 35 广东 44 云南 53 天津 12 黑龙江 23  江西 36 广西 45  西藏 54 河北 13  上海 31 
        '山东 37  海南 46  陕西 61  山西 14  江苏 32  河南 41  重庆 50  甘肃 62 内蒙古 15  浙江 33  湖北 42 
        '四川 51  青海 63   辽宁 21  安徽 34  湖南 43  贵州 52  宁夏 64  新疆 65  台湾 71  香港 81  澳门 82  国外 91

        '18位身份证号:
        '---------------------------------------------------
        '113343    1945  03    21    432             9(身份证号:只作假设,可能此号并不存在,请勿对号入座)
        '前6位     四位  两位  两位  三位            一位
        '地区代码  年份  月份  生日  奇为男,偶为女  检验位
        '---------------------------------------------------
        '其他不详。

    下面开始进行验证页面和代码的编写(因时间问题就不想进行地区判断等代码了,大家有兴趣可以修改代码进行功能更强的验证功能)

    VerifyIDCard.aspx的代码:

    <%@ Page Language="vb" AutoEventWireup="false" Codebehind="default.aspx.vb" Inherits="test.default_1"%>

    <%@ Register TagPrefix="lion" Namespace="Lion.Web.WebHtmlEditor" Assembly="Lion.Web.WebHtmlEditor" %>
    <%@ Page Language="vb" AutoEventWireup="false" Codebehind="VerifyIDcard.aspx.vb" Inherits="test.VerifyIDcard"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <HEAD>
    <title>身份证验证</title>
    <meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
    <meta content="Visual Basic .NET 7.1" name="CODE_LANGUAGE">
    <meta content="Javascrīpt" name="vs_defaultClientscrīpt">
    <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
    </HEAD>
    <body MS_POSITIONING="GridLayout">
    <form id="Form1" method="post" runat="server">
    <asp:label id="Label1" runat="server">身份证验证:</asp:label>
    <asp:textbox id="txtID" runat="server" Width="192px"></asp:textbox>
    <asp:button id="CmdVerify" runat="server" Text="验证"></asp:button>
    <asp:label id="LblErr" runat="server" ForeColor="Red"></asp:label>
    </form>
    </body>
    </HTML>


    VerifyIDCard.aspx.vb的代码:

     

    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    '在此处放置初始化页的用户代码
    End Sub


    Private Sub CmdVerify_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CmdVerify.Click
    Select Case IDCheck(txtID.Text)
    Case 0
    LblErr.ForeColor
    = System.Drawing.Color.Green
    LblErr.Text
    = "验证通过!"
    Case 1
    LblErr.ForeColor
    = System.Drawing.Color.Red
    LblErr.Text
    = "身份证号必须是15位数或18位数!"
    Case 2
    LblErr.ForeColor
    = System.Drawing.Color.Red
    LblErr.Text
    = "身份证除最后一位外,必须为数字!"
    Case 3
    LblErr.ForeColor
    = System.Drawing.Color.Red
    LblErr.Text
    = "身份证输入错误(日期输入错误)!"
    Case 4
    LblErr.ForeColor
    = System.Drawing.Color.Red
    LblErr.Text
    = "身份证号码输入错误(身份证包含有非法字符)!"
    End Select
    End Sub



    '15位和18位身份证验证
    '返回参数(
    '0:验证通过!
    '1:身份证号必须是15位数或18位数!
    '2:身份证除最后一位外,必须为数字!
    '3:身份证输入错误(日期输入错误)!
    '4:身份证号码输入错误(身份证包含有非法字符)!
    '
    '
    作者:踢西
    '
    日期:2005-09-09
    Function IDCheck(ByVal e) As Integer
    Dim arrVerifyCode
    Dim Wi
    Dim Checker
    Dim BirthDay
    IDCheck
    = 0 '验证通过时返回
    arrVerifyCode = Split("1,0,x,9,8,7,6,5,4,3,2", ",")
    Wi
    = Split("7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2", ",")
    Checker
    = Split("1,9,8,7,6,5,4,3,2,1,1", ",")
    If Len(e) < 15 Or Len(e) = 16 Or Len(e) = 17 Or Len(e) > 18 Then
    'IDCheck= "身份证号必须是15位数或18位数!"
    IDCheck = 1
    Exit Function
    End If
    Dim Ai As String
    If Len(e) = 18 Then
    Ai
    = Mid(e, 1, 17)
    ElseIf Len(e) = 15 Then
    Ai
    = CStr(e)
    Ai
    = Left(Ai, 6) & "19" & Mid(Ai, 7, 9)
    End If
    If Not IsNumeric(Ai) Then
    'IDCheck= "身份证除最后一位外,必须为数字!"
    IDCheck = 2
    Exit Function
    End If
    Dim strYear As Integer
    Dim strMonth As Integer
    Dim strDay As Integer
    strYear
    = CInt(Mid(Ai, 7, 4))
    strMonth
    = CInt(Mid(Ai, 11, 2))
    strDay
    = CInt(Mid(Ai, 13, 2))
    BirthDay
    = Trim(strYear) + "-" + Trim(strMonth) + "-" + Trim(strDay)
    If IsDate(BirthDay) Then
    If DateDiff("yyyy", Now(), CDate(BirthDay)) < -140 Or CDate(BirthDay) > Today() Then
    'IDCheck= "身份证输入错误(日期输入错误)!"
    IDCheck = 3
    Exit Function
    End If
    If strMonth > 12 Or strDay > 31 Then
    'IDCheck= "身份证输入错误(日期输入错误)!"
    IDCheck = 3
    Exit Function
    End If
    Else
    'IDCheck= "身份证输入错误(日期输入错误)!"
    IDCheck = 3
    Exit Function
    End If
    Dim i As Integer
    Dim TotalmulAiWi As Integer
    For i = 0 To 16
    TotalmulAiWi
    = TotalmulAiWi + CInt(Mid(Ai, i + 1, 1)) * CInt(Wi(i))
    Next
    Dim modValue As Integer
    modValue
    = TotalmulAiWi Mod 11
    Dim strVerifyCode ' As Object
    strVerifyCode = arrVerifyCode(modValue)
    Ai
    = Ai & strVerifyCode
    If Len(e) = 18 And CStr(e) <> Ai Then
    'IDCheck= "身份证号码输入错误(身份证包含有非法字符)!"
    IDCheck = 4
    Exit Function
    End If
    End Function

     

    下面我们进行对身份进行验证,看是否能够正确常:

     

    验证错误,无法通过验证,因18位数的身份证最后一位数是由前十七位数字本体码加权求和公式算出来的,换成其它数字或字母都是错误的呵,不信你试试,哈哈!

Open Toolbar