测试笔记3

281 阅读27分钟

十二、接口测试

1.认识接口

背景:
    1.前后端:
        前端:浏览器端/APP客户端
        假设前端是一个登陆页面,用户需要在页面上输入账号密码,并点击登录
        请求过程:前端点击登录==传递请求信息==》后端
            请求信息:
                1.请求URL:决定了请求会发送到哪一个服务器
                2.请求头:
                    一部分是浏览器自带
                    一部分是开发人员自定义
                3.请求参数:对于登录请求,可能会有账号密码
                    请求参数是由开发人员自定义
                    问题:开发人员根据什么来定义请求参数?
                    开发人员根据业务功能来定义请求参数
                4.请求方式:get/post
        后端接收到请求后,需要对请求进行处理,并把处理后的结果返回到前端
        
        后端:服务端
            前端《===后端处理后的结果===后端
                比如:后端对登录请求的参数处理后,会去数据库校验账号密码是否正确
                如果账号密码正确,则会返回登录成功的结果
                如果账号密码错误,则会返回登录失败的提示
            前端接收到后端的返回数据后,会根据返回数据,进行不同的页面展示:
            如果后端返回登录成功,则前端会跳转到首页
            如果后端返回登录失败,则前端会提示登录失败,请检查账号密码
            
            响应信息:
                1. 响应数据
                2. 状态码
                3. 响应头
                
问题:前端点击登录后,通过什么来传递请求信息给后端?
    接口
    
问题: 接口属于前端还是后端?
    后端

假设有一台电脑和一台手机:
    电脑有一个USB接口(相当于服务器的接口)
    手机需要通过USB数据线连接到电脑的接口:
    连接成功后,手机可以向电脑传输数据
    前端通过网络连接到服务器的接口:
    连接成功后,前端可以向服务端传输数据
    
请求和响应的过程,其实就是数据传输和数据处理的过程

接口测试的核心:验证数据的交互
    数据:
        请求:请求URL,请求方式,请求头,请求参数
        响应:响应头,响应数据,状态码
        
为什么要做接口测试?
    用户可以绕过前端,直接调用接口,接口需要测试人员去校验是否正确
    前后端代码是分离的,前端只负责页面,后端负责接口
    前端可以对页面输入(登录账号)做限制,比如限制登录账号长度是10位,
    但是技术人员可以通过接口,直接绕过前端的输入限制,
    所以为了保证前后端校验的一致性,后端同样需要对请求参数(登录账号)做限制

2.接口测试工具:postman

使用步骤:
1. fiddler抓包获取请求信息
2. Postman填写请求信息: 请求URL,请求方式,请求参数,请求头,并点击send发送请求
3. 查看响应数据

3.接口文档

作用: 用于查看接口的请求和响应
由谁编写: 开发通过一些接口文档生成工具,自动生成,比如swagger
    1. swagger:
        1. 开发可以把swagger集成在代码内,编译时可以自动生成接口文档
        2. 生成的接口文档, 不单可以用于看,还可以用于发送请求
    2. showdoc:
        可以用于编写接口文档
    
做接口测试,抓包时,有很多URL,哪个才是我们需要的?
    1. 可以通过接口文档对比
    2. 问开发
    3. 查看URL,请求参数和响应数据,结合业务功能来判断是不是要用的接
    
除了Postman可以发送请求,还有什么可以发送请求啊?
    1. PostmanJMeter等接口测试工具
    2. Python,JSJava等等

4.接口测试用例

接口测试用例设计时,需要关注哪些:
一、 正常功能:
    请求参数和响应数据是否符合预期

二、异常:
    phone:18718901630
    请求参数:
    1. 请求参数的长度:
    大于11位,小于11为,为空,
    2. 请求参数的数据类型: 是否符合接口文档的定义
    3. 请求参数的格式:比如特殊符号,空格等等
    4. 请求参数漏传,错传
    
    响应数据:
    主要是验证响应数据是否符合预期
    
    预期结果如何定义:
        1. 根据业务功能需求文档
        2. 根据接口文档(请求参数和响应数据)

image.png

5.接口测试流程

