一、脚本录制技术细节
  1、选择合适的协议:
    1)B/S架构:常用Web[HTTP/HTML]协议,如果项目中使用了其它技术,比如Ajax、JDBC、FTP等,就需要选择多协议;
    2)C/S架构:常用Windows Sockets协议(万能协议)
      Socket: 套接字 好比两端进行网络通信的电话机,需要建立连接再通信。
      趋势:企业级应用常用B/S; PC端Web测试
      移动互联网 App一般C/S; 移动端App测试

  2、测试脚本的基本组成:4个部分
    1)vuser_init 初始化:仅执行1次 登录等准备工作
    2)Action 核心脚本:默认1次,可n次 可进行并发
    3)vuser_end 结束脚本:仅执行1次 退出等后续操作
    4)globals.h 头文件:包含LR函数的声明
    建议:LR脚本中的Action越少越好,易维护、可复用;
    QTP中的Action较多,因为功能多。
    LR可以录制多Action脚本,但不推荐使用。

  3、脚本主窗体部分是代码:主要记录客户端的请求、控制函数(事务、集合点、检查点、流程控制)
    LR录制脚本时使用了什么协议?举出该协议下使用的函数。 Web[HTTP/HTML]协议
      1)常见请求函数:(对应每个步骤)
        web_url: 向服务器发送一个URL请求,访问网页、图片、CSS等、JS等资源;
        web_submit_form/web_submit_data: 提交表单数据,携带表单请求的参数数据;
        web_link: 超级链接请求
      2)其它控制函数:
        lr_start_transaction("事务名"); 开始事务
        lr_end_transaction("事务名", LR_AUTO); 结束事务
        lr_think_time(秒数); 步骤等待时间
        web_reg_find("Text=页面源代码文本", LAST);
        reg字样,注册性函数,在相应请求之前
        lr_rendezvous("集合点名"); Action中,事务开始之前

  4、Http协议请求的分类:get和post ...
    (Request Method 方法、方式 有多种)
    1)get请求
      <1> 地址栏写URL回车
      <2> 点击超级链接 <a href="URL">文本或图片</a>
      <3> 页面中获取图片、css、js脚本等资源
      <4> 表单指定get方式提交 <form method="get"> 很少用
      <5> Ajax发送异步请求,指定get方式
    2)post请求
      <1> 表单指定post方式提交 <form method="post"> 常用
      <2> Ajax发送异步请求,指定post方式

        p1.html?username=Tom&password=123
        URL?参数名=参数值&参数名=参数值&... 名值对
        查询字符串 Query String
        可以通过请求URL携带参数和数据,提交给服务器

      get和post请求有何区别?
      1)get请求:
        <1> 请求参数在URL地址栏后携带,信息不安全
        <2> 提交的数据量有限,一般不超过2KB
      2)post请求:
        <1> 请求参数在请求包的主体中携带,信息相对安全
          使用抓包工具Wireshark、Fiddler等能够捕捉到
          建议:出于安全性考虑,密码在发送之前要加密
        <2> 能够提交较大数据量,适合进行表单提交、文件上传

      HTML核心控件:
        表单:<form> 地址 action 请求方法 method
        文本框 text 密码框 password
        提交按钮 submit
        表格:<table> 行 tr 列 td
        超级链接:<a> 地址href
        图片: <img> 地址src

  5、常用日志窗口
    1)Replay Log: 记录脚本回放(执行)日志 (常用)
      调试脚本时,观察脚本运行的轨迹、主要流程,根据错误日志定位、分析错误原因。
      技巧1:调试时可以启用扩展日志,查看参数的替代信息
        Run-time Settings -> Log Extended Log
      技巧2:性价比非常高的调试语句--打印语句
        Java: System.out.println("xxx" + 变量名);
        如果未打印,说明代码未执行,可能之前出错退出;
        如果打印的结果和预期不同,说明有问题。
          LR: lr_output_message("Hello");

          Action.c (4): illegal statement termination 非法语句结束
          Action.c (4): skipping `int' 跳过 int
          Action.c (4): undeclared identifier `a' 未定义标识符a
      结论:当前LR的类C环境要求
        C变量的定义必须在代码的最前面!为了便于统一管理

    2)Recording Log: (目前用的不多)
      记录LR客户端和服务器二者对话的数据包大小;
        (交互的信息量)
      用途:和工具统计吞吐量等有关。

    3)Correlation Results 自动关联结果(基本不用)
      关联 后续一般采用手动关联

    4)Generation Log: 生成日志 (常用)
      记录LR客户端和服务器二者之间的全部对话(请求包、应答包),录制时产生的完整日志。
      用途:脚本是按照这些日志生成的;
        在脚本关联技术中需要分析该日志,查看到协议的底层。

