baoligu

性能测试理论知识


 

一、性能测试理论

1、  性能测试概念

已经通过功能测试,且带投产的应用版本,在系统环境下,通过自动化的测试工具模拟出多种正常.峰值以及异常负载条件来对系统的各项指标进行测试,用来验证系统是否达到预期的性能要求。

系统架构主要分B/S、C/S。

网络协议分TCP、HTTP、HTTPS。

TCP——TCP是面向连接的通信协议,通过三次握手建立连接,通讯完成时要拆除连接,由于TCP是面向连接的所以只能用于端到端的通讯。用于C/S架构。(浦发最主要协议)

 

Loadrunner——1)winsocket协议、xml请求包,均可以使用TCP

Winsocket协议——https://blog.csdn.net/x_iya/article/details/52523174

http://www.51testing.com/html/71/410671-807881.html

 

HTTP——2)HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传输协议。用于B/S架构。

HTTP 1.0——短连接。在LR11脚本里体现方式不同。登录、登出放在action。

HTTP 1.1——长连接。登录放在init、登出放在end。

Loadrunner——录制脚本(流程)、请求格式相对固定报文发送(手工方式开发)。

 

3)Webservice协议——三种请求方式,

Xml报文概念——https://blog.csdn.net/qq_24505127/article/details/53057099;

调用wsdl文件——相关概念,https://zhidao.baidu.com/question/316845646.html;

webservice_call——https://blog.csdn.net/florachy/article/details/72674649;

web_custom_request(直接发送soap报文)——

https://blog.csdn.net/jiang1986829/article/details/48132933

 

4)Tuxedo——银联前置系统。http://www.baike.com/wiki/Oracle+Tuxedo

以上协议均在LR11中有体现。

 

2、  性能测试对象

对象:对象由业务功能、应用代码、服务器硬件、网络设备、操作系统。

Linux基本操作命令(目录、文件操作、用户管理、进程查看、cpu/内存/磁盘/网络等)

角色:web服务器、中间件、应用服务器、数据库服务器构成的完整的系统。

方式:业务流程(工具录制)、接口测试(直接写测试代码)。

 

3、  性能指标

                       

1)  用户数(单位:个)

系统能够支持的用户数是系统容量的重要标志,并发用户数用于度量系统在高并发量访问下,系统的并行处理能力,一般如果系统中存在死锁、资源争用,在并发访问下,由于请求处于队列等待中,系统响应就会随着时间变慢。

种类:

a)在线用户数:用户同时在一定时间段的在线数量。(think_time与pacing time,一般来说,都是http访问web浏览器页面时设置)

b)并发用户数:某一时刻同时向服务器发送请求的用户数。(接口测试)

集合点体现更集中的并发。lr_rendzvous ( “name” );

 

比如,某网站存在注册用户数为10W人,但同时在线最多1W人,但这1W个人,

可能只有500人会浏览帖子,500人会进行发帖,只有这1000个人对服务器才有

交易,那我们计算并发量的时候,就可以以1000为标准!

 

2)响应时间(单位:秒,性能测试中,以事务方式来计算交易提交的衡量响应时间)

a)平均响应时间:整个测试场景执行中,执行事务所耗时间的平均值。

b)90%响应时间:我可以推断出90%Percent是先将响应时间由大到小排序(假设

有10个响应时间,1s,2s,3s,4s,5s,6s,7s,8s,9s,10s),然后去掉最大的响应时间(10s),

取9s作为90% Percent时间。

 

         3)系统处理能力(单位:笔/秒,TPS / QPS)

            每秒钟完成的业务数,是衡量系统吞吐能力的重要指标。将真实业务量进行8.2原

则换算为TPS。一天的业务量为10000笔交易,工作时间9:00-17:00,八二原则,8000笔/2*3600=1.1

 

4)交易成功率

事务成功率越高,则表明系统处理能力越大;而失败事务主要由于系统响应慢,导

致访问业务功能超时,或者系统业务功能异常,不能正常访问等。

    计算公式:成功笔数/(成功笔数+失败笔数),99.9%

 

         5)服务器资源使用率

            a)CPU——CPU使用率一般不超过75%,

windows性能计数器的%Processor  time;

Linux可用TOP、sar、vmstat命令,us%(用户态CPU使用率)+sy%(系统态CPU使用率)。

 

       b)内存——内存使用率一般不超过75%,

windows性能计数器的available  memory;

Linux可用TOP、free、vmstat命令,可用内存为free+buffers+cached。

 

       c)存储IO——可用容量、disk使用率。

       d)网络流量

Linux资源监控:https://blog.csdn.net/vcwanglailing/article/details/73290421(nmon工具)

 

 

 

         6)性能测试模型

                  

         计算公式:a. 平均QPS(TPS)= 并发数/平均响应时间。

                              b. 平均并发用户数的计算:C = nL / T

其中C是平均的并发用户数,n是平均每天访问用户数(login session),L是一天内用户从登录到退出的平均时间(login session的平均时间),T是考察时间长度(一天内多长时间有用户使用系统)。