1. 熟悉需求文档和接口文档
2. 编写测试计划,测试方案,接口测试用例
3. 使用Postman等接口测试工具,执行接口用例
    需要通过接口测试工具======通过接口测试工具来模拟浏览器操作
        Postman:开发和测试都会用。 属于谷歌的一个插件。。---情敌postwoman;
        Httprequseter:属于火狐的插件------发送请求和接收数据
        JMeter:纯java开发的-----------测试工具中最重要的,没有之一
        Fiddler保留了接口测试工具,利用composer属性来做
4. 提交bug,并验证
5. 执行页面功能测试,提交功能测试产生的gug,编写测试报告
6. 验收测试
7. 上线发布

测试过程:
单元测试: 开发编写单元测试代码
集成测试(Sit测试): 接口测试:
系统测试: 主要是做功能测试,性能测试,回归测试等等
验收测试: 协助产品经理或客户进行验收

6.日志

日志就是指用户行为的一些记录

(1)纯客户端log日志

Ddms:抓取一些概率性非常高的bug中的日志。 也可以抓取一些按钮/动作的一些常规日志;

image.png 可以在logcat中对日志进行过滤:一般是根据包名来过滤

如果是对于一些概率性的bug:只能通过adb logcat > d:\1.log,再对1.log文件进行分析。

(2)服务器日志

远程到服务器----来查看对应的日志。   远程工具:xshell和CRT

image.png 奔溃的具体原因:

image.png

得到原因:表情----数据库不支持。  更新sql语句就报错了

7.接口自动化

利用Python+requests来完成。 利用requests来模拟get和post请求;
先安装:pip install requests  (fiddler一般存在干扰)
怎么检验安装成功:pip list

(3)接口日志

查看请求(请求头部head和body数据)和响应。
接口测试和客户端无关,不管客户端是Android还是ios还是web端,接口都一样。

十三、龙戈贷款管理系统

1.贷款公司的业务岗位

业务部内勤
业务部人员
法务人员
风控人员
总经理

贷款的模式:
     贷款涉及到:出借方和借款方
               
               p2p:个人对个人
               p2c:个人对机构(企业)


还款方式:
    等额本息:每个月偿还相同的本金和利息
    等额本金:每个月偿还相同的本金,利息会逐渐降低
    先息后本:每个月先还利息,还完利息后,才开始还本金
    期末清偿:到期一次性还本付息(这种的对贷款机构不利,对借款人是最有利的,很少机构会有这种方式的贷款)如:借100万,20年后一次性还利息和本金
    提前还款:用户在贷款到期日之前,提前还钱

    贷款逾期:过了贷款到期日,用户还是未还钱,逾期记录会被上传至央行的征信中心
    延期还款:用户未在规定的时间还款,但是后续手续还了钱,但还是会被上报至央行征信中心
    贷款展期:用户未在规定的时间还款,但是用户事先和贷款机构达成协议,取得贷款机构同意后,可以按照展期另外约定的时间进行还款,视为正常还款

2、龙戈贷款管理系统的贷款流程

龙戈贷款管理系统:
    作用:用于管理和审批贷款的各个流程
    贷款流程:
        1.用户申请贷款:
            1.线上申请:比如某个贷款app或贷款小程序
            2.线下网点申请:用户填写贷款申请资料,业务员录入这些资料
                 
        2.贷款调查:
            调查借款方提供的各种资料信息是否真实
                  
        3.贷款流程:
            贷款项目评审:
                1.贷款初审:业务部主管
                2.风控审核:风控部主管
                3.合规性审查:法务部主管
                4.总经理审核:总经理
                      
        4.合同生成及贷后监管设定
        5.放款审核:
              1. 风控放款审核
              2.财务放款审核
                  财务放款如果审核通过,意味着财务会把钱转给用户
                          
       6.放款复核:
           财务人员确认用户有没有收到钱,网银转账
                   
       7.客户资料归档:
           由业务部人员对客户的资料归档统一存放,并审批确认资料是否完整
                   
       8.贷后监管:
           监控客户贷款的资金用途
                   
        9.贷款到期:
            展示贷款到期,即将到期,以及贷款预期的一些贷款业务,方便运营人员及时掌握贷款还款的信息
                    
        10.贷款结清
    

十四、JMeter接口测试

1.认识jmeter

JMeter是一个基于java的接口和性能测试工具

jmeter和loadrunner:
jmeter优点:
    1.开源免费:源代码公开,可以在源代码的基础上做二次开发,添加新的功能
    2.安装轻量简洁
    3.跨平台运行:由于java,只要装了jdk,很多平台都可以运行
    