\      以下哪些是前端技术?哪些是后端技术?
        Web服务器端技术(后端):Server端
          Java、数据库 SQL、JDBC、JSP、Servlet...
        Web前端技术(客户端):Client端
          HTML、CSS 层叠样式表、JavaScript (JS)

二、理解HTTP协议的底层,使用Tree视图方式添加检查点
  1、HTTP协议
    1)含义:超文本传输协议,互联网最重要的协议
      http://www.tedu.cn 域名
    2)特点:简单的、无状态的协议
      简单的:协议的结构内容较为简单;
      无状态:一次请求,一次响应后,服务器默认不会记录用户之前状态的。
    3)请求和响应的格式:
      <1> 共同点:都分为头header 和 主体body
      <2> 请求的头中,会携带客户端浏览器的信息;
        比如说明是post方式请求
        请求的主体中,会携带客户端请求参数信息,比如:
        username=Tom&password=123
      <3> 响应的头中,会携带服务器端给客户端的通知,比如:
        包括响应状态码 200 或 302 或 404 或 500 ...
        是否写Cookie...
        响应的主体中,是向客户端返回的页面元素:
        包括网页源代码、图片、css、js脚本...
    4)如何解析、查看协议的数据包?
      <1> 使用第三方工具:WireShark、Fiddler等抓包工具
        抓包:捕捉网络通信的数据包(请求包、应答包)
      <2> LR中的Tree视图:树视图 查看数据包的结构
        打开day05\buy 另存为 day06\buy
        练习:寻找订票成功的请求和响应数据包的对应关系
        HTML View 网页视图 -- 直观,便于观察,找对应关系
        HTTP View 底层协议视图 -- 底层,便于分析

    5)练习:针对登录成功添加文本检查点,建议使用函数web_reg_find 效率高 (web_find函数 效率低)
      之前做法:录制时添加 点击Insert text check
      局限性:可能录制时不知在何处添加、添加后没有加上、添加的位置出现偏差。
      录制后追加(或检查添加是否正确):
        <1> 找到相应请求--其响应结果需要检查的请求
          检查点函数带有reg字样,注册性函数放在相应请求之前
          技巧:Tree视图,HTML View 确认请求和响应快照的关系
        <2> 切换到Tree视图,使用HTML View
          -> 选中需要检查的文本 -> 右击
          -> Add a text check(web_reg_find)
          -> 窗口:
            文本:Welcome, <b>jojo</b>, to 页面源代码文本
              区分大小写
            查找范围:All 或 Body 协议的主体部分
          -> OK 生成函数:
            web_reg_find("Search=Body","Text=Welcome, <b>jojo</b>, to",LAST);

        LR中的检查点函数
          文本检查点:
            web_reg_find 效率高(推荐) 检查页面源代码文本
            reg字样,相应请求之前
            web_find 效率低 检查页面文本 相应请求之后
          图片检查点:
            web_image_check 检查结果中是否有该图片

        练习:针对订票成功添加文本检查点,使用Tree视图
        步骤:

          1)先找到相应请求
          2)使用Tree视图添加
            web_reg_find("Search=All","Text=leaves Denver for London.<br>",LAST);

