注意
- 此次实践的
jmeter
版本不能过高,建议用3.1 - 大量性能压测时,不介意使用此教程,此次实践只为简单练手
改为放到body data中放json
设置代理后,登录接口抱错,抓包登录接口发现是header的Accept设置错误,设置加了个applicaiton/json
再次回放,登录成功了,但是登录后的其他接口一直返回403,因为所有接口的头部加了Authorization
验证,在登录接口设置后置处理器的json提取器
查看登录接口返回的数据
新建后置处理器的json提取器
设置提取Authorization
的值
HTTP Header设置请求参数
最终回放成功
Finish
,DOMLoaded
和Load
的区别DOMLoaded
和Load
DOMContentLoaded
和 Load
分别对应 页面 DOMContentLoaded
和 Load
事件触发的时间点DOMContentLoaded
:DOM
树构建完成。即HTML
页面由上向下解析HTML
结构到末尾封闭标签</html>
。 Load
:页面加载完毕。 DOM
树构建完成后,继续加载html/css
中的图片资源等外部资源,加载完成后视为页面加载完毕。DOMContentLoaded
会比 Load
时间小,两者时间差大致等于外部资源加载的时间。1 | <html> |
3.js
执行(不包括异步部分)后,后面的 html
才能允许渲染, DOMContentLoaded
应该是指 最后一个字节都被渲染出来后的时间 (onDocumentChange
状态变成 ready
)。而 onLoad
的触发除了dom
还包括所有依赖元素,上例中就是要等 1.jpg
加载完成(或出错)后才能触发Finish
Chrome devtools
中的Finish
时间似乎包括页面上的异步加载(非阻塞)对象/元素,这些对象/元素可能会在页面的onload
事件触发后继续下载。Load
时间,因为用户可以更容易地感知到这一点,此时用户可以看到浏览器已完成工作并且页面已准备就绪。Finish
永远不会停止并继续增加,因此它可能不是对网页响应时间的最佳评估。Finish
的时间比 Load
大也有可能小,引用于这篇文章Finish 时间与DOMContentLoaded 和 Load 并无直接关系。
Finish 时间是页面上所有 http 请求发送到响应完成的时间,HTTP1.0/1.1 协议限定,单个域名的请求并发量是 6 个,即Finish是所有请求(不只是XHR请求,还包括DOC,img,js,css等资源的请求)在并发量为6的限制下完成的时间。
Finish 的时间比 Load 大,意味着页面有相当部分的请求量,
Finish 的时间比 Load 小,意味着页面请求量很少,如果页面是只有一个 html文档请求的静态页面,Finish时间基本就等于HTML文档请求的时间
页面发送请求和页面解析文档结构,分属两个不同的线程,
1 | import PyChromeDevTools |
得到结果为:
1 | Page Loading Time: 1.702894687652588 |
在chrome浏览器的console下调试,基本上和load时间一致:
在Console
输入 window.performance.getEntries()
,可以看到页面上所有的资源请求,不统计404的请求
有65个请求,里面有请求的哪个节点耗时,和url,查看第一个请求duration
其实就是页面的load
时间
想过把这所有资源的duration
相加应该就能得到Finish
时间?,经过测试,当然是不行的,第一个请求duration
虽然是页面的load
时间,但是它可能包含了页面上的非异步的请求,同时也包含了css
,img
,dom
的加载时间,因此相加统计肯定会被Finish
要大
1 | from selenium import webdriver |
1 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { |
1 | import pandas as pd |
python3.x已经把md5 module移除了。要想用md5得用hashlib module,
1 | import hashlib |
其实可简写,如下面的md5的例子,hashlib.md5(data),就可以了
但是对中文字符串md5怎么办?
中文字符在Python中是以unicode存在的,同一个字符串在不同的编码体系下有不同的值,所以在hash前要进行编码,个人建议转为gb2312,因为对比发现,我下载的一个工具算出的md5值是与gb2312编码后算出的md5值一样。
1 | import hashlib |
1 | import socket |
1 | import socket |
1 | import java.io.BufferedReader; |
来自: http://blog.csdn.net/ChenTianSaber/article/details/52274257?locationNum=4
1 | import re |
1 | mport time |
1 | firewall-cmd --zone=public --add-port=8100/tcp --permanent |
1 | # 后台启动django服务,输出日志到日志文件中,内容为标准输出和标准错误 |
按照依赖文件
1 | yum install gcc-c++ |
配置nginx
1 | wget -c https://nginx.org/download/nginx-1.10.1.tar.gz |
修改配置
1 | vim nginx.conf |
关掉防火墙的端口
1 | //8088,自己指定端口 |
重启nginx
1 | //检查配置是否正确 |
前台正常访问
局限性。
1 | cmd=adb shell monkey -p com.dgm.user --throttle 500 --ignore-timeouts --ignore-crashes --monitor-native-crashes -v -v |
1 | # -*- coding: utf-8 -*- |
1 | import monkeyConfig |
1 | def cpu_men_plots(cpu, men): |
找到了一篇英文文章说的就是构造百万级别http请求
http://pawelmhm.github.io/asyncio/python/aiohttp/2016/04/22/asyncio-aiohttp.html
作者对各个请求给服务器造成的情况作出了详细的对比。我就偷个懒没有。。。
基于py3.5 3.4的语法请自行度娘
1 | import asyncio |
1 | import asyncio |