zoukankan      html  css  js  c++  java
  • jmeter-接口测试项目

    #################################

    接口测试清单

    1,接口清单不是现成的,需要自己提取,
    2,接口无外乎增删改查,接口分功能模块,每一个模块有几个接口,
    接口有三要素
    url
    提交数据
    响应数据,

    api文档,
    文章中描述了,程序的功能,以及功能描述,访问路径,和提交响应的数据,
    开发和测试都要遵守这个文档,

    接口清单就是从api文档提取整理的,

    怎么写api文档,
    1,写的时候,遵守restful规范,一般都是开发写的,
    描述性文本占到50%以上,就是一个小白也能看懂,这就是一个好文档,
    业务逻辑设计的时候,全面,合理,

    怎么提取接口清单?
    提取三要素,
    1,url,提交数据,响应数据,


    ################################

    测试学生管理系统

    1,功能测试,

    2,自动化测试
    让程序代替人工做测试,
    提交的数据是程序生成的,
    还有断言是程序自动判断的,

    3,性能,压力测试,
    响应时间,
    高并发,高负载,

    4,生成html格式的测试报告,
    使用柱状图和饼状图的方式,

    ###############################

    功能测试
    1,测试各个接口,功能是否正常运行,
    测试数据分成,正向的和逆向的,这是基本的两大方向,用户的操作是多样性的,看接口响应是否符合预期,
    比如注册,有正常的和不正常的,合法的和非法的,

    怎么用?
    1,搭建测试框架,
    2,设计测试用例
    2.1 正确的账号,正确的密码,所有的都是正确的,
    2.2 必填项都填写了,选填的没填写,
    2.3 客户没有录入必填项,或者格式不对,
    3,参数化覆盖测试用例,
    把上面的每一个场景,设计测试数据

    ############################

    功能测试,
    1,搭建框架,测试计划,线程组,查看结果树,http请求默认值,http请求信息头,
    这样框架就搭建完了,
    注意,有多少数据,线程组的线程数,就填写多少,

    2,学生管理系统添加学生信息,
    线程组添加一个http请求,输入json格式的数据,
    {
    id = "",
    name = "",
    age = ""
    }

    3,将数据保存在外部文件,
    新建一个文本文档,比如test.txt
    1,andy,11
    2,merry,22


    4,添加csv data setconfig
    文件路径:
    文件格式:utf-8
    字段名:id,name,age

    5,json数据中引入
    {
    id = "${id}",
    name = "${name}",
    age = "${age}"
    }

    #########################

    功能测试;----------设计测试用例
    1,上面是基本的正向的测试
    我们要设计测试用例

    用例分类,就是用户操作分类:
    一种是正向,一种是逆向的,
    用例的设计原则:
    1,覆盖所有的必选参数,比如账号,密码,邮箱等,
    2,组合可选参数,账号,密码,邮箱等+地址,+昵称等,这就是排列组合,这是一个覆盖率的问题,有时候覆盖率100%,不是最好,要考虑人力成本和时间成本,
    可选参数可能会有几十个,,
    3,参数的边界值,比如年龄1-180之间是合法的,可能有的人乱写就不行,比如字母,数字,负数,大于180等,1,180,这种边界要特别注意,
    4,如果参数的取值是枚举,需要覆盖所有的枚举值,比如状态,流程,这样的,都要覆盖到,
    5,空数据,逆向,不输入,
    6,包含特殊字符,逆向,乱七八糟的支付,
    7,越界数据,长度的限制,比如密码,过长,过短,
    8,错误的数据,比如手机,邮箱等,

    写测试用例可以使用Excel文档

    1,列
    接口名称__正向,url,提交方式,这是第一行,
    第二行,提交数据, 预期结果,
    数据1:格式都正确,且所有字段都添加: 200,添加成功,返回添加数据,
    数据2:添加必填数据,组合可选数据, 200,添加成功,返回添加数据,
    ...

    接口名称__逆向__必填数据不填写,url,提交方式,这是第一行,
    第二行,提交数据,                    预期结果,
    数据1:id不正常,其余正常, 200,错误提示:id不能为空,
    数据2:name不正常,其余正常,             200,错误提示:name不能为空,
    数据3:age不正常,其余正常,             200,错误提示:age不能为空,
    ...

    接口名称__逆向__特殊字符,url,提交方式,这是第一行,
    第二行,提交数据,                    预期结果,
    数据1:id特殊字符              200,错误提示:id不能有特殊字符,
    数据2:name特殊字符                   200,可以有特殊字符,添加成功, 具体的和需求人员确定是否可以
    ...

    接口名称__逆向__长度,url,提交方式,这是第一行,
    第二行,提交数据,                    预期结果,
    数据1:id超长 200,错误提示,id过长
    数据1:name超长                      200,错误提示,name过长
    ...

    接口名称__逆向__错误数据,url,提交方式,这是第一行,
    第二行,提交数据,                    预期结果,
    数据1 : id重复 200,错误提示,id重复
    数据2,pwd格式错误, 200,密码格式错误,

     ######################################

    功能测试-------参数化覆盖测试用例

    1,把所有的测试用例里面设计到的数据设计成为数据,进行参数化,

    2,所以测试用例就是一个大纲,

     ########################################

    jmeter自动化测试
    1,由程序生成测试数据
    2,有程序代替人工判断相应结果,

    为什么要自动化测试?
    安全高效啊

    怎么用?
    自动化测试原则:
    1,测试的是程序的主要功能,经常被复用的功能,
    自动化测试往往是对功能测试的补充,比如更新上线,我们验证回归之前的功能是否正常,

    2,自动化测试数据,一般只考虑正向的,
    自动化测试是对功能测试的补充,当然也是程序生成多样的测试数据有困难,

    3,你自动化测试之后,数据库数据要恢复成为测试之前的样子,优点:可以重复使用,
    4,线程组之间不要有关联,不要有业务逻辑,优点:可以单独测试某一个功能,

    实现流程,

    1,搭建框架,测试计划, setup和teardown线程组,http请求默认值,http信息头,查看结果树,

    2,setup和teardown线程组,最后把测试数据都删除,
    添加setup线程组,新增数据操作,
    在setup线程组添加http请求:
    输入json数据:
    使用counter计数器,计数器使用的时候,第一个字段写false,因为需要全局唯一,计数器是全局的,
    {
    id = "id_${__counter(FALSE,)}",
    name = "name_${__counter(FALSE,)}",
    age = "age_${__counter(FALSE,)}"

    }

    在该http请求添加断言L:添加--断言-响应断言,
    断言响应文本,
    添加:id_
    也就是只要返回数据出现了id_这就是添加成功了,


    teardown线程组,最后把测试数据都删除,
    这是要拿到setup线程组的字段值,然后到这个teardown线程组来删除数据,这就是涉及到了跨线程组传值的问题,
    使用什么?放到共享空间,使用的函数,__setProperty(),,,__property()
    setup线程组要使用__setProperty()线程组来设置,
    怎么获取id的值呢??
    需要对响应结果进行处理,可以使用xpath,和正则表达式提取,这里使用正则表达式处理,
    teardown线程组要使用,__property()线程组来引入,
    添加----后置处理器----正则表达式处理器,
    第一个字段,变量名:myid,
    第二个字段,正则表达式,"id":"(.*?)"
    第三个字段:$1$
    匹配数字,1

    添加__setProperty()
    第一个字段:out
    第二个字段,${myid}

    添加--取样器,beanshell sampler 调用这个函数,
    把调用的格式,粘贴进来,${__setProperty(out,${myid},)}


    teardown线程组
    添加----http请求
    url是删除的api地址,
    添加一个函数,__property()
    第一个参数,out,
    url:/api/dept/${__property(out,,)}/

    http请求-添加-断言
    使用状态码
    添加:204,

    3,数据生成可以使用counter函数,数据格式,使用自定义前缀_counter计数器函数

    4,使用到断言组件,让程序代替人工,判断结果,

     #################################

    自动化测试------修改和查询
    继续上面的,
    添加01,setup线程组
    删除04,teardown线程组,
    修改02,普通线程组,
    查询03,普通线程组,
    普通线程组的执行顺序是不一定的,


    添加修改线程组,
    添加http请求,
    url:/api/dept/${__property(out,,)}/
    json数据:
    {
    id = "${__property(out,,)}",
    name = "修改后_name",
    age = "修改后_age"
    }
    添加断言:
    断言类型:文本
    添加:修改后,

    添加查询线程组,
    这个url是查询指定,
    url:/api/dept/${__property(out,,)}/,
    因为你查询所以可能会有分页,你不知道在那一页,查所有数据也太多了,
    也可以加断言,

     ################################

    自动化测试-----直连数据库  
    1,jmeter不具备直连数据库,需要整合第三方
    添加一个jar包,

    2,配置连接信息
    添加-配置元件---jdbc connection config,
    配置连接信息,数据库路径,


    3,添加线程组,添加一个jdbc请求,
    添加----取样器,jdbc request,
    使用jdbc发送sql语句,操作数据,
    select * from user_info where id like "id_%";
    赋值给一个变量,myjdbcid 如果是多个值,即使变量名_1,变量名_2.。。。。

    注意sql语句有类型,select update,

    4,将数据传递给http请求,
    赋值给一个变量,myjdbcid   如果是多个值,即使变量名_1,变量名_2.。。。


    ######################################

    性能,压力测试
    模拟多种场景,测试程序的,响应时间,出错率等,
    性能直接关系到用户体验


    原则:
    1,参数化:尽量避免,采用从外部读取参数,使用固定参数+函数格式,
    为什么避免外部读取,因为外部读取参数,会影响性能,所以性能测试尽量避免

    2,查看结果树,必须清楚单个接口内查看结果树,
    如果不去掉,会非常的占用测试机的性能,在测试计划下添加一个查看结果树,

    3,报告,性能测试报告,建议添加聚合报告,
    性能测试一般都是几百上千次,结果树看不过来,聚合报告好点,

    4,线程组:增删查改每一个功能点,都需要建立单独的线程组,避免在同一个线程组内添加,
    方便对这个功能进行单独的测试,
    这些请求都是不一样的,

    5,分布式:
    如果并发量比较大,建议使用分布式,

    6,新增和删除,建议不要采用时间模式来压测,建议使用线程数和循环数,
    时间模式就是定时器,一个集合点,还有一个常量吞吐定时器,QPS,
    查是多常见的,


    #########################################

    性能测试------1区间多用户操作
    场景1:
    模拟300秒内开启100个虚拟用户,每个用户循环访问服务器资源10次,要求平均响应时间在30ms内,且错误率为0
    300秒就是线程组的时间期限
    100个虚拟用户,就是线程组的线程数,
    循环访问10,就是循环次数是10,
    平均响应时间和错误率,是通过聚合报告判断,

    怎么实现:
    1,搭建框架,测试计划,线程组,http请求默认值,http信息头管理器,聚合报告,

    2,线程组,添加一个http请求,
    300秒,就是rampup period
    100用户,线程数,
    10次循环,循环次数,


    #####################################

    性能测试2-----高并发访问,
    场景2:
    模拟100个用户同时访问数据库,要求平均响应时间在30ms内,且错误率为0
    100个用户,线程数,
    同时访问,就是集合点,

    怎么实现:
    1,搭建框架,搭建框架,测试计划,线程组,http请求默认值,http信息头管理器,聚合报告,

    2,添加线程组,http 请求,添加一个定时器,同步定时器,
    第一个字段,100
    第二个字段,0,就是无限等待的意思,

    3,看聚合报告,

    ########################################

    性能测试3------高频率访问,
    场景3:
    模拟,2个用户,都以20QPS的频率访问服务器资源,持续10秒,要求平均响应时间在30ms内,且错误率为0
    用到了定时器,常量吞吐
    20QPS,就是每年20次的访问,

    怎么实现:
    1,搭建框架,搭建框架,测试计划,线程组,http请求默认值,http信息头管理器,聚合报告,
    2,线程组:
    两个用户,就是线程数是2
    每一个线程组独立运行,
    循环次数,是循环200次,因为2个线程组,秒20次,持续10秒, 就10*20,每一个用户循环200次,

    添加定时器,常量吞吐定时器,换算成为分钟,1200次每分钟,

    3,看聚合报告,

    #################################

    生成测试报告
    以html文档,结合柱状图,饼状图显示

    为什么?
    更加友好,更加直观,

    怎么用?
    1,dos命令下,执行测试脚本,生成html格式的测试报告
    Jmeter -n -t 测试计划03_性能测试.jmx -l test.txt -e -o ./outhtml
    -n 是说not GUI,
    -t 脚本文件,
    -l 日志文件,
    test.txt 这是执行中的日志文件,这个文件一定是唯一的,
    -e 生成
    -o 输出,
    /outhtml 这是文件夹,执行之后会有一个index.html文件,
    这种转换成

    2,先使用jmeter运行测试脚本,生成日志文件,再将日志文件,转换成为html的报告。




    #############################

  • 相关阅读:
    Prime Time使用
    cache与MMU与总线仲裁
    IUS tcl cmd
    CPU cache
    generated clock
    PL301 matrix内部模块
    014-数据结构-树形结构-基数树、Patricia树、默克尔树、梅克尔帕特里夏树( Merkle Patricia Tree, MPT)
    001-软件架构概览、maven补充【分包工程、合并包、web容器插件】、git补充
    013-数据结构-树形结构-决策树
    012-数据结构-树形结构-哈希树[hashtree]、字典树[trietree]、后缀树
  • 原文地址:https://www.cnblogs.com/andy0816/p/12561480.html
Copyright © 2011-2022 走看看