jmeter缺点:
    不支持页面测试,只支持接口层面测试
    
    
roadrunner优点:功能强大
          缺点:
              1.价格昂贵,几十万美金
              2.安装复杂
              3.商业付费工具,闭源(源代码不公开)

2.jmeter安装

1.安装jdk:版本要求>=1.8
    验证:
        cmd输入:
            java
            javac
            java -version
            
2.jmeter配置环境变量:
    1. 新建系统变量:JMETER_HOME
       值为:D:\apache-jmeter-5.0(apache-jmeter-5.0的具体路径)
    2. 修改系统变量Path:%JMETER_HOME%\bin
    3. 验证Jmeter是否安装成功:cmd : jmeter
    
3.JMeter的启动方式:
    1. cmd输入:jmeter
    2. bin目录的:ApacheJMeter.jar
    3. bin目录的:jmeter.bat
       

2.jmeter怎么进行接口测试

1.TestPlan:测试计划,对应一个测试脚本
2.在测试计划内,新建一个Thread Group(线程组)
    添加方式: 右键测试计划 - add - Threads(Users) - ThreadGroup(线程组)
    作用: 用于模拟用户
    
    配置:
        1. number of threads(users): 线程数(用户数)
        2. Ramp-up period: 多少秒内启动多少用户(需要配合线程数)
        3. loop count: 循环数,每一个线程会循环运行多少次
            勾选forever,代表死循环: 每个线程都会一直运行
        4. scheduler: 调动器
            1. Duration: 持续时间(过了持续时间后,脚本会停止运行)
                注意:该配置需要勾选forever才会生效
                
3. 在线程组内,添加一个Sampler(取样器) - HTTP RequestsHttp请求)
    添加方式: 右键线程组 - add - Sampler(取样器) - Http请求
    作用: 用于填写http请求的相关信息(请求url,请求参数等)
    
    配置:
        protocol[http]: 协议(支持http和https)
        sever name or ip: 域名或Ip
        port number: 端口号
        path: 路径
        parameters: 请求参数
        
    注意: 不要有空格
    
4. 添加一个请求头(Http Header Manager):
    添加方式:右键线程组 - add - config element(配置元件) - Http headermanager(头部管理器)
    
5. 添加一个cookies管理器(Http Cookie Manager):
    添加方式: 右键线程组 - add - config element(配置元件) - Http Cookie Manager
    作用:用于自动存储cookies
    
6. 在线程组内,添加一个View Result Tree(查看结果树)
    添加方式:右键线程组 - add - Listener(监听器) - View Result Tree
    作用: 用于查看接口的响应数据
    
7. 在取样器内,添加一个响应断言:
    添加方式: 右键Http Requests - add - Assertions(断言器) - ResponceAssertion(响应断言)
    作用:用于判断响应数据是否符合预期
    
    配置:
        Patterns to test : 预期结果
        
8. 运行脚本,发送请求
    
    
总结:
    如何使用JMeter进行接口测试:
        1. 添加一个测试计划
        2. 在测试计划内添加一个线程组
        3. 在线程组内添加一个Http请求,并填写请求相关的信息
        4. 在线程组内添加请求头(可选)
        5. 在线程组内添加Http cookie Manager(可选)
        6. 在线程组内添加查看结果树,用于查看响应数据
        7. 在对应的取样器内,添加一个断言
            断言: 判断实际结果是否符合预期
        8. 运行Jmeter发送请求

3.jmeter的的元件,组件和作用域

元件: 是具有相似功能的组件的集合
组件: JMeter最小功能单元
作用域:JMeter组件能够作用在直接父级上

4.参数化

1.什么是参数化?
    把接口测试的数据存放到变量中,然后再进行动态读取
    在接口测试中,指的是不用写死数据,动态的去读取这个变量
    
2.为什么要进行参数化?
    1.业务功能的需要:
        比如:
        1.注册功能,账号不能重复
        2.支付订单,订单号不能多次重复支付
        3.被买的票,每张票都有id,不能重复被购买
   
    2.测试数据多样性的需要
        比如:
        注册的账号要求是11位手机号,测试的数据需要考虑10位,11位,中英文特殊符号等

3.JMeter如何实现参数化?