c. 并发用户数峰值计算:C^ = C + 3*根号C。

 

 

4、  与性能测试相关的Linux命令(需自行补充所知的Linux命令)

查看进程状态

#ps  –elf 或 ps  aux

查看网络tcp连接状态

#netstat -na

查看当前操作系统内核信息
# uname -a

查看当前操作系统发行版信息
# cat /etc/issue | grep Linux

查看linux版本
 lsb_release -a

查看机器型号
dmidecode | grep "Product Name"

 

5、  主流的测试工具

验证系统整体性能:Loadrunner、Jmeter等。

验证系统前端性能:httpwatch、dynatrace等。

 

6、  Loadrunner工具三大组成部分

虚拟用户生成器 (VuGen) ― 创建脚本VuGen 通过录制应用程序中典型最终用户执行的操作来生成虚拟用户 (Vuser)。VuGen 将这些操作录制到自动虚拟用户脚本中,以便作为负载测试的基础。

Controller ― 设计和运行场景Controller 是用来创建、管理和监控负载测试的中央控制台。使用 Controller 可以运行用来模拟真实用户执行的操作的脚本,并可以通过让多个 Vuser (虚拟用户)同时执行这些操作来在系统中创建负载。

Analysis ― 分析场景Mercury Analysis 提供包含深入的性能分析信息的图和报告。使用这些图和报告,可以标识和确定应用程序中的瓶颈,并确定需要对系统进行哪些更改来提高系统性能。

 

7、  loadrunner11脚本开发

1)  html/http协议(录制脚本)

Action()

{

web_set_max_html_param_len("10000");

 

web_reg_save_param("retCode",

"LB=retCode\":\"",

"RB=\"",

"NotFound=WARNING",

LAST);

 

lr_start_transaction("test");

 

web_custom_request("test",

"URL=http://127.0.0.1/test?channelno=1&phoneno=12345678912",

"Method=GET",

"Resource=0",

"Referer=",

"Mode=HTTP",

"EncType=txt/html; charset=UTF-8",

"Body=",

LAST);

 

if (!strcmp(lr_eval_string("{retCode}"),"000000"))

{

lr_output_message("Successfull, retcode is:%s", lr_eval_string("{retCode}"));

lr_end_transaction("test", LR_PASS);

}

else{

lr_error_message("Failed, retcode is:%s", lr_eval_string("{retCode}"));

lr_end_transaction("test", LR_FAIL);

}

return 0;

}

 

2)  webservice协议

方法一,调用webservice:一般采取Import wsdl的方式,在Manage Services中将wsdl文件或者访问地址导入,然后Add Service Call。在添加过程中可以设定参数。

方法二,导入SOAP:采用Import Soap的方式,将xml文件导入。URL写上不带wsdl的访问地址,此种方法可以写入用于连接服务器的用户名和密码。

方式三,利用HTTP协议访问。先用SOAP的方式把脚本录一下。然后将soap_request添到web_custom_request这个函数里。

 

3)  winsocket协议

步骤:

---建立Socket连接:

int rc = 0;

rc = lrs_create_socket("socket0", "TCP", "LocalHost=0", "RemoteHost=172.16.1.93:9993", LrsLastArg); //lrs_create_socket("连接名", "连接方式", "LocalHost=0", "RemoteHost=访问地址和端口", LrsLastArg);

if (rc==0)

lr_output_message("Socket was successfully created ");

else

lr_output_message("An error occurred while creating the socket, Error Code: %d", rc);

---发送数据:

lrs_send("socket0", "buf0", LrsLastArg); //将buf0中的内容发送到指定的端口socket

---接收数据:

lrs_receive("socket0", "buf1", LrsLastArg); //接受服务器返回数据保存到buf1

lrs_receive_ex("socket0", "buf2", "NumberOfBytesToRecv=126", LrsLastArg); //强制指定接收报文的长度

---断开Socket连接:

lrs_close_socket("socket0");

 

---关于data.ws(在脚本的data.ws部分):

data.ws中存放的收发的数据包。格式为

;WSRData 2 1

 

send buf0  399

                   “111”

recv buf1  126

 

4)  java vuser协议

可通过导入jar包,进行java接口的性能测试。

    第一步:loadrunner创建java_vuser脚本 :

在建立脚本界面选择Create/Edit Script-->New Script-->选择java协议-->java_vuser 建立脚本。

    第二步:配置loadrunner的环境:

    在run-time-setting 设置classpath。

    第三步:导入公司开发的java包:

    和java配置一样, 还有要import com.lr_class.*,在脚本目录建立com文件夹,在com中在加lr_class文件夹,将用到的类文件放在其中。

    第四步:开发javavuser脚本:脚本用gzip压缩和公司开发的加密算法(如果存在)。

    备注:http协议中使 web_custom_request函数中的 BodyBinary参数发送字节流,也可以完成。

示例:

import lrapi.lr;

import com.lr_class.*;

import java.io.ByteArrayInputStream;

import java.io.IOException;

