面面俱到的Java接口自动化测试实战,java 接口测试框架
文章开头说:技术渣用于界面自动化。大神们,请轻轻喷!提出更多的优化方案和问题。
过去,接口测试是通过postman和soapUI进行的。postman的Chrome插件数量众多,难以管理。同时运行起来比较麻烦,需要一个一个的点击运行。平时调试确实可以用于界面自动化,但是不适合。
Soap ui(重命名为ready!API)是一个很好的工具,它同时支持soap和rest接口。它还支持安全性、性能和其他测试。当然,那是商业工具,高级功能是要收费的。我觉得没问题,但是工具方便,扩展性差,所以面临工具不清楚的问题。那大概是因为我用的哪个版本不稳定吧。
有些人还直接使用Jmeter或loadrunner进行界面自动化。当然,管理用例也需要很多时间。有了robot framework的框架,使用关键字驱动接口也是朋友们多次推荐的,可惜我对python不太熟悉,即使不会也放弃了。
和开源框架放心。具体请看地址。https://code.Google.com/p/rest-assured/Its也相当有趣。过几天,我想介绍和使用这个框架。我们家开发写的界面不规范,我不忍心杀了它。
我现在换成这个思路。现在我的接口协议是http,所以直接用java的http客户端。然后接口以json格式返回后,引入json-lib,方便分析获取。同样,因为需要与数据库交互,所以引入了MyBatis。用例也继承了TestNG。这是为了便于管理接口(
所以整个项目涉及框架包,比如httpclientjsonmybaitstengpio(Excel)log4j。
在这个过程中,我封装了一些主要代码。
在http客户端封装中,如果请求正常,只要从接口收到完整的请求,return的接口就会返回json:
publistaticsonggetapi(URI)throwsurissyntaxexception,io exception(closeable http client=http clients . creat ts ts ts)ts log . info( Execute API request http get . getrequestline));responsehandlerstringresponsehandler=newresponsehandlerstring({ publicstringhandleresponse(finalhttpresponseresponse)})io异常{ int status=response . get status line()。getStatusCode);if(status=200 status 300(httpentityentity=response . get entity));返回实体!=null?实体效用;tostring(实体):null;} else {log.error(请求错误,状态码为 response.getstatusline))。getstatuscode);ThrownewClientProtocol异常(“意外状态:”状态);};};string响应体=http client.execute (http get,response handler);jsonobjectdataobject=JSON object . from object(响应体);返回一个数据对象;}最后{ http client . close(;}
这个请求可以开始了。如何获取网址?你刚才说要用excel管理界面。例如,我新设置了以下文件:
全音阶的第七音
d用来标识我需要读取哪一行数据。TName只说明这个接口是什么接口,Method说明接口是什么类型。根据不同的类型调用不同的httpclient封装方法,后跟URL拼接接口。拼接URL的关键代码如下:
/** * 请求链接拼接* * @param tid哪一行的超过数据* @param参数参数* @return uri */公共静态URI returnURI(字符串tid,字符串.参数){ String path=system。getproperty(用户。dir’)文件。分隔符 src 文件。分隔符主文件。分隔符“资源”文件。分隔符 excel 文件。“分隔符”API。xls ;excel engine . file path=pathexcelengine . sheet name= API//从超过拿数据list API data=getApiData(tid);String getor post=((String)API数据。get(2)).toLowerCase();//系统。出去。println(getor post);字符串方案=(字符串)API数据。get(3);String API host=(String)API数据。get(4);String API path=(String)API数据。get(5);//URI拼接string buffer string buffer=new string buffer(scheme):// API host API path ?);HashMapString,String HashMap=new HashMap();int p=0;while(p参数。长度){ hashmap。put((字符串)API数据。get(p 6),parameters[p]);p=P1;} hashmap.put(autoKey ,string。(参数的值。timestamp _ Long()));//int I=hashmap。size();//System.out.println(map大小I);int num=0;//System.out.println(map里面的值散列表。entry set());for(散列表.EntryString,字符串条目:hashmap。entry set()){ num;if(num==hashmap。size()){字符串缓冲区。追加(条目。getkey()=条目。getvalue());} else {字符串缓冲区。追加(条目。getkey()=条目。getvalue()“”);} }字符串URL=字符串缓冲区。tostring();URI uri=uri。创建(URL);返回uri}
现在接口的统一资源定位器拼接完成了,请求也发起了,也可以拿到返回的数据数据了,最后就得对返回的数据做校验了,这里我是重新封装了下测试提供的维护类为塔夸塞特类,其实没做多大改变加了几个方法而已,下面是一个完整的登陆例子:
公共类登录测试{静态记录器控制器log=记录器控制器。获取记录器(登录测试。类);//帐户表账户测试账户测试=新账户测试();string tid= v1 _ Account _ log in @ Test public void log in success(){//发起美国石油学会(美国石油协会)请求JSON对象JSON=API引擎。塔瓜皮(tid用户名,密码);//打印出JSON日志。info(JSON);//通过美国石油学会(美国石油协会)获取该用户的帐户id,然后查询帐目表字符串account _ id=JSON。getjsonobject( info ).getJSONObject(data ).getString( account _ id );账户账户=账户测试。按account _ id(整数。(帐户标识)的值;//校验返回的状态是不是成功字符串response _ status=JSON。getstring( response _ status );TaquAssert.assertEquals(校验响应状态,成功,response _ status);//从数据库获取用户名和接口返回的用户名做对比检查是否一致字符串帐户名称SQL=帐户。get account _ name();字符串account _ name _ API=JSON。getjsonobject( info ).getJSONObject(data ).getString(昵称);TaquAssert.assertEquals(校验帐户名称,帐户名称api,帐户名称SQL);}}
后期还会把这块放到詹金斯环境去运行,之前把詹金斯环境搞坏了,苦逼还得去重搭建。
好以上就是目前做接口自动化的大概思路,这其中肯定还有非常多需要去做优化的,望各大神提提优化意见和方案,不胜感激。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。