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

一.  框架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. 用Redis作为缓存服务器,加快数据库操作速度

    https://zh.wikipedia.org/wiki/Redis http://www.jianshu.com/p/01b37cdb3f33

  2. centos7中firewall防火墙命令详解

    为了架设ss在vultr上买了一个日本的vps 用的是centos7的系统 防火墙是 firewall 捣鼓了两天 在这里总结一下. 如果小伙伴也准备在vultr上买vps  在注册是 可以使用这个优 ...

  3. Redis集群之优化系统参数

    1.最大打开文件数量 (1)编辑资源限制文件,针对redis用户做资源访问控制,在文件尾加入最后两行, sudo vim /etc/security/limits.conf (2) sudo vim ...

  4. 用EditPlus编辑器配置C#开发环境

    用EditPlus配置配置C#开发环境... -------------------- ---------------------------- 配置步骤: 1.打开EditPlus,找到 工具 —& ...

  5. 学习CSS记录:选择符优先级

    1.标有!important 关键字声明属性. 2.HTML中的CSS样式属性. 3.作者编辑的CSS文件模式属性. 4.用户设置的样式. 5.浏览器默认的样式. ------------------ ...

  6. 一个还算简单的微信消息SDK(基于.Net Standard 2.0)

    虽然微信公众号出现了好久,不过在SDK这件事情上感觉并没有多少人把它当成一个有技术含量的事情来做,很多SDK做的事情就是一个代码的堆叠,当然也可能写的好的并没有开源出来.所以在某个翻遍Github而无 ...

  7. OC

    一,字符串 1创建一个字符串 1) NSString *str2=[[NSString alloc]initWithString:str1]; 2)  NSString *string2=[[NSSt ...

  8. 关于i++和++i

    初学Java,经常看到i++和++i的一些问题,在此整理一下. 首先看下面一个小程序: public class atest{ public static void main(String args[ ...

  9. flume 搭建

    Flume使用 1安装及修改初始环境 安装见:http://blog.csdn.net/qianshangding0708/article/details/48088611 配置在conf目录下配置如 ...

  10. 最近完成的AndroidStudio项目实现思路及应用技术

    主要内容: Android Studio的介绍 AS中个Gradle及Groovy介绍 AS中的依赖管理 Maven以及Nexus私库管理依赖 Gradle对变种代码的管理以及多渠道打包 eclips ...