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

一.  框架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. 一个基于ES6+webpack的vue小demo

    上一篇文章<一个基于ES5的vue小demo>我们讲了如何用ES5,vue-router做一个小demo,接下来我们来把它变成基于ES6+webpack的demo. 一.环境搭建及代码转换 ...

  2. 单线程的JavaScript

    Javascript是单线程的 因为JS运行在浏览器中,是单线程的,每个window一个JS线程,既然是单线程的,在某个特定的时刻只有特定的代码能够被执行,并阻塞其它的代码.而浏览器是事件驱动的(Ev ...

  3. 打造基于Clang LibTooling的iOS自动打点系统CLAS(二)

    1. 配置LLVM和Clang 在这篇文章里,我们会基于上一篇所述的方案进行展开,详细讲解如何从0开始创建一个基于Clang LibTooling的编译器前端工具.在开始之前,我们假设你已经基本了解何 ...

  4. jaspersoft studio 的初级入门(一)

    前言 最近的工作涉及到企业的报表生成功能,于是就想用此篇博客来记录我的学习历程.进入Jasperreport项目的官网发现有一个软件叫Jaspersoft studio的,它的版本也是6.3.1跟Ja ...

  5. 一起来学linux:目录与路径

    p { margin-bottom: 0.25cm; line-height: 120% } 首先介绍目录相关的路径的表示法: 1 . 代表此目录 2 .. 代表上一层目录 3 – 代表前一个工作目录 ...

  6. Catalan数——卡特兰数

    一.Catalan数的定义 令h(0)=1,h(1)=1,Catalan数满足递归式:h(n) = h(0)*h(n-1) + h(1)*h(n-2) + ... + h(n-1)*h(0)  (n& ...

  7. poj3928 la4329 pingpong

    Description N(3<=N<=20000) ping pong players live along a west-east street(consider the street ...

  8. Jquery笔记之第二天

    Jquery笔记之第二天 jQuery - 获取内容和属性 获得内容 - text().html() 以及 val() <script> $(document).ready(functio ...

  9. 使用CXF开发JAX-RS类型的WebService

    1.JAXRSServerFactoryBean编程方式 访问方式:http://localhost:8080/cxf_spring_rest_server/ws/rest/student/query ...

  10. 【C++小白成长撸】--N阶幻方(魔阵)矩阵

    解决方法:1.第一个元素放在第一行中间一列 2.下一个元素存放在当前元素的上一行.下一列. 3.如果上一行.下一列已经有内容,则下一个元素的存放位置为当前列的下一行. 在找上一行.下一行或者下一列的时 ...