(1)CSV Data Set config:CSV数据集

        添加方式:右键线程组--add--config element--CSV Data Set config
        配置:
            filename:文件名
            fileencoding:uft-8
            Varible Names:变量名
        用法:
            1.创建一个CSV文件,直接Excel表格,并写入数据,然后保存到JMeter脚本所在目录
                注意:保存的文件类型必须是CSV或者TXT
                
            2.在线程组内,添加CSV Data Set Config
            
        注意:测试多个数据,需要到线程组(thread users)页面更改循环数(loop count)

(2)函数助手

        打开函数助手:option--function heler dialog
            1.下拉选择__Random
            作用:用于生成指定范围内的随机数
            用法:
                1.配置函数:
                    The minimum value allowed for a range of value:随机数的最小值
                    The maximum value allowed for a range of values:随机数的最大值
                2.把函数公式复制到请求参数内
                
            
            2.下拉选择__Random String:
                作用:生成随机字符串
                
                用法:
                    1.配置函数:
                        Random string:随机字符串的长度
                        Chars to use for random string generation:用于生成随机字符串的源
                    2.把函数公式复制到请求参数内
                    
                    
            3.下拉选择__Random Date
                作用:用于生成随机日期
                
                用法:
                    1.配置函数:
                        Format string for DateTimeFormatter (optional) (default yyyy-MM-dd):时间的格式,默认值是yyyy-MM-dd,为空则使用默认值
                        Start date (optional) (default: now):开始日期,默认值是当前日期,为空则使用默认值
                        End date:截止日期
                        注意:截止日期是开间值,取不到截止日期当天
                        
                    2.把函数公式复制到请求参数内
                    
                    
            4.下拉选择__RandomFromMultipleVars随机变量:
                作用:用于随机读取多个变量
                
                方法:
                    1.定义创建多个User defined variable(用户自定义变量)
                        右键线程组--add--config element--user defind variable
                    2.配置函数助手:__RandomFromMultipleVars
                        Source Variable(s) (use | as separator):
                        变量的集合,多个变量之间用 | 分割
                    3. 把函数公式复制到请求参数内

image.png

image.png

(3)用户自定义变量

    添加方式:右键线程组--add--config element - User defined variable
                    

5.接口的关联

什么是接口的关联:
    把前面接口的响应数据,作为后续接口的请求参数
例:首页的接口返回了很多商品编号,添加商品到购物车的请求参数,需要一个商品编号

接口关联的步骤:
    1.提取前面接口的响应数据:
        在对应的接口内添加:Regular Expression Extractor(正则表达式提取器)
        添加方式:
            1.右键对应的接口:add--post pressors(后置处理器)--Regular Expression Extractor
                正则表达式:用于匹配具有某种规则的文本
                
            配置:
            1.Name of created variable:创建变量名
            2.Regular Expression:正则表达式
                   左边界(.*?)有边界
            3.template:模板
                取第几个正则的值:
                    $1$:取第1个正则的值
                    
            4.Match no:取正则匹配到的第几个值
                0 for random:0表示随机
                
            5.default value:默认值
                如果正则表达式未提取到结果,则会使用默认值
                use empty default value:使用空未默认值
                
    2.在后续接口的请求参数中,使用正则表达式的变量
        一个正则取值: ${变量名}
        如果有多个正则取值:
        ${变量名_g1}
        ${变量名_g2}

image.png

image.png

6.JMeter脚本录制组件

HTTP Test Script Recorder:HTTP 测试脚本录制组件
    作用:用于录制HTTP协议的jmeter脚本

使用步骤:
    1.新建一个测试计划
    2.添加一个Non-test-element(非测试元件)-HTTP(S)Test Script Recorder
        HTTP(S)Test Script Recorder配置:
            1.port:端口号,注意不要和抓包工具冲突,关闭其他抓包工具()
            2.Target Controller:用于设置脚本存放在哪个控制器
                通常下拉选择TestPlan-Thread Group-Recording Controller
    3.在测试计划内,添加一个线程组
    4.在线程组内,添加一个Logic Controller(逻辑控制器)-Recording-controller(录制控制器)
        录制控制器的作用:
            录制的脚本,会存放在该控制器内
    5.打开谷歌浏览器--设置--搜索代理--打开代理设置--局域网设置:
        填写地址:127.0.0.1
        填写端口:8888  注意:要和HTTP测试脚本录制组件配置的端口号保持一致
        
    6.点击start,启动HTTP测试脚本录制组件
    7.在浏览器上进行正常的操作,生成脚本
    8.录制完成后,关闭Windows的代理设置
        Windows窗口搜索代理--打开代理设置--局域网设置--不勾选代理服务器
        
