目前自己有接触到的接口主要有三类:WCF、WebService及http接口,前两类是标准型的服务接口。对于如何对接口进行功能测试,大家可以去网上查找下,有很多已有的测试工具,比如SoapUI、HttpClient等。在这里,我将主要针对如何运用LoadRunner进行接口的性能测试进行说明,其实LoadRunner也可以进行接口的功能测试。
在这之前,我相信大家应该都清楚LoadRunner是一款性能测试工具,它也可以运用在我们接口测试过程中。其实无论运用哪种测试方法,接口测试的原理是一样的,通过测试程序模拟客户端向服务器发送请求报文,服务器接收请求报文后对相应的报文做出处理然后再把应答报文发送给客户端,而客户端接收应答报文的这一个过程。
进行接口测试的必要前提是开发人员需要详细地将接口的说明文档提供给测试人员,该说明文档最基本的要求如下: 接口的测试地址:/mem/login?params=xxxxx 请求报文参数说明: 参数说明 param属性描述请求报文格式:
请求参数params:CallValue的json格式数据{ "param":"{ "userAccount":"18028721432", "passWord":"e10adc3949ba59abbe56e057f20f883e", "device":"IOS", }", "version":"v1.0", "loginLog":"2014-03-02 12:12:12……"}123456789
应答报文的参数接口说明:
参数说明(ReturnValue对象的json格式数据)content属性描述
//成功原语:ReturnValue的json格式数据{ "message":"18028721432登入成功", "state":0,"content":"{"memberId": 5,"session": " ad=8829e2711ec*c*6b6f665046c*373a370"}"}//失败原语样例1:{"message":"18028721432登入失败"" state ": 1, //用户名或者密码错误}1234567891011121314
有了上述的接口说明之后,测试人员就可以根据这些描述在LoadRunner中手写测试脚本,我这边更多的是运用函数web_submit_data(),web_custom_request()向服务器发送请求。
第一种写法:使用web_custom_request()
web_custom_request("login", "URL=http://{IP}/MiddleWare/mem/login?", "Method=POST", "Resource=0", "RecContentType=application/json", "Referer=", "Mode=HTTP", "Body=params={\"param\": {\"userAccount\":\"15819730001\",\"passWord\":\"e10adc3949ba59abbe56e057f20f883e\",\"device\":\"IOS\"},\"version\":\"v1.0\",\"loginLog\":\"20150810094530\"}",LAST);1234567891011
第二种方法:使用web_submit_data()
web_submit_data("login", "Action=http://{IP}/MiddleWare/mem/login?", "Method=POST", "TargetFrame=", "RecContentType=application/json", "Snapshot=t5.inf", "Mode=HTTP", ITEMDATA, "Name=params","Value={\"param\":{\"userAccount\":\"{UserName}\",\"passWord\":\"e10adc3949ba59abbe56e057f20f883e\",\"device\":\"IOS\"},\"version\":\"v1.0\",\"loginLog\":\"{testTimeParam}\"}",ENDITEM, LAST );12345678910
方法一适合请求参数较少的情况,如果请求参数较多时,我们可以先将请求参数拼接成一个字符串,然后通过web_custom_request()向服务器发送请求。
上面是如何运用LoadRunner进行接口测试,那么如何判断接口返回信息的正确性呢?这就需要用到文本检查点或关联了,可参考博客中的web_reg_find()及web_reg_save_param_ex函数详解。
由于web_reg_find()及web_reg_save_param_ex是注册型函数,因此需要放在web_custom_request()、web_submit_data等函数前面。
如:web_reg_save_param_ex( "ParamName=sucStatusParam", "LB=\"state\":", "RB=,", SEARCH_FILTERS, "Scope=Body", "IgnoreRedirections=Yes", "RequestUrl=*/MiddleWare/*", LAST);web_custom_request("login", "URL=http://{IP}/MiddleWare/mem/login?", "Method=POST", "Resource=0", "RecContentType=application/json", "Referer=", "Mode=HTTP","Body=params={\"param\":{\"userAccount\":\"15819730001\",\"passWord\":\"e10adc3949ba59abbe56e057f20f883e\",\"device\":\"IOS\"},\"version\":\"v1.0\",\"loginLog\":\"20150810094530\"}", LAST);if (atoi(lr_eval_string("{sucStatusParam}")) == 0){ lr_output_message("登录成功"); } else{ lr_error_message("登录失败"); }1234567891011121314151617181920212223242526