写在开头: 技术渣做接口自动化,大神们请轻喷!多提提优化方案和问题点。

以前做接口测试一直通过postman 和 soapUI来做,Postman 是Chrome的一个插件Case多了不好管理,同时执行起来麻烦,得一个一个去点击执行,平时做调试可以用用真正用来做接口自动化不合适。
SoapUI (改名叫Ready!API)是个不错的工具,同时支持了soap类型和rest 类型的接口,而且还支持安全,性能等测试,当然它是个商业工具,高级功能都是需要收费的,想那啥也是可以的,但是工具提供了方便同样可扩展性差了点,而且我经常遇到莫名其妙的工具问题,也许是因为我用的是那啥版本,稳定性差吧。 
也是有人直接用Jmeter 或者loadrunner 来做接口自动化的,当然也是行的当用例管理上也是较为麻烦,有个框架robot framework,关键字驱动来做接口也是一朋友一再推荐的做法,可惜我对python 不熟悉,尽管上手容易我还是放弃。

还有个开源框架rest-assured,具体看地址:https://code.google.com/p/rest-assured/ 也是相当有意思,完了几天本想引入用这个框架,后来。。。咱家开发写的接口不规范,只好忍心干掉了。
现在我改用这么一套思路在做,因为目前我的接口协议都是http的,我就干脆直接用java的HttpClient,然后接口返回是json格式,我就引入了json-lib来方便解析获取,同样因为需要跟数据库交互所以又引入了MyBatis,同时用例还是沿用TestNG ,为了更方便管理接口(地址,路径,参数等等)又通过excel来管理接口,通过excel来驱动测试。 
这样下来整个项目就涉及了 httpclient+json+mybaits+testng+poi(excel)+log4j等框架包。

在这过程做了一些封装一些主要代码如下: 
对httpclient 封装,只要把接口的完整请求传进来如果请求正常,就会return 的接口返回的json:

public static JSON getAPI(URI uri) throws URISyntaxException, IOException {CloseableHttpClient httpclient = HttpClients.createDefault();try {httpget = new HttpGet(uri);log.info("执行API请求" + httpget.getRequestLine());ResponseHandler<String> responseHandler = new ResponseHandler<String>() {public String handleResponse(final HttpResponse response) throws ClientProtocolException, IOException {int status = response.getStatusLine().getStatusCode();if (status >= 200 && status < 300) {HttpEntity entity = response.getEntity();return entity != null ? EntityUtils.toString(entity) : null;} else {log.error("请求错误,状态码为:"+response.getStatusLine().getStatusCode());throw new ClientProtocolException("意外的状态返回: " + status);}}};String responseBody = httpclient.execute(httpget, responseHandler);JSONObject dataObject = JSONObject.fromObject(responseBody);return dataObject;} finally {httpclient.close();}}     

那请求可以发起了,接口URL 怎么来? 刚说通过excel来管理接口了,例如我新建了下面这么个文件:

TID 用来标识我需要读取哪行数据,TName仅仅做说明这个接口是什么接口,Method 来表示接口是什么类型,根据不同类型做调用不同的httpclient 封装方法,然后后面就是去拼接接口的URL:

拼接URL的关键代码如下:

