自己动手写压力测试
作者:网络转载 发布时间:[ 2014/1/10 15:43:29 ] 推荐标签:压力测试 验收测试
Sync 还是Async 这,是一个问题
.Net 4,5 出来之后,一直没有对它的新功能和特性太在意。只是公司升级使用VS2012,除了灰不溜秋的界面,而所谓的性能提高(其实,是VS2010太次)之外,也没有特别感觉。
然而,这次在查看HttpClient资料时,却意外发现了.Net 4.5 语法级别的一个亮点: Asyn和Await。这让异步编程更简便,更漂亮。看来,今后异步编程是一个大潮流,微软也不惜余力。
新语法应用之后的效果,似乎和平时的同步编码没有太大区别,除了不时冒出来的Await和Async
var form_data=new Dictionary<string, string>();
form_data.Add("system_account","test1@skight.com");
form_data.Add("system_password","123456");
foreach (var key_value in form_data)
{
values.Add(key_value.Key, key_value.Value);
}
var httpClient = new HttpClient();
var content= await httpClient.GetStringAsync("http://esr20syst.skight.com/District/03/UserLogin.do");
Console.WriteLine(t.Result);
异步性能的福利是不可随小觑的。之前,有Node.js构建的的Web服务比Apache快很多(http://zgadzaj.com/benchmarking-nodejs-basic-performance-tests-against-apache-php)是得益于Javascript天生的函数回调方式支持的异步运行。现在有.Net对Async的友好支持,以及大量组件基于异步方式的重写。据说,微软推荐,凡是运行时间超过20毫秒的功能,要用异步方式来写。HttpClient是一个例子,它的前身WebClient不具异步调用,而HttpClient干脆不提供同步接口。
平行宇宙 Parallel
其实,无论是的Async还是Parallel,都是语法糖,可是作为辛苦的开发者,我们好的是这一口。
Async让我们发出网络请不必再等待,Parallel让我们很容易的持续发出平行请求,这是一个完全的压力测试模型了。我这里简单设置了一个100 * 10 个请求。没有具体计算,共发出多少个请求,我只知道,多得已经足够让我的系统重现产品机上的问题了。
Parallel.For(1, 1000, i =>
Parallel.For(1, 5, case_number =>
LoginScenario(case_number)
.run_by(runner)
));
附:我的业务语法糖DSL
这里是我对系统页面操作的定义代码,用语法糖DSL的方式实现,一定程度上实现了需求即代码即文档的要求吧。这部分代码不能直接运行,因为它使用了我自己的Web框架,从而可以用强类型自动生成URL。这里提供出来只是作参考,作为示例的一部分。
private static Scenario LoginScenario(int case_number)
{
return
UI.context(Keys.Context.District.with_value(DistrictIdentifier.of("03")))
.to<UserLoginGet>()
.then(
UI.input(SystemPayloadKeys.Account.with_value(string.Format("test{0}@skight.com", case_number)))
.and_input(SystemPayloadKeys.Password.with_value("123456"))
.to<UserLoginPost>());
}
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11