import org.apache.http.HttpEntity;

import org.apache.http.HttpResponse;

import org.apache.http.client.ClientProtocolException;

import org.apache.http.client.methods.HttpPost;

import org.apache.http.entity.InputStreamEntity;

import org.apache.http.impl.client.DefaultHttpClient;

 

public class Actions

{

 

       public int init() throws Throwable {

   return 0;

}

 

public int action() throws Throwable {

 

     String url ="http://xx.xx.xx.xx/stats/uploadData";

int code;

byte[] dataBytes= Fdata.putData("<testing>","<user>","<id>","<age>","<time>",1,1,5,1,1348042886,4,13432909036L,1234567890123455L,1,1);

 

System.out.println(dataBytes);

byte[] b = UnGZIP.compressToByte(dataBytes);

b = XXXXXRC4.code(b);

 

System.out.println(b);

lr.start_transaction("发送");

ByteArrayInputStream bs = null ;

bs = new ByteArrayInputStream(b, 0, b.length);

HttpPost httpPost = new HttpPost(url);

httpPost.addHeader("Content-Type", "application/octet-stream");

HttpEntity he = new InputStreamEntity(bs, b.length);

httpPost.setEntity(he);

HttpResponse httpResponse = new  DefaultHttpClient().execute(httpPost);

code = httpResponse.getStatusLine().getStatusCode();

 

if (code == 901) {

               lr.output_message("成功  code:"+code);

             lr.end_transaction("发送", lr.PASS);

}

else{

               lr.error_message("失败   code:"+code);

             lr.end_transaction("发送", lr.FAIL);

}       

return 0;

}

 

public int end() throws Throwable {

           return 0;

}

}

8、  脚本的重要组成部分

1)  事务(又称为Transaction),LoadRunner运行到该事务的开始点时,LoadRunner就会开始计时,直到运行到该事务的结束点,计时结束。这个事务的运行时间在LoadRunner的运行结果中会有反映。

2)  集合点,执行负载测试时, 需要模拟系统上有较重的用户负载。要实现此操作,可以同步 Vuser 以便恰好在同一时刻执行任务。通过创建集合点,可以配置多个 Vuser 同时执行操作。

3)  思考时间,思考时间模拟实际用户在不同操作之间等待的时间。例如,当用户收到来自服务器的数据时,可能要等待几秒钟查看数据,然后再做出响应。这种延迟就称为“思考 时间”。lr_think_time(5);

4)  关联,在脚本回放过程中,客户端发出请求,通过关联函数所定义的左右边界值(也就是关联规则),在服务器所响应的内容中查找,得到相应的值,已变量的形式替换录制时的静态值,从而向服务器发出正确的请求,这种动态获得服务器响应内容的方法被称作关联。

5)  参数化,作用是模拟真实用户的行为,当然需要不同的账户。

参数化规则:顺序取值、唯一取值、随机取值。

参考资料:https://www.cnblogs.com/whitewasher/p/7614689.html

 

9、  测试场景种类

基准测试——单用户对某一只交易进行100次迭代操作(pacing time设置为1秒),验证单交易在单用户操作下的性能表现,保证功能性。

单交易并发测试——采用一定量的用户数对某一只交易进行并发操作,验证单交易的并发性能。

负载测试——采用业务模型,大用户量,综合评估系统的性能表现。体现在模型的轻载区。

业务模型(TPS占比、用户数占比):

交易代码

交易功能描述

TPS/用户占比

A

 

30%

B

 

50%

C

 

10%

D

 

10%

如果有2000个用户(在线用户或者是并发用户),2000中的30%、50%、10%、10%。

 

容量测试——在负载测试基础上,寻找最佳TPS、最佳在线用户数或最佳并发用户数。

健壮性测试——模拟多服务器环境,意外裆机情况下,系统是否能够正常运行。

稳定性测试——一般执行24小时长时间压测。

 

二、性能测试实施(环境要求)

三、性能调优实施

四、性能测试环境挡板

在一些跨系统的性能测试项目中,往往由于客观因素的限制(测试硬件资源有限、多系统之间的协调等),我们无法搭建一个完整的测试环境来完成测试工作。此时,我们一般会搭建出被测系统,然后采用软件程序来模拟其他相关系统的功能。该软件程序一般被称为挡板。

五、方案、报告评审

六、性能测试工作中经常碰到的问题

环境变动,比如:有多个项目共享、测试应用版本不稳定、功能需求升级变动。

相关人员配合度:开发人员、开发经理、项目经理不配合你实施测试工作。

 

发表于 2018-11-06 11:24  保利  阅读(739)  评论(0编辑  收藏  举报
 

分类:

技术点:

相关文章:

  • 2022-12-23
  • 2021-11-19
  • 2021-12-02
  • 2021-11-28
  • 2021-11-19
  • 2022-01-29
  • 2021-05-03
猜你喜欢
  • 2021-11-19
  • 2021-11-19
  • 2021-11-19
  • 2021-11-19
  • 2023-03-23
相关资源
相似解决方案