Loadrunner常见http请求脚本编写说明

Loadrunner-http请求脚本编写

1、基本知识

一般的http报文可以简单分成三个部分组成:请求行、请求头部以及请求包体,如下

POST /view/all/createItem HTTP/1.1
Host: 127.0.0.1:8080
Content-Length: 133
Cache-Control: max-age=0
sec-ch-ua: "Not:A-Brand";v="99", "Chromium";v="112"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Linux"
Upgrade-Insecure-Requests: 1
Origin: http://127.0.0.1:8080
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.5615.50 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Referer: http://127.0.0.1:8080/view/all/newJob
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
Cookie: security_level=0; jms_csrftoken=322BxA9O9q2ldCnt0WtlhdZjEPiqzVqK; SESSION_COOKIE_NAME_PREFIX=jms_; jms_public_key="LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlHZk1BMEdDU3FHU0liM0RRRUJBUVVBQTRHTkFEQ0JpUUtCZ1FEcENvV1A1aFljenREeW91L243Nlgwb254WApiU2Y4N3RUbEdnMVpsZ1ZOd000R0ZkRWFmTUpWMDMwLzM1TnNHSzFlVXpIOWVJVC9USi9YWTEwVnYzL3lnbjFNCmZpTDF4VlZlOXFobk4xY3JPa2xOaGx3TlNMTVU2bXE4S0dHU3BJblpuTGlKcUxMVHI0V003WUZCVXRKeVdwQ0sKeHgwb1BZd015d0pGWUV4UlB3SURBUUFCCi0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLQ=="; jms_sessionid=207rc0jrmea7r7d0gmt2ahkr7lcne9qy; JSESSIONID=node01t7r0zibe4j74u62seqxgmwtn0.node0; screenResolution=1918x918; iconSize=16x16; JSESSIONID.7d6d4932=18q02hpt9i0yq1mnhram5ujinn
Connection: close

name=demo&mode=hudson.model.FreeStyleProject&json=%7B%22name%22%3A+%22demo%22%2C+%22mode%22%3A+%22hudson.model.FreeStyleProject%22%7D

其中请求行信息主要包括请求方法、url、协议版本,如下

POST /view/all/createItem HTTP/1.1

一般常见的请求方法有:GET、POST、DELETE、PUT等等。

请求头部信息主要包括Host、Content-Length、Content-Type、User-Agent、Accept、Referer、Accept-Encoding、Accept-Language、Cookie、Authorization等等。

Host: 127.0.0.1:8080
Content-Length: 133
Cache-Control: max-age=0
sec-ch-ua: "Not:A-Brand";v="99", "Chromium";v="112"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Linux"
Upgrade-Insecure-Requests: 1
Origin: http://127.0.0.1:8080
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.5615.50 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Referer: http://127.0.0.1:8080/view/all/newJob
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
Cookie: security_level=0; jms_csrftoken=322BxA9O9q2ldCnt0WtlhdZjEPiqzVqK; SESSION_COOKIE_NAME_PREFIX=jms_; jms_public_key="LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlHZk1BMEdDU3FHU0liM0RRRUJBUVVBQTRHTkFEQ0JpUUtCZ1FEcENvV1A1aFljenREeW91L243Nlgwb254WApiU2Y4N3RUbEdnMVpsZ1ZOd000R0ZkRWFmTUpWMDMwLzM1TnNHSzFlVXpIOWVJVC9USi9YWTEwVnYzL3lnbjFNCmZpTDF4VlZlOXFobk4xY3JPa2xOaGx3TlNMTVU2bXE4S0dHU3BJblpuTGlKcUxMVHI0V003WUZCVXRKeVdwQ0sKeHgwb1BZd015d0pGWUV4UlB3SURBUUFCCi0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLQ=="; jms_sessionid=207rc0jrmea7r7d0gmt2ahkr7lcne9qy; JSESSIONID=node01t7r0zibe4j74u62seqxgmwtn0.node0; screenResolution=1918x918; iconSize=16x16; JSESSIONID.7d6d4932=18q02hpt9i0yq1mnhram5ujinn
Connection: close

其中Content-Type的值比较常见的有:application/json、application/x-www-form-urlencoded、multipart/form-data;boundary=–、text/xml等。

在Connection以下的部分信息就是请求包体信息,如下

name=demo&mode=hudson.model.FreeStyleProject&json=%7B%22name%22%3A+%22demo%22%2C+%22mode%22%3A+%22hudson.model.FreeStyleProject%22%7D

