Selenium WEB 自动化性能测试

xinxi · 2018年11月06日 · 最后由 xiansheng 回复于 2019年07月10日 · 2494 次阅读

介绍

从浏览器打开一个网站,需要 dns 解析、tcp 三次握手、发送请求、dom 渲染、js 加载等以一系列操作,最终在用户面前展示完整的页面.

如果打开页面加载或者白屏的时间较长,用户会立即关掉或者放弃浏览,用户流量自然会丢失.

所以在 web 项目中 web 页面的加载时间测试是必不可少的.

相关参数

全部页面加载时间

全部页面载入时间指从最初启动浏览开始,直到所有元素都被加载完成后,在 2 秒后仍然没有网络活动的时间.
0-2 秒:用户体验最好,打分 100
2-8 秒:用户可以容忍,从第 2 秒开始,每超过 1 秒减 5 分
8-15 秒:用户不能忍受,从第 2 秒开始,每超过 1 秒减 5 分

页面加载时间

从页面开始加载到页面 onload 事件触发的时间。一般来说 onload 触发代表着直接通过 HTML 引用的 CSS,JS,图片资源已经完全加载完毕.

白屏时间

输入网址到数据返回时间,此时页面还没有进行 dom 渲染

首字节时间

从开始加载到收到服务器返回数据的第一字节的时间

DNS 时间

进行域名解析所需要的时间

TCP 时间

客户端建立连接的时间

DOM 渲染时间

DOM 节点渲染时间,此时页面还不能执行操作事件

js 加载时间

js、css、图片加载,此时用户可以对页面进行操作事件

访问 web 页面过程

image

查看性能加载数据

使用 chrome 浏览器中的控制台,使用 window.performance.timing 函数可以查看页面的加载数据.

自动化工具

有了可以查看 web 页面的 js 函数,就可以利用一些自动化手段测试 web 页面并且自动化生产性能数据.

主要使用 selenium+spring boot+rest-assured+highcharts 等技术完成自动化测试

selenium

使用 selenium 的 headless 模式可以无感的打开一个网页并进行自动化测试,这种模式可以降低 cpu 和内存的消耗

spring boot

spring boot 是 java 的 web 应用框架,使用 velocity 模版接受请求参数,可以动态渲染 web 页面.

rest-assured

rest-assured 是 java 的一个接口测试框架,用于给服务端传递参数.

highcharts

highcharts 是 HTML5 交互性图表库,有丰富的柱状图、饼图等

展示效果

git 地址

https://github.com/xinxi1990/webtest
共收到 8 条回复 时间 点赞
xinxi 关闭了讨论 11月06日 22:22
xinxi 重新开启了讨论 11月06日 22:28

windows 上能跑么?老是提示找不到指定文件。。。
Caused by: java.io.IOException: Cannot run program "lsof": CreateProcess error=2
, 系统找不到指定的文件。
at java.lang.ProcessBuilder.start(Unknown Source)

我的命令行是这么输的:
D:\Project\webtest\target>java -jar webtest-1.0.0.jar -w http://www.baidu.com -r
"D:\Project\webtest\report" "C:\Program Files (x86)\Google\Chrome\Application\c
hromedriver.exe"

xinxi #11 · 2018年11月07日 Author
zlp 回复

windows 没试过,你可以在 windows 开个 linux 虚拟环境试试
参考命令:
java -jar webtest-1.0.0.jar
-w http://www.baidu.com
-r /Users/xinxi/Desktop/report
-c /Users/xinxi/Desktop/WebTest/target/chromedriver

还是没搞起来。。。我在 centos7 上运行 chromedrive 会报这个错,不知道你碰到过没
Starting ChromeDriver 2.42.591071 (0b695ff80972cc1a65a5cd643186d2ae582cd4ac) on port 9515
Only local connections are allowed.
[1541644797.546][SEVERE]: bind() returned an error, errno=99: 无法指定被请求的地址 (99

然后运行你的 jar 包会提示下面这个错,网上百度了一下有些说是版本不一致,但是已经匹配上版本了。。。
Caused by: org.openqa.selenium.WebDriverException: unknown error: DevToolsActivePort file doesn't exist
(Driver info: chromedriver=2.42.591071 (0b695ff80972cc1a65a5cd643186d2ae582cd4ac),platform=Linux 3.10.0-862.11.6.el7.x86_64 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 60.12 seconds
Build info: version: 'unknown', revision: 'unknown', time: 'unknown'
System info: host: 'testadmin', ip: '10.200.111.149', os.name: 'Linux', os.arch: 'amd64', os.version: '3.10.0-862.11.6.el7.x86_64', java.version: '1.8.0_181'
Driver info: driver.version: ChromeDriver

研究了半天。。。终于在 windows 上跑起来了😁 ~
主要碰到的问题:
1.8081 端口我电脑上被其他进程占了,所以报错了~我后来改成其他了
2.windows 上好像不能用 lsof -i:%s 命令,所以把 killPid("8081") 注释了

zlp 回复

我也遇到这个问题,你是改哪个文件,然后重新打 jar 包吗?

我也搞定了,注释了端口的,但是 win 上有乱码,编码的研究一下。

注释端口

乱码==

豆豆 回复

乱码可以在 java -jar 的时候加个参数
-Dfile.encoding=utf-8

Unable to access jarfile webtest-1.0.0.jar
什么原因

3楼 已删除
13楼 已删除
1楼 已删除
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册