三、实验:设置10VU,分别采用进程 或 线程两种方式模拟VU,观察对测试机性能的影响。
  基本思路:
    1)控制台中,设置Run-time Settings
      杂项 -> 选择 进程 或 线程 方式
    2)打开任务管理器:查看mmdrv进程 (产生VU)
      查看mmdrv进程的数量、占据系统内存的大小
      规律:一般线程在50个以内,都使用1个mmdrv进程
        1)线程方式:只有1个mmdrv进程,占10M内存
          对测试机资源占用少(轻量级)
        2)进程方式:有10个mmdrv进程,平均每个占7M内存
          对测试机资源占用多(重量级)
      结论:使用线程方式模拟VU更有优势,省测试机资源。
      对比:JMeter 默认使用线程方式模拟VU.
        Java是一种天然的多线程技术,自然采用线程方式模拟多用户,JMeter是使用Java开发的工具。
          java Hello
      原理:通过java命令启动JVM Java虚拟机 进程,在JVM进程中会启动一个主线程 main,执行main方法中的代码,同时可以启动其它的线程(多线程-多任务)。

四、多机联合测试(联机测试/分布式测试)
  1、一台测试机(PC)只能提供有限的负载(平均2000个VU),提供负载的强弱和PC机的配置有关。
    大幅度提高负载的方法
      1)提高硬件配置;
      2)联机测试:使用若干台PC联合产生更大的负载。

  2、需求:要求使用联机的方式,订2张票,使用自己PC1和同事的PC2,各自分配1个VU,由PC1作为主控制台,统一向被测系统PC1中订票(WebTours)。
    操作:day05\buy 打开 另存为 day06\buy1

  3、查阅本机IP地址,前提:打开本地连接
    右击 网上邻居 -> 属性 -> 启用本地连接
    打开cmd: ipconfig
    PC1: 172.166.100.51 控制台IP、SUT的IP
    PC2: 172.166.3.73 负载机IP

  4、将脚本中所有的localhost或127.0.0.1都替换成PC1的IP
    原理:希望向哪里订票,就写哪台机票的IP,目前就是PC1作为被测系统。

  5、检查网络是否可达:
    打开cmd: ping 对方IP地址
    ping 172.166.3.73
    原理:不断向对方发送一些数据包,查看是否正常反馈
    如果显示连接具体时间,表示正常;
    如果显示连接超时 time out,说明网络不可达。

  6、要求负载机PC2至少需要安装Load Generator,并且需要启动Agent进程(小雷达)-- 默认就绪

  7、打开控制台,设置两个脚本组,都使用buy1脚本:
    前提:buy1脚本编译后 -> 回放成功 再加载 最新版本
    两个组:
      组名 脚本路径 VU数 Load Generators
      buy1.2 day06\buy1 1 localhost
      buy1.2_1 day06\buy1 1 改为负载机PC2的IP

  8、使用控制台中Load Generators窗口进行检查:
    控制台 -> Scenario菜单 -> Load Generators
    逐个测试:点击Connect按钮 连接
    结果为Ready 表示成功
    为Failed 表示失败

  9、准备运行:
    建议清空jojo订票记录,便于观察。
    默认脚本迭代1次,2个VU各自都向PC1系统中订1张票。
    运行场景 -> PC1中订票2张,成功!

    如何测试一个杯子?
      电梯、钢笔、铅笔、电水壶...
    思路:考察对测试策略的理解
      默认对需求非常熟悉

    请描述数据库中常用的约束?
      提示:数据库有规范、标准,所有数据库的约束规范是一致的。目的:为了确保数据的一致性、完整性。
      实体完整性:比如确保每一行是唯一的 PK 主键
      参照完整性:比如确保值符合具体要求 FK 外键
        emp表中的dept_id 必须参照自dept的id
        员工的 部门id 部门 id
      分类:对数据的制约(规范,符合业务要求,便于管理)
      缺点:会影响性能
      PK 主键 primary key 行的唯一
      FK 外键 foreign key 值的参照
      UK 唯一 unique 值的唯一
      NN 非空 not null 必须要填
      CK 检查 check 值有要求
      check age between 1 and 150
      check 提成 in(12, 15, 17.5, 20)
      Defult 默认值

