写点什么

web 性能压测工具

用户头像
莫莫大人
关注
发布于: 2020 年 07 月 23 日
web 性能压测工具

用你熟悉的编程语言写一个 web 性能压测工具,输入参数:URL,请求总次数,并发数。输出参数:平均响应时间,95% 响应时间。用这个测试工具以 10 并发、100 次请求压测 www.baidu.com


使用机器为 i5 处理器,结果输出如图,但并不是每次都能出来比较接近的结果,有时会高至 40ms。

还有以下问题需要之后进一步的探索:

  1. 在相同的系统环境下与相同的参数设置下连续运行程序多次,是什么导致了平均响应时间的大幅波动?(我猜也许跟本地机器无关,确实是请求链接时的网络波动)

  2. 我测试的方式是否准确,运行时间里是否包含了其他无关因素的影响?

  3. 使用 Task 类与使用 Parallel 类来做有什么区别?

  4. 95%响应时间纠结了好久,没想清楚怎么做。不可能愚蠢到去用 List 排序。也许是自己对概念的理解还不准确。


using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using System.Net;
namespace WebTest{ public class Program { public static void Main(string[] args) { //设置并发线程数 int parallel = 10; //设置Http请求次数 int requestTimes = 100;
HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create("http://www.baidu.com/"); List<int> Reti = new List<int>(); for (int i = 0; i < requestTimes; i++) { Reti.Add(i); }
List<Task> task = new List<Task>(); TaskFactory taskfactory = new TaskFactory(); DateTime start_time = DateTime.Now; Reti.ForEach(id => { task.Add(taskfactory.StartNew(async () => { WebResponse result = await myReq.GetResponseAsync();
})); if (task.Count >= parallel) { Task.WaitAny(task.ToArray()); task = task.Where(t => t.Status == TaskStatus.Running).ToList();
} }); DateTime end_time = DateTime.Now; TimeSpan ts = end_time - start_time; int ch = (int)ts.TotalMilliseconds; Console.WriteLine("{0}线程并发,{1}次请求的 平均响应时间为:{2}ms ", parallel, requestTimes, ch / parallel); Console.ReadLine(); } }}
复制代码


学习总结:

本周的学习内容围绕性能优化与性能测试(贴两张笔记图吧,就不慢慢敲字了)



发布于: 2020 年 07 月 23 日阅读数: 68
用户头像

莫莫大人

关注

还未添加个人签名 2018.07.31 加入

还未添加个人简介

评论

发布
暂无评论
web 性能压测工具