2、Loadrunner http请求脚本代码示例&方法使用说明

1、GET请求示例代码

web_url("checkJobName", 
    "URL=http://192.168.139.129:8080/view/all/checkJobName?value=t", 
    "Resource=0", 
    "RecContentType=text/html", 
    "Referer=http://192.168.139.129:8080/view/all/newJob", 
    "Snapshot=t28.inf", 
    "Mode=HTML", 
LAST);

2、POST请求示例代码

web_custom_request("start",
    "URL=http://192.168.139.129:8080/$stapler/bound/04f3d797-1440-4d42-b143-ad5e7e3ddda4/start", 
    "Method=POST", 
    "Resource=0", 
    "Referer=http://192.168.139.129:8080/view/all/builds", 
    "Snapshot=t14.inf", 
    "Mode=HTML", 
    "EncType=application/x-stapler-method-invocation;charset=UTF-8", 
    "Body=[]", 
LAST);

web_submit_data("data_10", 
    "Action=http://192.168.139.129:8080/view/all/timeline/data/", 
    "Method=POST", 
    "RecContentType=application/javascript", 
    "Referer=http://192.168.139.129:8080/view/all/builds", 
    "Snapshot=t25.inf", 
    "Mode=HTML", 
    ITEMDATA, 
    "Name=min", "Value=1706659200000", ENDITEM, 
    "Name=max", "Value=1706745600000", ENDITEM, 
LAST);

在上面的示例中是常见的三种http请求方法web_url()web_custom_request()web_submit_data()

