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

一.  框架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. javascript二维数组排序

    js使用sort()函数对二维数组快速排序的写法 作者:admin    时间:2015-7-3 9:31:4    浏览:1847 js数组的排序方法有很多,冒泡法,插入法等等,不过对于数组的排序来 ...

  2. java子类和父类中静态块、非静态块、构造函数的执行顺序

    public class qqqq extends Parent{ public static void main(String[] args) { new Child(); } } class Pa ...

  3. 如何用QUnit为JS代码做单元测试

    非常好的入门文章: http://www.zhangxinxu.com/wordpress/2013/04/qunit-javascript-unit-test-%E5%8D%95%E5%85%83% ...

  4. NetBeans主题配色方案加设置.md

    1.网上下载主题的地址是:http://netbeansthemes.com/ **上面的主题我看了下但是感觉不太适合自己所以自己就仿照的设置了下下面我附上自己的配置信息 感兴趣的可以下载下来自己看下 ...

  5. cms系统架构设计

    本篇只包含已实现系统的部分设计,若后续有新需求再另行更新. 在线用户表 用户角色表 用户权限表 ……

  6. 一起来学Go --- (go的枚举以及数据类型)

    枚举 枚举指一系列的相关的常量,比如下面关于一个星期的中每天的定义,通过上篇博文,我们可以用在const后跟一对圆括号的方式定义一组常量,这种定义法在go语言中通常用于定义枚举值.go语言并不支持众多 ...

  7. [2016-03-15]rabbitmq notes

    安装 系统:CentOS 6 环境: rabbitmq 依赖的Erlang环境包 wget https://www.rabbitmq.com/releases/erlang/erlang-18.1-1 ...

  8. loadrunner scripts

    1. ReadFile: Action(){ int count,total=0; char buffer [50]; long file_stream; char * filename = &quo ...

  9. 容器在 Weave 中如何通信和隔离?- 每天5分钟玩转 Docker 容器技术(65)

    上一节我们分析了 Weave 的网络结构,今天讨论 Weave 的连通和隔离特性. 首先在host2 执行如下命令: weave launch 192.168.56.104 这里必须指定 host1 ...

  10. 设置Linux环境变量的方法与区别(Ubuntu)

      设置 Linux 环境变量可以通过 export 实现,也可以通过修改几个文件来实现,有必要弄清楚这两种方法以及这几个文件的区别.   通过文件设置 Linux 环境变量 首先是设置全局环境变量, ...