Web Api 使用VS 实现自动化测试2018-06-25

2018-06-25  本文已影响17人  3479da3be4fa

******************************************************************************************

关注凡猫学院:加微信+17031115530,拉测试微信群交流

关注凡猫学院:加微信+17031115530,拉测试微信群交流

*******************************************************************************************

进入到项目开发的后期,测试变得尤为重要。模拟用户使用场景,根据测试用例建立自动化测试就成为了下一个开发目标。期间也找了不少的测试工具,针对于Web Api 比较简单的有PostMan 或者嵌入项目中的WebApi Test Client 甚至于Fiddler,但这些都不足以进行连续的测试。一些老牌的测试工具,如loadrunner、QTP 等又过于臃肿,且重点在于网站测试,快速掌握又只能以录制为主。既然使用visual studio 开发的web api,那么使用visual studio 自带的测试项目不是能够更好的融合吗,而且有了编程基础,自动化测试会做得更好。其实微软提供了丰富的测试框架,从单元测试到顺序测试、性能测试和压力测试,之前之所以排斥不用,还是因为先入为主觉得太复杂,既然单元测试能够满足需求,就没必要再深入研究。如果测试人员局限于于写测试用例,UI 功能测试,那基本上测试生涯也就止步不前。如果测试人员开始着手敲敲代码,就会发现原来测试领域也有很大的一片天地。以下项目主要实现了对api 的自动化测试和压力测试,涉及到参数化、提取规则和验证规则。微软提供的测试api:http://northwindapi.cloudapp.net1、建立项目2、新建web 性能测试微信+17031115530,拉测试微信群交流3、项目进行配置,停止录制添加web 服务请求;添加上下文参数,上下文参数类似于公共变量,可以在所有测试中使用,而在测试中,如果要使用到上下文参数,使用{{参数名}}即可。上下文参数对应的代码为e.WebTest.Context,接下来作动态参数时会讲到;添加验证规则,此处添加的验证规则是全局的验证规则,比如访问时间不能超过5s 等添加自定义的web 测试插件,web 测试插件可以修改全局的访问地址、参数、变量等微信+17031115530,拉测试微信群交流4、配置请求并测试4.1、添加上下文参数Host= http://northwindapi.cloudapp.netParaId=04.2、修改web 请求Url:{{Host}}/api/Seminars,请求修改为Get微信+17031115530,拉测试微信群交流运行测试,查看结果5、请求参数的修改方法1:添加QueryString微信+17031115530,拉测试微信群交流测试结果,将只返回SeminarId 为1 的数据微信+17031115530,拉测试微信群交流方法2:使用全局上下文参数方法3:添加WebTestRequestPlugin,使用代码改变请求参数,使用Plugin 改变参数可以实现参数的计算public class QSPlugin : WebTestRequestPlugin{public override void PostRequest(object sender, PostRequestEventArgs e){}public override void PreRequest(object sender, PreRequestEventArgs e){// 在QueryString 中加入参数e.Request.QueryStringParameters.Add("id", "1");}微信+17031115530,拉测试微信群交流}添加请求插件,选择QSPlugin方法4:添加WebTestPlugin,建立ContextPlugin,全局插件用于对于所有请求的公共参数如sign,timespan,appkey 等的情况。添加全局插件微信+17031115530,拉测试微信群交流微信+17031115530,拉测试微信群交流[Description("全局")]public class ContextPlugin : WebTestPlugin{private bool m_parseDependents = true;public override void PreWebTest(object sender, PreWebTestEventArgs e){// TODO: Add code to execute before the test.}public override void PostWebTest(object sender, PostWebTestEventArgs e){// TODO: Add code to execute after the test.}public override void PreRequest(object sender, PreRequestEventArgs e){// e.Request.Url = e.Request.Url + "/growing/test/123";// 在QueryString 中加入参数e.Request.QueryStringParameters.Add("id", "1");}// Properties for the plugin.[DefaultValue(true)][Description("All requests will have their ParseDependentsRequests property set to thisvalue")]public bool ParseDependents{get{微信+17031115530,拉测试微信群交流return m_parseDependents;}set{m_parseDependents = value;}}}方法5:使用上一个测试的返回值作为参数,由于提取规则的实现,就可以实现完全模拟客户端访问api 的情况,这也是实现自动化测试的根本。比如登录后,自动捕获UserId,方便以后的测试使用UserId。下面的示例流程为,首先从Seminars 中获取列表,取第一个列表的SeminarId 作为下一个测试的Id;建立自定义的JSON 提取规则JsonExtractionRule.cs,根据JSON 的键名提取对应的值。[DisplayName("Extract JSON rule")][Description("Custom extraction rule for extracting values from JSON web responsegenerated by web performance test")]public class JsonExtractionRule : ExtractionRule{public String Token { get; set; }public override void Extract(object sender, ExtractionEventArgs e){var jsonString = e.Response.BodyString;var list =Newtonsoft.Json.JsonConvert.DeserializeObject>(jsonString);var json = list.First();JToken jToken = null;if (json == null){e.Success = false;e.Message = "Response received not in JSON format";}else{微信+17031115530,拉测试微信群交流jToken = json.SelectToken(Token);if (jToken == null){e.Success = false;e.Message = String.Format("{0} : Not found", Token);}else{e.Success = true;e.WebTest.Context.Add(this.ContextParameterName, jToken);}}}}}微信+17031115530,拉测试微信群交流微信+17031115530,拉测试微信群交流在第二个测试中,使用定义到的“DynamicId”值作为参数6、自定义验证规则的实现新建自定义验证规则ValidateRules;我们验证返回的数组数量为4 则为通过;[DisplayName("Result count validation rule")][Description("This rule checks to see the REST API returns number of items requested")]public class ValidateResultCode : ValidationRule{微信+17031115530,拉测试微信群交流public override void Validate(object sender, ValidationEventArgs e){var jsonString = e.Response.BodyString;var list =Newtonsoft.Json.JsonConvert.DeserializeObject>(jsonString);

if (list.Count == 3)

{

e.IsValid = true;

}

else

{

e.IsValid = false;

}

}

}

微信+17031115530,拉测试微信群交流

运行测试,结果如下

微信+17031115530,拉测试微信群交流

7、根据webtest 建立负载测试

微信+17031115530,拉测试微信群交流

微信+17031115530,拉测试微信群交流

8、具体参数没有深入研究,选择以上建立的测试,完成,并运行负载测试

微信+17031115530,拉测试微信群交流

******************************************************************************************

关注凡猫学院:加微信+17031115530,拉测试微信群交流

关注凡猫学院:加微信+17031115530,拉测试微信群交流

*******************************************************************************************

上一篇下一篇

猜你喜欢

热点阅读