3、Loadrunner三种常见http请求方法使用说明

  • web_url: 加载指定页面数据(GET请求)

    int web_url( const char *StepName, const char *url, <List of Attributes>, [EXTRARES, <List of Resource Attributes>,] LAST );
    在web_url方法中主要接受三个参数–请求步骤名称、url以及属性列表,它还可以接受扩展属性列表,主要装载请求中可能需要的其他资源,最后参数LAST表示参数结束标识。
    在示例代码中checkJobName是请求步骤名称,可以供后续其他函数的调用。
    常见的 List of Attributes 如下

    属性名称属性解释
    RecContentType在录制过程中,响应头的内容类型,例如text/html,application/json,这是为了确定目标URL是否是可记录的资源
    Referer引用网页的URL。引用当前页面的页面。如果位置是明确表示的,则省略此属性
    Resource描述该url是否为资源,0表示不是静态资源,1表示是静态资源
    Snapshot快照文件的文件名(inf扩展名)
    Mode录制级别:HTML或HTTP。在并发组中的web_url请求上不允许使用“Mode=HTML”。在并发组中,不解析下载的资源寻找要下载的附加对象的响应。单击录制级别/模式(Web)以获取详细信息
    UserAgent标识将执行该步骤的浏览器以外的组件,例如,在浏览器下运行的ActiveX组件。此用户代理标头是为步骤发出的请求而发送的。不进行任何检查以确认用户代理参数是否与浏览器的用户代理运行时设置匹配。非浏览器步骤不会影响模拟的浏览器上下文,也不会根据结果构建新的上下文
  • web_custom_request():允许使用http支持的任何方法创建自定义http请求

    int web_custom_request( const char *RequestName, <List of Attributes>, [EXTRARES, <List of Resource Attributes>,] LAST);
    在web_custom_request方法是一个操作函数,可以使用任何方法或主体创建自定义http请求,在action的脚本中使用这个函数时,可以配合web_add_headerweb_add_auto_header函数一起使用。
    常见的 List of Attributes 如下

    属性名称属性解释
    RecContentType在录制过程中,响应头的内容类型,例如text/html,application/json,这是为了确定目标URL是否是可记录的资源
    URL可以是HTTP、HTTPS或FTP协议
    MethodHTTP协议支持的任何方法
    EncTypeEncType指定了Content-Type,比如"text/html",作为当前重播的"Content-Type"请求头的值。web_custom_request不执行任何主体编码。任何EncType规范都会默默地覆盖任何web_add_[auto_]header的Content-Type。如果指定"EncType=“(空值),则不会生成"Content-Type"请求标头。如果省略了"EncType”,则使用任何适用的web_add_[auto_]header。如果没有标头并且"Method=POST",则使用"application/x–www–form–urlencoded"作为默认值。否则,不会生成Content-Type请求标头。 Body参数指定要按原样使用的主体。如果需要主体编码,则应已将其应用于脚本中输入的Body参数。因此,指定与主体不匹配的EncType可能会导致服务器端错误。一般来说,建议您不要编辑记录的EncType
    RecContentType指定“Content-Type”响应头值为记录的内容,例如text/html,application/x-javascript。当未指定Resource属性时,RecContentType值用于确定目标URL是否为资源
    Referer引用网页的URL。引用当前页面的页面。如果位置是明确表示的,则省略此属性
    Body, BodyBinary, BodyUnicode, or RAW_BODY_START请求的主体作为属性参数Body、BodyBinary或BodyUnicode的值传递。主体可以是单个参数,也可以被分成多个主体段,也就是一系列的参数。例如,对web_custom_request的以下调用将主体分成三个段:一个unicode部分,然后是一个二进制部分,最后是常规文本。最终的主体是所有三个部分按照它们传递给函数的顺序连接在一起的结果
    Row Body指向请求主体的指针被传递给函数
    BodyFilePath作为请求正文传递的文件的路径名。指定完整路径名或相对于脚本文件夹的路径名。BodyFilePath不能与Body或任何Body属性或原始Body属性一起使用:BodyBinary、BodyUnicode或Raw_Body_START
  • web_submit_data():执行无条件或无上下文的表单提交。

    int web_submit_data( const char *StepName, const char *Action, <List of Attributes>, ITEMDATA, <List of data>, [ EXTRARES, <List of Resource Attributes>,] LAST );

    web_submit_data函数是一个执行“无条件”或“无上下文”表单提交的操作函数。(脚本中的每个Web操作函数都会使浏览器显示新的网页或框架。VuGen可以记录所有Web操作函数。)此函数允许您生成HTML表单发出的GET和POST请求。执行此请求不需要表单上下文。只有当VuGen处于基于URL的录制模式,或处于基于HTML的录制模式且选中“仅包含明确URL的脚本”选项时(请参阅VuGen的录制选项),才会录制web_submit_data。该方法指示如何将表单的数据发送到服务器,无论是作为URL中的查询(GET),还是作为请求体(POST)。当VuGen设置为以HTTP(来自服务器的所有请求)记录模式记录web会话时,会生成此函数。VuGen还会在提交表单且无法生成web_submit_form语句时记录一个web_submit _data语句。

    EncType属性指定要指定为“Content–Type”请求头的内容类型。它指示用于从其他参数生成HTTP请求的编码类型(URL编码或多部分编码)。允许的规格为:

    • “EncType=application/x–www–form–urlencoded”

    • “EncType=multipart/form–data” (any “; boundary=” is silently ignored)

    • “EncType=” (一个空字符串,表示不生成“Content–Type”请求头)

    Item Data属性,用来存放data的参数集合,比如在一个表单提交请求里,如下

    POST /securityRealm/createAccountByAdmin HTTP/1.1
    Host: 127.0.0.1:8080
    Content-Length: 242
    Cache-Control: max-age=0
    sec-ch-ua: "Not:A-Brand";v="99", "Chromium";v="112"
    sec-ch-ua-mobile: ?0
    sec-ch-ua-platform: "Linux"
    Upgrade-Insecure-Requests: 1
    Origin: http://127.0.0.1:8080
    Content-Type: application/x-www-form-urlencoded
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.5615.50 Safari/537.36
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
    Sec-Fetch-Site: same-origin
    Sec-Fetch-Mode: navigate
    Sec-Fetch-User: ?1
    Sec-Fetch-Dest: document
    Referer: http://127.0.0.1:8080/securityRealm/addUser
    Accept-Encoding: gzip, deflate
    Accept-Language: en-US,en;q=0.9
    Cookie: security_level=0; jms_csrftoken=322BxA9O9q2ldCnt0WtlhdZjEPiqzVqK; SESSION_COOKIE_NAME_PREFIX=jms_; jms_public_key="LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlHZk1BMEdDU3FHU0liM0RRRUJBUVVBQTRHTkFEQ0JpUUtCZ1FEcENvV1A1aFljenREeW91L243Nlgwb254WApiU2Y4N3RUbEdnMVpsZ1ZOd000R0ZkRWFmTUpWMDMwLzM1TnNHSzFlVXpIOWVJVC9USi9YWTEwVnYzL3lnbjFNCmZpTDF4VlZlOXFobk4xY3JPa2xOaGx3TlNMTVU2bXE4S0dHU3BJblpuTGlKcUxMVHI0V003WUZCVXRKeVdwQ0sKeHgwb1BZd015d0pGWUV4UlB3SURBUUFCCi0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLQ=="; jms_sessionid=207rc0jrmea7r7d0gmt2ahkr7lcne9qy; JSESSIONID=node01t7r0zibe4j74u62seqxgmwtn0.node0; iconSize=16x16; JSESSIONID.7d6d4932=18q02hpt9i0yq1mnhram5ujinn; screenResolution=1918x1038; JSESSIONID.09357c90=udalyoeq50dq1bsg0vl260fd4
    Connection: close
    
    username=visitor&password1=visi2024&password2=visi2024&fullname=visitor&json=%7B%22username%22%3A+%22visitor%22%2C+%22password1%22%3A+%22visi2024%22%2C+%22password2%22%3A+%22visi2024%22%2C+%22fullname%22%3A+%22visitor%22%7D&Submit=Create+User
    

    对应的ItemData内容,如下

    ITEMDATA,
    "Name=username", "Value=visitor", ENDITEM, 
    "Name=password1", "Value=visi2024", ENDITEM, 
    "Name=password2", "Value=visi2024", ENDITEM, 
    "Name=fullname", "Value=visitor", ENDITEM, 
    "Name=json", "Value={\"username\": \"visitor\", \"password1\": \"visi2024\", \"password2\": \"visi2024\", \"fullname\": \"visitor\"}", ENDITEM, 
    "Name=Submit", "Value=新建用户", ENDITEM, 
    

    这里的Name是参数名称,value是对应的值,ENDITEM是一个结束标识符。
    比如在一个文件上传的请求里,如下

    POST /vulnerabilities/upload/ HTTP/1.1
    Host: 127.0.0.1:81
    Content-Length: 532
    Cache-Control: max-age=0
    sec-ch-ua: "Not:A-Brand";v="99", "Chromium";v="112"
    sec-ch-ua-mobile: ?0
    sec-ch-ua-platform: "Linux"
    Upgrade-Insecure-Requests: 1
    Origin: http://127.0.0.1:81
    Content-Type: multipart/form-data boundary=----WebKitFormBoundaryBJ11egIvXUskACMd
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.5615.50 Safari/537.36
    Connection: close
    
    ------WebKitFormBoundaryBJ11egIvXUskACMd
    Content-Disposition: form-data; name="MAX_FILE_SIZE"
    100000
    ------WebKitFormBoundaryBJ11egIvXUskACMd
    Content-Disposition: form-data; name="uploaded"; filename="demo.txt"
    Content-Type: text/plain
    Hello world
    ------WebKitFormBoundaryBJ11egIvXUskACMd
    Content-Disposition: form-data; name="Upload"
    Upload
    ------WebKitFormBoundaryBJ11egIvXUskACMd
    Content-Disposition: form-data; name="user_token"
    3ce9fd94590f21dbe49a27d771bad123
    ------WebKitFormBoundaryBJ11egIvXUskACMd--
    

    对应的ITEMDATA内容

    "EncType=multipart/form-data", 
    "RecContentType=text/html", 
    "Mode=HTML", 
    ITEMDATA, 
    "Name=MAX_FILE_SIZE", "Value=100000", ENDITEM, 
    "Name=uploaded", "Value=demo.txt", "File=Yes", ENDITEM, "Name=Upload", "Value=Upload", ENDITEM, 
    "Name=user_token", "Value=decb4201680fd4cf177ceb98941d5f77", ENDITEM, 
    

