七大技术流程
目录七大技术流程
目录
4.APP抓包与弱网和服务器压力测试(Charles)… 25
1接口测试(Postman)
1.进入首页,导航栏左边是历史记录,每次的测试都会在这里留下历史记录,方便再次使用或者回看。
2.导航栏右侧为保存历史的集合,可以新建集合,将做过的接口测试记录保存到集合中
3.根据接口文档输入请求信息。
从接口文档里的获取Header头信息,请求方式、地址、参数名字、参数值。
Get请求方式:
Post请求方式:
- 编写断言进行实际结果与预期结果进行对比。
5.保存在测试集中。
6.保存完毕后可以继续编写新的测试脚本,也可以发送请求,进行调试。
7.举例子:
1.Get方式:
接口地址:
http://www.weather.com.cn/data/sk/101010100.html
请求方式:get
无参数值
正确返回状态 北京 东南风 其他的返回状态为错
http://www.weather.com.cn/data/cityinfo/101010100.html
请求方式:get
请求参数:key:id value:1(随便输入数)
正确返回状态 北京 多云转阴 其他的返回状态位错
接口地址:
https://preview.mypsy365.com/api/course_set
请求方式:get
需要添加头信息Headers key: Accept Value: application/vnd.edusoho.v2+json
正确返回状态 data 其他的data1 data2则为错误
Post请求方式:
接口地址:www.mypsy365.com/login_check
请求方式:post
参数值key:username value:18610737657
参数值key:password value: 111111
返回状态:登录成功 错误状态:错误提示 天天心理网 (本项目已经不做了 未维护)
请求地址 http://www.ada56.com/slogin/commit
请求方式 POST
请求参数 :key:username Value: 18610737657
key:password Value:111111
key:deviceId Value:38fbf0c3-63fe-4df5-8855-4f3d9d9ce8a9
服务器返回状态:200
2接口压测(jmeter)
- 进入首页,添加线程组
2.修改线程组名称、线程数、完成时间、循环次数
3.添加Http请求
4.添加http请求参数
5.添加Http信息头管理器
6.编写头信息
7.添加结果树和聚合报告
8.添加响应断言
9.添加断言结果和图形结果
10.要实现接口自动化需要添加正则表达式提取器,将获取下个http请求需要的参数。
11正则表达式提取式子内容填写
a. 关于正则表达式
():括起来的部分就是要提取的。
.:匹配除换行外的任何字符串。
+:代表+号前面的字符必须至少出现一次(一次或多次)。
?:代表?前面的字符最多可以出现一次,在找到第一个匹配项后停止(0次或1次)。
*:代表 *号前面的字符可以不出现,也可以出现一次或者多次(0次、1次或者多次)
(.*):贪婪模式,匹配尽可能多的字符
(.*?)或(.+?):匹配尽可能少的字符,一旦匹配到第一个就不往下走了。
b. 关于模板
若想提取多个值的话,比如是a和b这两个值,则可以写成:
1
1
1
2
2
2。无论要提取多少个值,引用名称就是一个的,比如名称为id,
i
d
g
o
:
获
取
整
个
字
符
串
a
b
,
{id_go}:获取整个字符串ab,
idgo:获取整个字符串ab,{id_g1}:获取的是a,${id_g2}:获取的是b。
下面有一个具体的实例,如下图所示:
12.新建下一个http请求 将从上个http请求中根据正则表达式提取器引用的值作为参数传入这个http请求。后续的过程和上面一样。
13所有接口用例都写好之后添加全局的查看结果树、聚合报告
14.举例子;
布卡项目登录接口
请求地址 http://a.buka.tv/buka/api/user/login.do
请求方式 post
请求参数(需要在jmeter的bodydata里添加参数(直接复制以下))
{“user_phone_num”:“18210033224”,“user_password”:“111111”,“user_device”:“b9a0c082-e133-f0d5-e7d1-aff61f8e2cf8”}
请求头信息
名称 Referer 值 http://u.buka.tv/
Accept-Language zh-CN,zh;q=0.8
Origin http://u.buka.tv
Content-Type application/json;charset=UTF-8
Accept-Encoding gzip, deflate
Accept application/json, text/plain, /
-
服务器返回状态:“flag_password”:1,
-
“user_area_id”:0,
-
"connect_email
布卡项目搜索接口
请求地址http://a.buka.tv/buka/api/usercenterauth/userstate.do
请求方式 post
请求参数(需要在jmeter的bodydata里添加参数(直接复制))
{“user_token”:“1234”,“user_device”:“b9a0c082-e133-f0d5-e7d1-aff61f8e2cf8”}
请求头信息
名称 Referer 值 http://u.buka.tv/
Accept-Language zh-CN,zh;q=0.8
Origin http://u.buka.tv
Content-Type application/json;charset=UTF-8
Accept-Encoding gzip, deflate
Accept application/json, text/plain, /
服务器返回状态: “data”:2
在做接口自动化的时候可利用7 8接口进行测试,需要关联正则表达式。
在做自动化的时候搜索接口会报错误用户身份验证失败,需要在登录接口添加正则表达式,搜索接口的1234参数改为${token}实时传递动态值。
结果树:
正确通过的为绿色打勾
请求:显示请求的接口数据
响应数据:显示接口文档的数据和是否正确的提示
有错误的为红色叹号,相应的问题会在响应结果中显示出来
聚合报告:
- Label:每个 JMeter 的 element(例如 HTTP Request)都有一个 Name 属性,这里显示的就是 Name 属性的值
- #Samples:请求数——表示这次测试中一共发出了多少个请求,如果模拟10个用户,每个用户迭代10次,那么这里显示100
- Average:平均响应时间——默认情况下是单个 Request 的平均响应时间,当使用了 Transaction Controller 时,以Transaction 为单位显示平均响应时间
- Median:中位数,也就是 50% 用户的响应时间
- 90% Line:90% 用户的响应时间
- Min:最小响应时间
- Max:最大响应时间
- Error%:错误率——错误请求数/请求总数
- Throughput:吞吐量——默认情况下表示每秒完成的请求数(Request per Second),当使用了 Transaction Controller 时,也可以表示类似 LoadRunner 的 Transaction per Second 数
- KB/Sec:每秒从服务器端接收到的数据量,相当于LoadRunner中的Throughput/Sec
一般而言,性能测试中我们需要重点关注的数据有: #Samples 请求数,Average 平均响应时间,Min 最小响应时间,Max 最大响应时间,Error% 错误率及Throughput 吞吐量。
断言结果:
图形结果:
3抓包测试(burpsuite)
- 首页进入代理Ip、端口设置。
- 编辑端口、ip(使用不被占用的端口号)
- 设置被测试手机的无线 使用手动代理功能 使手机和电脑处于同一ip、和端口
苹果:
安卓:
4.设置完成后操作手机qq,一会儿会抓取到数据
- 每次捕获到数据需要点击一下Forward,因为你浏览器发起的请求被拦截,现在处于拦截状态,需要点击Forward继续本次请求。
a. Raw 这个视图主要显示web请求的raw格式,包含请求地址,http协议版本, 主机头,浏览器信息,accept可接受的内容类型,字符集,编码方式,cookies等,可以手动修改这些内容,然后在点击forward进行渗透测试
b. params 这个视图主要是显示客户端请求的参数信息,get或者post的参数,cookies参数,也可以修改
c.headers是头部信息和Raw其实差不多,展示更直观
d.Hex 这个试图显示Raw的二进制内容
- 查看协议详情。
Host:域名
Method:请求方式
URl:地址
Params:参数
Edited:编辑
Status:状态码
Length:请求长度
点击域名,查看详细信息,主要看header。
Get请求方式:
Request:
get-地址+协议版本
host-域名
system-系统
accept-接受请求内容
accept-language-可接收语言
platformld-操作平台
Accept-encoding-是否支持压缩
deviceToken-获取测试设备
deviceld-设备编号
user-agent-用户代理
connection-请求成功关闭
netType-不用管
channelld-不用管
model-型号 版本
carrier-不用管
response
http/1.1-状态码
server-使用的什么服务器
date-日期
content-Type-返回的请求类型
connection-请求成功关闭
cache-control-缓存控制
content-length-请求内容长度
x-dowered-by-什么语言写的
状态码:
1** | 信息,服务器收到请求,需要请求者继续执行操作 |
---|---|
2** | 成功,操作被成功接收并处理 |
3** | 重定向,需要进一步的操作以完成请求 |
4** | 客户端错误,请求包含语法错误或无法完成请求 |
5** | 服务器错误,服务器在处理请求的过程中发生了错误 |
常用的状态码:
· 200 - 请求成功
· 301 - 资源(网页等)被永久转移到其它URL
· 404 - 请求的资源(网页等)不存在
· 500 - 内部服务器错误
Post请求方式:
Request:
post-地址+协议版本
host-域名
content-type-请求内容类型
content-length-请求内容长度
accept-接收内容类型
content-encoding-是否支持压缩
accept-language-可接收的语言
user-agent-用户代理
connection-请求成功关闭
response:
http/1.1=协议版本
content-length-请求内容长度
4.APP抓包与弱网和服务器压力测试(Charles)
1.进入首页设置代理端口号
- 设置端口
-
设置手机代理ip和端口号(和burpsuite设置方法一样)
-
手机端抓包https
上述1、2只针对http请求。由于https协议的特殊性,所以要求电脑端和手机端都需要安装下证书,否则会看到返回的数据都是乱码。
a. 电脑端证书下载
b. 手机端证书下载
在设备上打开这个网址 http://www.charlesproxy.com/getssl 安装 Charles SSL 证书。
注意,同一个手机对应不同电脑上的Charles都要分别下载证书进行认证,因为手机的证书是和电脑端的Charles一一配对的。
- 选择Proxy | Proxy Settings,弹出proxy设置选项卡,勾选Enable SSL Proxying,在Location部份选择add,按如下图添加,抓取任意站点、443端口的数据。
6.开始/关闭捕获
7.在手机上操作app,抓取的数据会出现在左侧
8.点击可以查看详细信息
请求总览–请求头—响应结果—请求详情(,包含加载时间等)–时间线图表–加注释
Overview:
URL——请求url的路径、文件和查询字符串
Status——状态是否已完成
Response Code——响应状态码
Protocol——该seesion使用的协议(Http/https/ftp)
SSL——协议版本号
Method——该seesion使用的方法(get/post/put等)
Content-Type——响应内容类型
Timing :
Request Start Time——接收到的第一个请求的第一个字节的时间点
Request End Time——发送到客户端的最后一个响应的最后一个字节的时间
Response Start Time——响应开始时间
Response End Time——响应结束时间
Duration——整个请求—响应持续时间
DNS——所有选中的session解析DNS所花费的时间的总和
Connect——所有选中session建立TCP/IP连接所花费的时间总和
Request——请求耗费时间
Response——响应耗费时间
Size
Request Header——请求头大小
Response Header——响应头大小
Request –请求大小
Response -响应大小
Total——请求头+响应头+请求+响应字节大小
Request:
Get:地址。
Host:域名。
Accept:接收类型。
User-Agent:用户代理。
Accept-Language:接受语言类型。
Accept-Encoding:是否可压缩
AppID:该COM组件所在进程的AppID值。
channel:渠道包来源
Contextuuid:设备唯一标识
Response:
Summary:
时间线图表:
- 更改网络环境,进行不同网络测试。
10.服务器压测。
11.快速定位Bug.
1.从request查请求值是否存在
A:请求值存在:我们需要借助接口文档检查传递的参数是否正确。
a请求值错误:证明请求值错误:证明前端传参出现了Bug,是前端的问题。
b请求值正确:证明是后端出现了Bug,是后台的问题。
(1) 返回值存在:查看接口文档检查返回值是否正确,错误证明是后台返回出现问题。
(2) 返回值不存在:没有返回前端请求的内容,错误证明是后台返回出现问题。
B:请求值不存在:前端做了操作,却没有请求值,证明前端的问题。
5.安卓监测(Emmagee)
- 打开Emmagee,进入首页,选择要测试的软件,点击测试。
2.从手机的默认路径找到文件发送到电脑中,用Excel打开。第一次一般需要改一下格式。右键用记事本打开,另存为
3.用excel打开。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s7FFIlqY-1594000098713)
根据规格判断是否符合要求。
6压力测试(ab)
- Win+r,cmd 切换到你安装的Apache的bin目录
- 使用方式:ab [options] [http://]hostname[:port]/path
常用命令
-n:总请求次数(最小默认为1)
-c:并发次数(最小默认为1且不能大于总请求次数,如:10个请求,10个并发,实际就是1人请求1次)
-t:设置ab命令模拟请求的时间
-k:设置ab命令允许1个http会话响应多个请求
后面直接写请求路径即可:http://www.test.com/xxx/xxx.html
注意:@1不具体到文件需要在最后加/
@2 ab命令可能会由于目标web服务器做了相应的过滤处理,导致在某些情况下收不到任何数据,这个时候可以使用“-H”参数,来模拟成浏览器发送请求。
例如:模拟成Chrome浏览器向百度发送1个请求
ab -H “Mozilla/5.0 (Windows; U; Windows NT 5.1; en-Us) AppleWeb Kit/534.2 (KHTML, like Gecko) Chrome/6.0.447.0 Safari/534.2” www.baidu.com/
- 测试
A:无参请求:ab -n 5 baidu.com/
B:get请求方式:ab – n 10 -c 10 "http://paycenter.gotrip8.com/querypay.aspx? Version
=1.0&InputCharset=GBK&SignType=MD5&PlatFormCode=CPOTA&OrderNo=TEST0123456784&Sign=185FA68CA23AAE7B3A02A226ABD30297"
注意:请求URL要使用双引号括起来,否则ab无法识别&符号[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
参数文档:参数文档内容使用“key=value&key=value&key=value…”方式进行拼接
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qakgZe13-1594000098720)(file:///C:/Users/lh/AppData/Local/Temp/msohtmlclip1/01/clip_image126.jpg)]
注意:-p是参数文档路径,-T是大写英文字母,post表单格式为:application/x-www-form-urlencoded
4.测试结果分析
Server Software 服务器系统
Server Hostname 服务器域名
Server Port 服务器端口
Document Path 访问的路径
Document Length 访问的文件大小
Concurrency Level 并发请求数,可以理解为同一时间的访问人数
Time taken fortests 响应时间
Complete requests 总共响应次数
Failed requests 失败的请求次数
Write errors 失败的写入次数
Total transferred 传输的总数据量
HTML transferred HTML页面大小
Requests per second 每秒支持多少人访问(吞吐率)
Time per request 上面的是用户平均请求等待时间
Time per request 下面的是服务器平均请求处理时间
Transfer rate 平均每秒收到的字节
处理完成所有请求数所花费的时间 / 总请求数,即
Time taken for / Complete requests
可以看到,它是吞吐率的倒数。
同时,它也=用户平均请求等待时间/并发用户数,即
Time per request / Concurrency Level
可以根据固定并发数,增加请求次数或者固定请求次数,调整并发数来查看上面三个值得变化来调优服务器
7.性能测试(Loadrunner)
- 打开首页,点击Create/Edit Scripts。
2. 点击Web(Http/HTML),进入脚本生成器
3.点击开始事务
-
输入事务名字
-
开始在浏览器操作,输入登录信息,点击登录。
集合点: 我们来想象一个场景,10名运动员参加长跑比赛,出发点同时起跑,他们是并排奔跑的;跑了N圈之后,因为有体能更强的,有体能稍弱的,他们的队形并排变成了前后。几乎一个跑道就可以供应他们的奔跑(运行),那么其余的9条跑道就是空闲的。
为了充分的利用跑道,可以将跑道的起点设置一个集合点,当所有运动员跑完一圈后在起跑点集合,然后再同时起跑。
运动员可以看作是虚拟用户,跑道可以看作是系统资源。设置集合点可以模式更加真实的并发请求,从而增加对系统的负载。
- 点击结束事务
7. 名字要和开始的时候一样。
8. 点击小三角,进行回放脚本,看看有没有录制的错误
8. 点击TOOLS的第二个,然后点击取消
9. 查看事务并发数量,做性能不是只做1遍最好3遍,阶梯式做性能,例如:这次做100,下次200,最后300的,之后点击OK。
-
进入场景控制器。
-
点击run-time-setting,设置参数,否则系统反馈时间快,来不及思考,就会报异常。
11场景设置。
场景总共要跑20个虚拟用户,每15秒启动2个虚拟用户Vuser
场景中的虚拟用户在场景中总共要不断的执行5分钟。(如果录制的时间执行一次只需要10秒钟,那么一个Vuser 在5分钟内执行某一时间就执行了几十次,20个Vuser在5分钟内的事件数就达到几百件)
当Vuser跑完了,怎么停止掉场景中的所有的Vuser呢?在这里是设置了每30秒中停止5个Vuser,20个Vuser需要4分钟全部停止。
11.设置好了 点击run
- 进入结果分析器。
正常的情况:
不正常的情况:
13.通过率算法
通过事物数/失败加通过加中断=通过率
14.这个数值的含义是登录请求的时间,最小值、最大值、和平均值,这个也是按照公司的规定。公司需要设定时间的,如果超过范围,就是响应时间过长,服务器需要优化。
- LR Controler Run tab页添加服务器的性能显示
15.服务器性能数据的添加
16.是否过大过高,这个设置是需要在运行场景的时候手动设置地址的,看的就是通过率、响应时间、服务器的内存、cpu ,因为LR这个工具就是对服务器的压力
17.集合点设置。
含义:
当通过controller虚拟多个用户执行该脚本时,用户的启动或运行都不一定是同时的。集合点是在脚本的某处设置一个标记,当有虚拟用户运行到这个标记时,停下等待,知道所有用户到达这个标记处,。再一同进行下面的步骤,这样就能用最大的用户并发去做下面的操作。集合点主要是对关键步骤的加压
插入集合点的目的:
它可以设置多个用户等待到同一点,同时出发同一个事物,达到模拟真实环境下多个用户同时操作,同时模拟负载,实现性能的最终目的。
简单的说:主要是为了衡量在加重负载的情况下服务器的性能情况,从而找到性能瓶颈。这是一种特殊情况的并发。
方法示例(lr_rendezvous):
18.添加负载机。
点击Add按钮,来增加负载发起机
在Name 处填入IP地址,点击确定
选中负载发起机,点击Connect
19.保存