注意:如果要录制HTTPS协议的请求,需要安装jmeter的安全证书(证书在jmeter的bin目录内)
    1.打开浏览器--设置--搜索“证书”--安全--管理证书--选择受信任的根证书颁发机构
    2.点击左下角的导入--选中jmeter的bin目录内的安全证书(ApacheJMeterTemporaryRootCA.crt),根据提示安装

7.JMeter数据库测试

步骤:
   7. 1.复制mysql-connector-java-5.1.28.jar到jmeter的lib目录捏
    2.
    3.在测试计划内,添加一个config element-jdbc connection configration()
        作用:
        配置:
            varaible name:变量名
            1.database url:数据库连接地址
                jdbc:mysql://172.30.63.23:3306/lexian
            2.JDBC Driver class:下拉选择com.mysql.jdbc.Driver
            3.Username:数据库的用户名
            4.Password:数据库的密码
            
    4.在线程组内,添加取样器(JDBC Requests1.填写定义在jdbc连接配置组件内的变量名
        2.sql query:填写sql语句
        
        
   5.如果要填写多个sql语句,需要修改以下配置:
       1.修改jdbc connection configration(jdbc连接配置组件);
           1.database url修改:(在原来的url后面添加?allowMutiQueries=true)
               jdbc:mysql://172.30.63.23:3306/lexian?allowMutiQueries=true
                   allowMutiQueries=treu允许多个查询
                   
           2.修改jdbc requests:
               1.Query Type:下拉选择Callable Statement

8.JMeter+ant+jenkins接口自动化测试

Apache-jmeter:用于编写接口测试脚本
Apache-ant:用于指定运行配置(同时一定要配置build.xml文件)
Jenkins:用于构建运行脚本
        
Apache:开源软件基金会

一、jmeter安装配置环境变量

二、ant:
    1.解压安装到d盘
    2.配置环境变量
        1.新建系统变量:ANT_HOME
           值为:D:\apacheAnt
        2.修改系统变量Path:%ANT_HOME%\bin
        
        
    3. 验证安装: cmd : ant -version  
        
        
三、建立接口自动化项目:
    1.在d盘新建一个目录auto_jmeter_38
    2.JMeter脚本目录(jmeter_38)移动到auto_jmeter_38内,并重命名为testscripts
        testscripts:用于存放jmeter测试脚本
     3.在auto_jmeter_38内,新建目录:result
     4.在result目录内新建两个目录:report和jtl
         report:用于存放jmeter接口测试报告
         tjl:用于存放jmeter的运行日志
         
四、配置build.xml
1. 把build.xml文件复制到auto_jmeter_38目录内
2. 修改第7行,value修改为jmeter的安装目录
    value="D:\apache-jmeter-5.0"

3. 修改第9行,value修改为自动化项目的jtl目录
    value="D:\auto_jmeter_38\result\jtl"
4. 修改第11行,value修改为自动化项目的report目录
    value="D:\auto_jmeter_38\result\report"
5. 修改第29行,dir修改为自动化项目的testscripts目录:
    dir="D:\auto_jmeter_38\testscripts"
6. 保存文件:ctrl + s

五、修改jmeter的配置文件:jmeter.properties
1. 打开jmeter的bin目录内的jmeter.properties文件
2. 修改477行:jmeter.save.saveservice.output_format=xml
    注意去掉#
3. 保存文件:ctrl+s

六、安装jenkins:
    1. 在d盘新建jenkins目录,并复制jenkins.war到该目录内
    2. 打开cmd:
        1. 切换到d盘: d:
        2. 切换到Jenkins目录: cd jenkins
        3. 运行jenkins.war:
            java -jar jenkins.war --httpPort=80868086是创建的端口号)
        
        4. 在浏览器上输入:127.0.0.1:8086
        
七、创建jenkins任务,用于运行jmeter脚本
    1. iterm名称:auto_jemter_38
    2. 勾选:构建一个自由风格的软件项目
    3. 构建:
        1. 增加构建步骤:Invoke ANT
        2. 填写all和build.xml文件的路径
        

9.jmeter性能测试