常见的参数化使用说明

常见的参数化大致可分为两种:一是对于某个参数值赋予一个由函数生成或文件读取的变量值,一是通过一个请求的返回结果中的某个参数值赋给一个变量值。
在jmeter中设置变量可以通过【测试计划】中的【用户定义的变量】、【CSV Data Set Config】、【Bean shell前/后处理程序】、【正则提取器】完成,变量值赋予可以通过【函数助手工具】、提取器(正则、json、边界、jquery等)、文件数据读取。
在loadrunner里可以通过定义变量或使用函数web_reg_save_param()/web_reg_save_param_ex()、web_reg_save_param_regexp()、lr_save_timestamp()、lr_save_string()等

1、loadrunner的变量定义

1、常见定义变量,如下示例代码

Action()
{
  // 声明变量Max_len值为4
  #define Max_len 4
  // 定义字符指针
  char *demo  = NULL;
  char string_var[] = "base for you";
  lr_log_message("%s", string_var);
  // 通过strcpy函数给指针demo赋值
  strcpy(&demo, string_var);
  lr_log_message("%s", &demo);
  return 0;
}

2、通过函数定义变量和读取变量值,常用函数有lr_save_string()、lr_eval_string(),详细使用见下例代码

Action()
{
  // 声明变量Max_len值为4
  #define Max_len 4
  // 定义字符指针
  char *demo  = NULL;
  char string_var[] = "base for you";
  //通过lr_save_string函数将字符串值赋给string_var变量
  lr_save_string("base for you", "string_var");
  // 通过lr_eval_string函数读取变量string_var的值
  lr_log_message("%s", lr_eval_string("{string_var}"));
  // 通过strcpy函数给指针demo赋值
  strcpy(&demo, lr_eval_string("{string_var}"));
  lr_log_message("%s", &demo);
  // 截取string_var的Max_len的值赋给new_var
  lr_save_var(lr_eval_string("{string_var}"), Max_len, 0, "new_var");lr_log_message("%s", lr_eval_string("{new_var}"));
  return 0;
}