/*** 请求链接拼接** @param tid        哪一行的excel数据* @param parameters 参数* @return uri*/public static URI returnURI(String tid, String... parameters) {String path = System.getProperty("user.dir") + File.separator + "src" + File.separator + "main" + File.separator + "resources" + File.separator + "excel" + File.separator + "api.xls";ExcelEngine.filepath = path;ExcelEngine.sheetname = "api";// 从excel 拿数据List apiData = getApiData(tid);String getorpost = ((String) apiData.get(2)).toLowerCase();
//        System.out.println(getorpost);String scheme = (String) apiData.get(3);String apiHost = (String) apiData.get(4);String apiPath = (String) apiData.get(5);// URI 拼接StringBuffer stringBuffer = new StringBuffer(scheme + "://" + apiHost + apiPath + "?");HashMap<String, String> hashmap = new HashMap();int p = 0;while (p < parameters.length) {hashmap.put((String) apiData.get(p + 6), parameters[p]);p = p + 1;}hashmap.put("autoKey", String.valueOf(Parameters.timeStamp_Long()));
//        int i = hashmap.size();
//        System.out.println("map 大小" + i);int num = 0;
//        System.out.println("map 里面的值" + hashmap.entrySet());for (HashMap.Entry<String, String> entry : hashmap.entrySet()) {num++;if (num == hashmap.size()) {stringBuffer.append(entry.getKey() + "=" + entry.getValue());} else {stringBuffer.append(entry.getKey() + "=" + entry.getValue() + "&");}}String url = stringBuffer.toString();URI uri = URI.create(url);return uri;}

现在接口的URL拼接完成了,请求也发起了,也可以拿到返回的json数据了,最后就得对返回的数据做校验了,这里我是重新封装了下TestNG 提供的Assert类为TaquAssert类,其实没做多大改变加了几个方法而已,下面是一个完整的登陆例子:

public class LoginTest {static LoggerControler log = LoggerControler.getLogger(LoginTest.class);// accounts 表AccountsTest accountsTest = new AccountsTest();String tid = "v1_Account_login";@Testpublic void loginSuccess() {// 发起api请求JSONObject json = ApiEngine.taquAPI(tid, "username", "password");// 打印出jsonlog.info(json);// 通过api获取该用户的account_id,然后查询Accounts表String account_id = json.getJSONObject("info").getJSONObject("data").getString("account_id");Accounts accounts = accountsTest.byAccount_id(Integer.valueOf(account_id));// 校验返回的 状态是不是 success.String response_status = json.getString("response_status");TaquAssert.assertEquals("校验response_status", "success", response_status);// 从数据库获取用户名和接口返回的用户名做对比检查是否一致String account_name_sql = accounts.getAccount_name();String account_name_api = json.getJSONObject("info").getJSONObject("data").getString("nickname");TaquAssert.assertEquals("校验account_name", account_name_api, account_name_sql);}
}

后期还会把这块放到Jenkins环境去运行,之前把Jenkins环境搞坏了,苦逼还得去重搭建 。
OK 以上就是目前做接口自动化的大概思路,这其中肯定还有非常多需要去做优化的, 望各大神提提优化意见和方案,不胜感激。

接口自动化思路_JAVA相关推荐

  1. java接口自动化书籍_java接口自动化优化(一)

    优化extentreports在线样式改为离线加载自己项目下的样式 主要解决extentreports在线加载失败问题 上篇文章介绍了通过testng编写用例后使用extentreports作为测试报 ...

  2. java接口自动化监控_java接口自动化(三) - 手工接口测试到自动化框架设计之鸟枪换炮...

    1.简介 上一篇宏哥介绍完了接口用例设计,那么这一章节,宏哥就趁热打铁介绍一下,接口测试工具.然后小伙伴们或者童鞋们就可以用接口测试工具按照设计好的测试用例开始执行用例进行接口手动测试了.关于手动测试 ...

  3. Python UnitTest接口自动化实战

    目录 一.需注意事项 二.单元测试框架unittest 2.1 作用 2.2 测试用例(TestCase) 2.2.1 单元测试函数 2.2.2 测试函数的执行顺序 2.3 用例收集器(TestLoa ...

  4. 接口自动化实战设计思路,想法及疑问(一)

    各位粉丝朋友们大家好,最近在学习研究接口自动化测试时,在设计思路和实践过程中,碰到了很多问题,再不断的优化和调整,这过程中产生了很多疑问和不解,并与很多测试的朋友进行交流想法,但是各自想法意见偏差较大 ...

  5. 接口测试用例设计思路_基于python语言的接口自动化demo小实战

    近期通过自己的学习以及实战,完成了一个关于测试接口的接口自动化demo. 下面想跟大家分享一下,主要的思路是根据接口文档确定测试用例,并将测试用例写在excel中. 01 因为只是小作demo,测试用 ...

  6. Java接口自动化框架系列07:Web接口自动化测试框架设计思路

    1.Java web接口自动化框架 框架名称:Java+Maven+httpClients+TestNg+Allure (因本次只讲解java部分,未包括git和jenkins,如果是包括git和je ...

  7. java接口自动化测试的搭建_java接口自动化(一) - 接口自动化测试整体认知 - 开山篇(超详解)...

    简介 了解什么是接口和为什么要做接口测试.并且知道接口自动化测试应该学习哪些技术以及接口自动化测试的落地过程.其实这些基本上在python接口自动化的文章中已经详细的介绍过了,不清楚的可以过去看看.了 ...

  8. 接口自动化框架python+pytest+Allure 思路总结

    前言: 好久没有更新博客了,新的一年该对过去一年的学习经验做一个总结了~ 之前一直用unittest库做接口自动化测试框架,最近发现pytest库太好用了,而且参数化起来很方便,因为是自己加上通过网络 ...

  9. python 封装_python接口自动化学习笔记(封装方法用于读取excel)

    本文是为难得干货文章 (是位大佬所写哦) 大家好,我是测试君. 下面分享一波Python接口自动化文章: 本篇是使用xlrd实现的对excel的数据进行读取,xlrd网上demo很多,不做过多叙述,下 ...

最新文章

  1. 计算机网络实验五,计算机网络(实验五).docx
  2. Android Touch事件传递机制解析 (推荐)
  3. 通过经度纬度得到距离
  4. python文件操作模式是什么,python --文件操作模式详解
  5. a*算法的时间复杂度_算法的时间复杂度:大O表示法
  6. 幽默度识别第一名解决方案代码及说明
  7. vue 渲染函数处理slot_Vue源码全面解析七 initRender 函数(处理渲染相关的函数)...
  8. Dynamics Axapta的B/S解决之道(一)
  9. linux表白程序源码,程序员表白程序,开放源码在此!
  10. 训练little wihte:events.out.tfevents到底是什么文件?
  11. 波士顿动力SpotMini改造有胳膊半人马,这家意大利创企打造极致机械手臂
  12. java快递驿站管理系统免费_基于jsp的快递物流管理系统-JavaEE实现快递物流管理系统 - java项目源码...
  13. red5 FAQ - 刚接触red5的可以看看
  14. python查答案_大学慕课Python编程基础答案查题公众号
  15. [强化学习-3] Devil 课程第二章解析+ 学生马尔可夫决策过程代码
  16. Matlab 马鞍面动态旋转图
  17. Oracle数据文件损坏无法正常修复问题
  18. 贪心算法 - 挤奶问题
  19. H.264 视频格式
  20. 电位计,电子尺,电阻信号隔离变送器(DIN导轨安装式)

热门文章

  1. java-十六进制转八进制
  2. python能开发小程序吗_搭建小程序用Python语言可以搭建吗?
  3. idea断点里没有对号问题解决
  4. zznu-2183: 口袋魔方
  5. USRP工作流程及各部分功能
  6. Linux文件管理初探---学习文件管理,我想你必须要知道的目录
  7. Matlab(Simulink)+ANSYS Simplorer+Maxwell联合仿真(一)——软件选取问题
  8. 足球场的小禁区和大禁区是怎样的?12码是多少米?
  9. Oracle 设置密码复杂度
  10. 微信小程序在线考试项目开发-接口封装调用