性能测试是指在一定的负载情况下,系统的响应时间等特性是否满足特定的性能需求
区分以下用户数概念
    在线用户数:在一段时间内(比如一小时两小时)对系统进行了操作
    并发用户数:在某个时间点(比如凌晨零点)一起点某个按钮
    预计系统实际用户数:根据之前系统的总用户数得出一些波峰波谷值来调整带宽

十五、roadrunner性能测试

1.性能测试的基础

之前讲的APP性能测试指的是对APP客户端的性能测试
今天讲的是对服务器的性能测试
一般如果没有说明对什么的性能测试,都是说的对服务器的性能测试

1.什么是软件性能?
    软件的性能:效率、特性

效率特性:
    1.时间特性:指系统处理客户请求的响应时间
    2.资源特性:指在进行性能测试过程中,系统资源消耗的情况
        资源:CPU、内存、磁盘
        
2.什么是性能测试?--本质:模拟多人压服务端
    针对软件性能进行的测试
    通过自动化测试工具模拟用户来测试服务器是否能承载用户多并发,系统是否稳定,从用户角度看响应时间速度是否达到期望

3.性能测试测什么?
    1.响应时间
    2.吞吐量
    3.TPS:每秒处理事务(用户操作)的数量
    4.并发用户数
    5.资源占有率
    6.其他:网络(调节不同的网络带宽),每秒点击数,PV pageview 页面每次访问 数量加一,UV URL网址 被访问客户端数量
4.性能测试的目的
    1.评估当前系统能力:
        系统未做过任何性能测试,对系统的当前性能情况不了解,通过测试得到系统整体的评估
    2.寻找性能瓶颈,优化性能:
        某业务操作响应时间长、某系统上线一段时间运行越来越慢,这些需要逐步分析并定位调?
    3.预测未来性能:
        当用户数和业务增加是能否及时应对,如何调整,是增加应用服务器,还是数据库服务器,还是要优化代码逻辑
    

5.性能测试注意事项
    1.性能测试应尽可能早地进行:
        与功能测试一样,越早越容易发现问题并修复问题
    2.性能测试需要团队支持:
        性能的优化需要开发部门、运维以及相关部门的合作
    3.性能测试需要独立的测试环境:
        性能测试的环境相对功能环境有更严格的要求,需要独立的网络和硬件环境,来保证被测系统是独立可控的,甚至需要专门的管理员和流程来对被测环境进行控制
    4.测试前定义明确的测试目标:
        由于性能测试执行的成本较高,为了确保性能测试执行的有效性,在性能测试前应明确本次性能测试的目标,以及相应的性能指标

2.性能测试的分类

    1.基准测试
        在一定的软件、硬件及网络条件下,模拟单用户访问请求一种或多种业务,产出基准性能数据
        为多用户并发测试和综合场景测试等性能分析提供参考依据
            例如:一个用户打开百度首页时间耗费1秒--基准测试数据
            100个用户打开百度首页时间耗费5秒--并发测试数据
    2.并发测试
        通过模拟用户并发访问,测试多用户同时访问同一应用、模块或数据,观察系统是否存在问题
    3.负载测试
        压力测试的前提
        通过对被测系统上不断加压,直到超过预定的指标或者资源达到了一种饱和状态不能加压为止
        测试系统崩溃前的表现
    4.压力测试
        系统已经达到一定的饱和程度,例如CPU、磁盘等处于饱和状态下,此时系统能够处理业务的能力,系统是否会出现错误
        测试系统崩溃后的表现,系统崩溃后还能不能提供服务,崩溃后怎么恢复服务
    5.稳定性测试
        又称可靠测试,在给系统加载一定业务压力的情况下,使系统运行一段时间7*24,以此检测系统是否稳定
    6.配置测试
        配置测试通过对被测系统的软/硬件环境的调整,了解各种不同配置对系统的性能影响的程度,从而找到系统各项资源的最优配置
        
        