3、通过web_reg_save函数定义变量并赋值,它的放置位置要在http请求的前面,执行效果类似jmeter的后置处理器效果

  • web_reg_save_param()/web_reg_save_param_ex(),其中web_reg_save_param()函数在C版本里不支持,在C语言版本用web_reg_save_param_ex()替代。

    int web_reg_save_param_ex(
      "ParamName=<output parameter name>", 
      [LB[/IC][BIN]=<value>, ]
      [RB[/IC][BIN]=<value>, ] 
      <List of Attributes>, 
      <SEARCH FILTERS>,
      LAST);
    

    其中LB、RB对应的是指定内容的截取边界。LB不指定值,或者设置为空字符串,则web_reg_save_param_ex将使用数据的开头作为左边界。LB/IC表示边界也会匹配,LB/BIN表示匹配转义的二进制代码匹配边界。

    在loadrunner中可以通过【Steps Toolbox】来插入内部函数,如下图
    在这里插入图片描述
    示例代码如下:

    Action()
    {
      web_reg_save_param_ex(
        "ParamName=token_value",
        "LB=data:{\"token\":\"",
        "RB=\"",
        SEARCH_FILTERS,
        "Scope=BODY",
        LAST);
    
      web_custom_request("demotoken",
        "URL=http://127.0.0.1:8990/login/token",
        "Method=POST",
        "TargetFrame=",
        "Resource=0",
        "Referer=",
        "Body={\"username\":\"admin\",\"password\":\"ZGVtbw==\"}",
        LAST);
      return 0;
    }
    
  • web_reg_save_param_regexp()实现通过正则表达式将请求返回的动态数据保存到一个变量中。示例代码如下

    Action()
    {
      web_reg_save_param_regexp(
        "ParamName=token",
        "RegExp=(?<=token\": \").+(?=\",)",
        "Group=0",
        SEARCH_FILTERS,
        "Scope=BODY",
      LAST);
    
      web_submit_data("login.php", 
        "Action=http://127.0.0.1:9080/login/token", 
        "Method=POST", 
        "RecContentType=text/html",  
        "Snapshot=t147.inf", 
        "Mode=HTML", 
        ITEMDATA, 
        "Name=username", "Value=admin", ENDITEM, 
        "Name=password", "Value=password", ENDITEM, 
      LAST);
    
      lr_log_message("%s", lr_eval_string("{token}"));
      
      return 0;
    }
    
  • 19
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《测试实践丛书:性能测试进阶指南·LoadRunner 11实战》结合了很多工作中的实际案例,图文并茂,既适合渴望了解性能测试的新人,也适合对性能测试有一定认识和经验的中、高级测试工程师。同时,《测试实践丛书:性能测试进阶指南·LoadRunner 11实战》也可以作为高校开展性能测试课程的参考教材,让在校学生能对性能测试的本质和价值有一定的认识。 《测试实践丛书:性能测试进阶指南·LoadRunner 11实战》是一本基于HP LoadRunner 11工具的指导用书,从性能测试原理到工具使用再到项目实施,全面介绍了性能测试的各个方面,其内容基本主线说明如下。 第一步(了解理论):磨刀不误砍柴工,打下基础;第二步(掌握工具):深入介绍LoadRunner 11工具三大部分(Virtual User Generator、Controller、Analysis)如何实现用户行为的模拟、性能指标的监控、负载的生成及后期的数据分析;第三步(项目实施):理论联系实际,介绍性能测试项目实施的流程和性能测试部门的组织管理;第四步(进阶提升):对一些当下流行的或比较特殊的协议和开发技巧通过真实案例进行介绍。 基础篇 第1章 性能测试基础 1.1 性能测试工程师的标准及挑战 1.1.1 性能测试工程师的考评指标 1.1.2 性能测试工程师的挑战 1.2 性能测试基础 1.2.1 性能定义 1.2.2 性能指标 1.2.3 单机与网络性能测试 1.2.4 性能测试的流程 1.2.5 性能测试招聘要求 1.2.6 性能测试学习阶段 1.3 性能分析与调优 1.3.1 性能分析及调优原理 1.3.2 常见系统性能瓶颈 1.3.3 性能测试的注意要点 1.4 小结 工具篇 第2章 LoadRunner综述 2.1 LoadRunner简介 2.2 LoadRunner工具组成 2.3 性能测试原理 2.4 自动化测试工具和性能测试工具的区别 2.5 协议分析 2.5.1 HTTP详细介绍 2.5.2 HTTP报文结构 2.5.3 HTTP请求 2.5.4 HTTP应答 2.5.5 HTTP捕获 2.5.6 HTTP回放 2.6 安装 2.6.1 在Windows下安装LoadRunner 2.6.2 安装Load Generator 2.6.3 附加组件 2.6.4 LoadRunner License 2.7 LoadRunner性能测试操作流程预览 2.8 小结 第3章 用户行为模拟 3.1 VuGen界面介绍 3.1.1 Tree图形化模式 3.1.2 脚本模式 3.1.3 Output Window 3.2 录制用户行为 3.2.1 录制流程 3.2.2 协议选择 3.2.3 录制选项 3.2.4 开始录制 3.2.5 插入命令 3.2.6 结束录制 3.2.7 回放验证 3.2.8 录制回放常见问题 3.3 脚本开发 3.3.1 Action简介 3.3.2 脚本如何注释 3.3.3 语言规则 3.3.4 如何使用模板 3.3.5 脚本的导入导出 3.3.6 脚本调试 3.4 通用选项(General Options) 3.4.1 Parameterization标签 3.4.2 Replay标签 3.4.3 Environment标签 3.4.4 Display标签 3.4.5 Correlation标签 3.5 运行设置(Run-Time Setting) 3.5.1 Run Logic 3.5.2 Pacing 3.5.3 Log 3.5.4 Think Time 3.5.5 Additional attributes 3.5.6 Miscellaneous 3.5.7 Speed Simulation 3.5.8 Browser Emulation 3.5.9 Preferences 3.5.10 Download Filters 3.5.11 Data Format Extensions 3.6 参数化 3.6.1 参数化的操作 3.6.2 Parameter List界面介绍 3.6.3 VuGen中的参数 3.6.4 Controller中的参数 3.6.5 同行取值(Same line as) 3.6.6 参数类型 3.6.7 数据向导(Data Wizard) 3.6.8 参数和变量 3.7 关联 3.7.1 关联原理 3.7.2 自动关联 3.7.3 手动关联 3.7.4 一边录制一边关联 3.7.5 关联函数web_reg_save_param_ex详解 3.7.6 关联函数web_reg_save_param_regexp详解 3.7.7 关联函数web_reg_save_param_xpath详解 3.7.8 关联函数的高级使用 3.8 检查点 3.8.1 文本检查点 3.8.2 自动检查点 3.8.3 图片检查点 3.9 事务 3.9.1 响应时间 3.9.2 添加事务 3.9.3 事务时间 3.9.4 手工事务 3.10 集合点 3.11 小结 第4章 负载生成及监控Controller 4.1 设计场景 4.1.1 新建场景 4.1.2 负载生成器管理 4.1.3 用户管理 4.1.4 运行设置 4.1.5 IP虚拟 4.1.6 场景运行原理 4.1.7 Service Level Agreement(服务品质保障) 4.2 系统监控 4.2.1 Scenario Groups(场景用户状态) 4.2.2 Scenario Status(场景运行状态) 4.2.3 计数器原理 4.2.4 计数器管理 4.2.5 SiteScope 4.3 场景运行 4.4 QTP脚本在场景中的运行 4.5 场景数据 4.6 小结 第5章 数据收集分析Analysis 5.1 新建Analysis分析 5.2 Analysis Summary 5.2.1 Analysis Summary(场景的摘要) 5.2.2 Statistics Summary(场景状态的统计说明) 5.2.3 5 Worst Transaction(SLA失败事务) 5.2.4 Scenario Behavior Over Time(场景行为综述) 5.2.5 Transaction Summary(事务摘要) 5.2.6 HTTP Responses Summary(HTTP响应摘要) 5.3 Graphs(数据图) 5.3.1 Vusers(虚拟用户状态) 5.3.2 Errors(错误统计) 5.3.3 Transactions(事务) 5.3.4 Web Resources(网页资源信息) 5.3.5 Web Page Diagnostics(网页分析) 5.3.6 Network Monitor(网络监控) 5.3.7 Resources(资源监控) 5.4 图设置与操作 5.4.1 Merge Graphs(合并图) 5.4.2 Auto Correlate(自动定位瓶颈) 5.5 Transaction Report(事务报告) 5.6 SLA Report(系统阈值监控报告) 5.7 External Monitor(外部监控数据导入) 5.8 Cross with result(跨脚本横向比较) 5.9 生成测试报告 5.9.1 New Report(新建报告) 5.9.2 Reprt Templates(报告模板) 5.9.3 HTML报告 5.10 小结 实战篇 第6章 性能测试实战 6.1 计划测试 6.1.1 分析系统阶段 6.1.2 定义测试目标 6.1.3 明确定义概念 6.1.4 编写性能测试计划 6.1.5 编写性能测试方案 6.1.6 编写性能测试用例 6.2 搭建测试环境 6.2.1 测试平台评估 6.2.2 数据生成 6.2.3 测试环境搭建手册 6.3 创建脚本 6.3.1 用户注册 6.3.2 用户查询 6.3.3 用户看帖 6.3.4 用户回帖 6.4 创建场景 6.4.1 场景设计 6.4.2 负载监控 6.5 运行场景 6.5.1 场景运行Checklist 6.5.2 场景运行记录 6.6 分析性能数据 6.6.1 性能调优原理 6.6.2 前端性能分析 6.6.3 后端性能分析 6.7 性能测试报告 6.7.1 平台对比性能测试报告 6.7.2 Phpwind85性能分析报告 6.7.3 DiscuzX2 VS Phpwind85性能对比报告 6.7.4 Phpwind85验收指标性能测试报告 6.7.5 Phpwind85压力测试报告 6.8 小结 第7章 性能测试组织 7.1 性能测试团队 7.2 性能测试流程分工 7.3 配置管理 7.4 性能测试自动化 7.5 小结 第8章 高级脚本开发 8.1 AJAX
LoadRunner是一款常用的性能测试工具,用于模拟多用户同时访问一个应用程序,以测试应用程序的性能和可靠性。下面是一个简单的LoadRunner脚本编写步骤: 1. 创建脚本LoadRunner中创建一个新的脚本,选择需要测试的协议并录制脚本。在录制期间,可以使用LoadRunner提供的录制器来记录用户会话和交互。 2. 添加事务 将需要测试的业务流程分解成不同的事务,并将这些事务添加到脚本中。每个事务都应该包含一些关键步骤,如登录、搜索、添加到购物车、结账等。 3. 参数化 为了模拟多个用户同时访问应用程序,需要在脚本中使用参数化技术。将一些常量值,如用户名、密码、搜索关键字等替换为参数,并为这些参数创建数据文件。 4. 调整脚本 在录制期间,可能会有一些无关的请求被记录下来,或者某些请求需要进行调整。在调整脚本时,可以使用LoadRunner提供的编辑器来删除或修改请求。 5. 添加验证点 为了确保应用程序的正确性和可靠性,需要在脚本中添加验证点。验证点可以检查页面元素、响应时间、返回值等。 6. 运行脚本脚本准备好后,可以将其上传到LoadRunner Controller中并运行。LoadRunner Controller将模拟多个用户同时访问应用程序,并记录性能数据。 7. 分析结果 在测试完成后,可以使用LoadRunner Analysis工具来分析性能数据。分析结果将显示应用程序的各种性能指标,如平均响应时间、吞吐量、错误率等。根据这些指标,可以进行性能优化和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值