架构师训练营 Week7 作业

用户头像
Frank Zeng
关注
发布于: 2020 年 07 月 21 日

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



以下是基于.net core版本写的一段请求并发数,请求地址,请求总数的时间性能统计.

ConcurrentQueue<decimal> costTime = new ConcurrentQueue<decimal>();
Console.WriteLine("请输入并发数:");
var currentCount = Console.ReadLine();
int.TryParse(currentCount, out int current);
var cacheCurrent = current;
var list = new List<int>();
while(current > 0)
{
list.Add(current--);
}
Console.WriteLine("请输入请求地址:");
var urlAddress = Console.ReadLine();
Console.WriteLine("请输入请求总数:");
var totalNumber = Console.ReadLine();
int.TryParse(totalNumber, out int total);
var cache = total;
//请求总次数
while (total > 0)
{
//并发数
var tasks = list.Select(async i=> {
using (var httpClient = new HttpClient())
{
var sw = new Stopwatch();
sw.Start();
var response = await httpClient.GetAsync(urlAddress).ConfigureAwait(false);
var responseContent = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
sw.Stop();
costTime.Enqueue(sw.ElapsedMilliseconds);
}
});
await Task.WhenAll(tasks);
--total;
}
var sortedList = new List<decimal>(costTime).OrderByDescending(item => item).ToList();
var averageTime = sortedList.Sum() / sortedList.Count();//平均时间
var index = 0;
decimal sum = 0;
var number = Convert.ToInt32(cache * cacheCurrent * 0.05); //95%
foreach (var item in sortedList)
{
if (index >= number)
{
sum += item;
}
++index;
}
var mostAverage = sum / (sortedList.Count() - number);
Console.WriteLine("Hello World!");



用户头像

Frank Zeng

关注

还未添加个人签名 2018.09.17 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营Week7作业