LoadRunner(6)的更多相关文章

  1. 老李分享:性能测试你不应该只知道loadrunner(1)

    老李分享:性能测试你不应该只知道loadrunner(1)   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.poptest测试 ...

  2. LoadRunner(三)——LR相关概念&组成部分

    参考学习感谢:<精通软件性能测试与LoadRunner实战> 一.运行机制和主要组成部分 1.LoadRunner主要由VuGen.Controller和Analysis三部分构成: 2. ...

  3. LoadRunner(一)——性能测试基础及性能指标概述

    参考学习感谢:<精通软件性能测试与LoadRunner实战> 一.典型的性能测试场景 某个产品要发布了,需要对全市的用户做集中培训.通常在进行培训的时候,老师讲解完成一个业务以后,被培训用 ...

  4. LoadRunner(8)

    一.脚本关联技术  引入: 打开WebTours首页,点击administration连接: 具有大量管理项,LR为了模拟一些特效设置的选项,实际项目中不存在. -> 选择第三项: Set LO ...

  5. LoadRunner(4)

    一.LoadRunner工具的组成 1.VuGen 虚拟用户脚本生成器 脚本好比:武器 VuGen好比:兵工厂 VU好比:士兵 2.Controller 压力调度控制台 好比:总指挥部 3.Analy ...

  6. LoadRunner(2)

    一.性能测试的基本概念 1.并发和在线的区别:并发的压力是一种瞬时压力,一般针对同一类型业务:在线的压力是一段时间的压力,没有并发那么集中. 规律:一般20用户并发产生的压力相当于200用户在线的压力 ...

  7. LoadRunner(1)

    性能测试:HP LoadRunner11 一.初步概念: 1.功能测试:测试产品的功能是否满足功能需求. 如:ATM取款(在线取款)是否成功或转账操作是否成功 -- 一个用户 2.性能测试:测试产品的 ...

  8. LoadRunner(7)

    一.参数化策略 1.Select next row(How? 如何取?)取值方式 选择下一行 1)Sequential:顺序的 每个VU都从第一行开始,顺序依次向下取值: 数据取完可以从头循环重复使用 ...

  9. LoadRunner(5)

    一.在线综合场景测试:号称能更真实模拟实际生产环境 又称为:混合交易测试 (交易就是事务 Transaction) 1.三要素: 1)多用户:根据需求指定VU数 压力的来源 2)多任务:根据需求结合多 ...

随机推荐

  1. 递归-PrintDigit

    static void PrintDigit(double n,int len,int count=-1) { if (n <0) { n = System.Math.Abs(n); Conso ...

  2. 什么是MVC模型

    经典的MVC模式 MVC是模型-视图-控制器的简称. M代表示模型,英文是Model.也就是指POJO(JavaBean) V表示视图,英文是View.也就是.jsp,同类的视图html,pdf,ex ...

  3. idea把maven依赖树输出到控制台

    第一步 选中红色方框 第二步 点进去 输入命令:mvn dependency:tree 如果要输出到文件,找到pom文件的位置 进入命令行 输入: mvn dependency:tree >d: ...

  4. fcntl和flock两个系统调用的区别

    总的来说,flock函数只能锁定整个文件,无法锁定文件的某一区域.而fcntl可以利用struct flock结构体,来实现文件里部分区域锁定的操作. 附:fcntl(文件描述词操作) 相关函数 op ...

  5. Problems to be upsolved

    Donation 官方题解尚未看懂. comet oj contest15 双11特惠hard Mobitel Small Multiple 题解 为什么可以如此缩点? Candy Retributi ...

  6. (三)mysql SQL 基本操作

    文章目录 MySQL服务器对象 mysql 的基本操作 SQL的注释 库操作 表(字段)操作 数据操作 MySQL服务器对象 mysql 服务器对象内部分成了 4 层: 系统(DBMS)----> ...

  7. window 杀固定端口的进程

    window 杀固定端口的进程   一. 查看所有进程占用的端口   在开始-运行-cmd,输入:netstat –ano可以查看所有进程       二.查看占用指定端口的程序   当你在用tomc ...

  8. shell习题第13题:监控nginx进程

    [题目要求] 在服务器上写一个脚本,要求如下 1. 每隔10秒去检查而一次服务器上的nginx进程数,如果>=500的时候,就需要自动重启一下nginx服务,并检测启动是否成功 2. 如没有正常 ...

  9. 怎样获取所有style节点

    通过 document.styleSheets 获取所有的样式表节点. document.styleSheets instanceof StyleSheetList; // true 注意: 1. 返 ...

  10. hdu 1305 还是字典树

    #include<cstdio> #include<iostream> #include<string> #include<cstdlib> #defi ...