之前的第一套框架在使用过程中发现存在以下问题:

一.  框架1缺点:
1.登陆的账号每个人写的不一样,一旦用户在测试环境被修改,则导致用例失败
2.每次读取访问网址,需要在同一个java文件下切换测试和正式环境,浪费时间
3.封装的过于模块化,导致方法和用例分离太破碎,只看用例并不能直观看出执行的思路,复杂化了
4.每次httpclient都需要绑定各个用户,太麻烦
5.根据类名并不能知道里面写了哪些用例
 
二.  框架2改变:
 
先介绍一下轻量级的HTTP开发库 Unirest的用法:
  1. 使用Unirest请求的数据一般是 JsonNode,若返回类型报错,一般为String,最后得到的为.asString();
  2. .header用了设置header的各种参数,包括token
  3. .routeParam用于设置路径中带有参数的如{cid}之类的
  4. .paramString用于设置get命令中 &的键值对
  5. .field用于设置post的参数,也可以直接用一个map,.fields(prams)    //prams是一个map,put了很多参数进去,和直接多个fields一样的效果
  6. 返回的结果打印一般用,response.getBody( ).getObject( )    得到的JSON对象,之后的JSON解析出需要的内容都是以此为基础分层剥离。
  7. 返回的状态用response.getStatus(),即返回的状态码,注意有个别成功码并不一样,如前台是200,后台是302

新框架思路:

1.所有的用例用同一个账号,运行哪一个用例,就先清除这个账号附带的所有身份信息,然后构造符合条件的用户,然后执行用例(用户升级和破坏式构造)
2. 对于各个用户之间的httpclient状态切换,直接用用户.attach( )进行状态转换。
3. 写测试用例特别容易出错的地方:
声明一个全局变量cid,动态获取后,所有的方法都引用同一个cid时,经常出现多次调用,使cid不一样。
思路:getCid() 获取this.cid      getStatus( )获取获取cid状态的方法,只是参数用this.cid,但是方法里面不能再调用getCid( ),收藏和取消收藏也是如此,
用例组织时,先getCid(),再执行获取状态,收藏之类的,此时即用的同一个不变的cid,调用成功!!!
4. 任何涉及清理的函数,都不应抛出异常。如果清理失败,打个日志,默默退出。
5. 运行用例前设置:
@BeforeSuite:用来设置Header      @AfterSuite发送邮件,使用公司内部的发送邮件的接口
@BeforeClass: 运行整个类之前先清除删除账号信息(有的时候创建公司前先删除公司相关内容),然后用户登录(创建符合身份的用户),审核用户登录,
@AfterClass:  清除删除账号信息,用户和审核用户关闭httpclient。
@BeforeMethod:准备用例
@AfterMethod:清除用例
6.写备注的时候用 /** +回车 生成注释,这样javadoc就可以解析每个类中的用例,生成报告
 
调试的思路:
1.保证账号名,密码,接口路径,网址,环境配置没有问题(可以先在浏览器中直接调用接口试一试),代理设置时fiddler是否开启了(可以看到报错返回信息)
2.报错异常处理: 可以打印log日志看  logger.debug("the response is {}"+response.getBody().getObject();  返回的JSON结果是什么,然后做相应处理。
3.最多的异常是空指针(对象没有生成就调用对象方法),HttpHostConnectException(未开启fiddler),UnknownHostException(host地址不对),assert判断值不一致。出现问题最多的就是登陆和身份构建啦!
 
常见报错原因分析
1.com.mashape.unirest.http.exceptions.UnirestException: java.net.UnknownHostException: ***test01.****.comapi
(1)没有绑定访问的host或者host名称错误,如:***test01.** ** 中间加了一个corp
(2)接口路径错误,api前少了一个/
 
 
2.使用logback没有打出日志
其实需要其中一个文件即可,在自定义记录器时引用类名时多打了一个双引号,我是有多粗心!!!
 
3.运行的返回值为String类型的方法,运行时报错找不到可运行的用例
原因: 有返回值的方法需要调用才能执行。
 
最后实现的大致的代码结构如下:
 
 

接口测试入门(5)----新框架重构,使用轻量级的HTTP开发库 Unirest的更多相关文章

  1. 【伪一周小结(没错我一周就做了这么点微小的工作)】HDOJ-1241 Oil Deposits 初次AC粗糙版对比代码框架重构版

    2016 11月最后一周 这一周复习了一下目前大概了解的唯一算法--深度优先搜索算法(DFS).关于各种细节的处理还是极为不熟练,根据题意判断是否还原标记也无法轻松得出结论.不得不说,距离一个准ACM ...

  2. 郑晔谈 Java 开发:新工具、新框架、新思维【转载】【整理】

    原文地址 导语:"我很惊讶地发现,现在许多程序员讨论的内容几乎和我十多年前刚开始做 Java 时几乎完全一样.要知道,我们生存的这个行业号称是变化飞快的.其实,这十几年时间,在开发领域已经有 ...

  3. 新技术新框架不断涌现,目前学习web前端开发都要掌握什么?

    web前端开发由网页制作演变而来,随着web2.0的发展,网页不再只是承载单一的文字和图片,各种丰富媒体让网页的内容更加生动,网页上软件化的交互形式为用户提供了更好的使用体验,这些都是基于前端技术实现 ...

  4. 快速入门系列--WebAPI--03框架你值得拥有

    接下来进入的是俺在ASP.NET学习中最重要的WebAPI部分,在现在流行的互联网场景下,WebAPI可以和HTML5.单页应用程序SPA等技术和理念很好的结合在一起.所谓ASP.NET WebAPI ...

  5. 放弃OT了,找了个新框架ThinkCMF

    放弃OT了,找了个新框架ThinkCMF,感觉还不错,用用看. 选择OT的原因: 1. OT基于ThinkPHP 2. OT对ThinkPHP进行了封装,使得开发应用更加简单 3. yershop应用 ...

  6. 掌握Tiles 框架 (一)---Tiles入门和Tiles 框架和体系结构

    掌握Tiles 框架 (一)---Tiles入门和Tiles 框架和体系结构 入门 本教程所讲述的内容 本教程讲述如何使用 Tiles 框架来创建可重用的表示组件.(在最初创建它时,Tiles 框架被 ...

  7. Facebook新框架React Native,一套搞定App开发[转]

    Facebook新框架React Native,一套搞定App开发 本文来自微信公众号“给产品经理讲技术”(pm_teacher),欢迎关注. 做为一名产品经理,你是否遇到过这样的窘境,“帮我把字体调 ...

  8. Android4.3引入的UiAutomation新框架官方简介

    译者序:Google在Android 4.3发布时提供了一套新的UiAutomation框架来支持用户界面自动化测试,该框架通过运用已有的Accessibility APIs来模拟用户跟设备用户界面的 ...

  9. ReactiveCocoa - iOS开发的新框架

    本文转载至 http://www.infoq.com/cn/articles/reactivecocoa-ios-new-develop-framework ReactiveCocoa(其简称为RAC ...

随机推荐

  1. flannel 概述 - 每天5分钟玩转 Docker 容器技术(58)

    flannel 是 CoreOS 开发的容器网络解决方案.flannel 为每个 host 分配一个 subnet,容器从此 subnet 中分配 IP,这些 IP 可以在 host 间路由,容器间无 ...

  2. RabbitMQ --- Routing(路由)

    目录 RabbitMQ --- Hello Mr.Tua RabbitMQ --- Work Queues(工作队列) RabbitMQ --- Publish/Subscribe(发布/订阅) 前言 ...

  3. 一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——收流篇:(二)示例

    一.搭建RTSP服务器 要想测试RTSP客户端,没有服务端怎么行呢?然而,有时候条件有限,手头并没有独立的RTSP服务器拿来用,那么我们不妨自己撘一个. 以下有2种方便的做法可供选择: 第一种:使用v ...

  4. mysql 常用函数总结

    常用处理函数: mysql_connect(server,user,pwd,newlink,clientflag) 连接服务器的函数,成功则返回MySQL标识,失败则返回FALSE mysql_sel ...

  5. 使用webpack-dev-middleware 和 webpack-hot-middleware 配置一个dev-server

    关于Webpack的资料教程网上已经数不胜数,但是对手动配置一个Express server的确不多,于是我对此进行着重的了解一番. webpack-dev-middleware和webpack-ho ...

  6. MongoDB Native Node.js Driver

    写在前面 最近读<node.js学习指南>,对于mongodb没有介绍太多的工作原理,但是对于一个前端开发者,即使你还没有用过这种数据库也可以让你很好的理解和使用       一本非常好的 ...

  7. Java内存原型分析

    Java虚拟机内存原型 寄存器:在程序中无法控制 栈:存放基本类型的数据和对象的引用,但是对象本身不存放在栈中,而是存放在堆中 堆:存放用new产生的数据 静态域:存放在对象中用static定义的静态 ...

  8. asp.net core策略授权

    在<asp.net core认证与授权>中讲解了固定和自定义角色授权系统权限,其实我们还可以通过其他方式来授权,比如可以通过角色组,用户名,生日等,但这些主要取决于ClaimTypes,其 ...

  9. 初识php soap 学习过程中的摘抄,便于后期翻阅

    SOAP 简单对象访问协议, webService三要素 , SOAP.WSDL(WebServicesDescriptionLanguage).UDDI(UniversalDescriptionDi ...

  10. JAVA实用案例之文件导入导出(POI方式)

    1.介绍 java实现文件的导入导出数据库,目前在大部分系统中是比较常见的功能了,今天写个小demo来理解其原理,没接触过的同学也可以看看参考下. 目前我所接触过的导入导出技术主要有POI和iRepo ...