7.性能测试的指标
    1.了解性能指标:
        1.系统指标:
            1.响应时间
                定义:从用户发送一个请求到用户接受到服务器返回的响应数据这段时间就是响应时间
                计算方法:
                    响应时间=(N1+N2+N3+N4)+(A1+A2+A32.并发数
                并发用户数
                    某一物理时刻同时向系统提交请求的用户数
                在线用户数
                    某段时间内访问系统的用户数,这些用户并不一定同时向系统提交请求
                系统用户数
                    系统注册的总用户数据
                三者之间的关系
                    系统用户数>=在线用户数>=并发用户数
            3.TPS等等
                定义:
                    Transactions Per Second 每秒事物数,单位时间内系统处理的客户端请求的事物次数
                    计算方法
                    tps=并发数/平均响应时间
                    例如:3秒钟可以完成一个理发
                    现在有10个理发师
                    tps=10/3=3.3(每个理发师可以完成3.3个理发)
        资源指标:
            资源(CPU、内存、磁盘)利用率
                定义:
                    指的是对不同系统资源的使用程度,通常以占用最大值的百分比来衡量
                服务器资源指标
                    CPU使用率
                        长时间情况下,一般可接受上线不超过85%
                    内存利用率
                        一般至少有10%可用内存,内存使用率可接受上线为85%
                    磁盘IO
                        一般使用%Disk Time(磁盘用于读写操作锁占用的时间百分比)度量磁盘读写性能
                    网络带宽
                        判断网络连接速度是否是瓶颈,可以用该计数器的值和目前网络的贷款比较
                        单位:20Mbps
        
        
        

3.了解性能测试的流程

需求分析--测试计划及方案--测试执行--结果分析

需求分析
    性能需求分析结论或目标
明确
    明确被测系统
        系统架构
        系统要求
            开发语言:PHP
            运行环境:
                Linux/Windows
                Nginx / APACHE
                PHP 5.5--7.0
                MYSQL 5.5--5.7
                
            
    明确性能测试内容
        例如电商网站业务包括注册与登录、首页热点商品展示、商品详情页、我的账户、搜索、支付等
    明确测试策略
        基准测试
        压力测试
        负载测试
        稳定性测试
    明确性能测试指标
        无明确需求指标
            需要自己挖掘或者团队一起分析
            只能靠自己查找相关资料,和类似的系统对比,以及对未来流量的预估,确定性能测试需求的指标
        明确需求指标
            例如:类似下面的指标
            对某业务并发20个用户
            平均响应时间要小于等于3S
            事物成功率为100%
            CPU使用率小于等于85%
            值需要根据执行分析结果与预期指标做对比,如果有不满足的,就需要分析问题所在
        明确性能指标
            响应时间
            并发用户数
            tps
                根据28定律:80%的用户请求,集中在20%的热点数据或者时间段
                例如:客单价200-500,以平均300计算
                某电商要求每天完成交易额2亿
                分析:
                    采用28定律,以24小时计算
                    每天交易数:200000000/300=666666.66666
                    每小时交易数:666666*0.8/(24*0.2)=111111.1111
                结果:
                    tps=并发用户数/响应时间=111111/3600秒=30.86

3.会简单使用loadrunner去录制、增强脚本、运行场景、生成测试报告

loadrunner架构:
    说明:
        1.user测试人员)--使用工具Vugen(虚拟用户生成器VirtualUser generation)录制用户的行为生成C语言,修改C语言文件模拟测试业务脚本(例如:登录,注册)
        2.Vugen业务脚本经过controller工具(控制器),将一个虚拟机用户模拟成多个用户,去访问被测试系统(服务端),并且监控被测试系统数据(响应时间,TPS,吞吐量,并发用户数···)
        3.controller会将监控数据交给Analysis(分析器)产生性能测试报告
        4.loadrunner=Vugen+controller+analysis
                    Vugen模拟一个虚拟用户,产生业务脚本
                    Controller将一个用户变成多个用户 监控被测系统数据
                    analysis 通过分析数据产生数据报告
                    
                    
检查点
    需求:为什么需要检查点
    例子:录制一个登录脚本,没有录制退出(sign off)按钮这步
    说明:使用错误的用户名和密码登录,不会报错
        因为lr工具默认情况不是使用业务规则(登录是否成功),来决定是否报错,而是根据HTTP协议的响应码:200==响应成功 404 505==响应失败
        说明:即使服务端响应的是登录失败的网页,但是响应码仍然是200,因为这也算是服务端给出的响应
    如果录制点击退出(sign off)按钮这步,使用错误的用户名和密码登录就会报错(原因提示sign off按钮找不到)
    就不再使用状态码决定响应是否成功,使用业务规则决定相应是否成功
    
   解决方案:使用lr检查点
            文本检查点
            图片检查点
            

检查点和参数化结合使用

                

4.会使用nmon把系统的资源监控情况生成报表