接口自动化测试(八):何如跳过登录

春节回老家休息了半个月,所以文章也没更新,后面会继续完成这个系列。。。。。

痛点

我们先来说一个大家做接口测试或UI自动化测试的痛点,很多时候要进入应用或接口都需要登录验证,这是我们展开测试的一个很头疼的问题,在前面的文章中好像也留下了这个坑,也有童鞋留言在问这方面的问题,另外刚好年前在写爬虫的时候也遇到这样的问题,所以今天我们就来分析下这个主题,把这个坑给填满……

分析

对于如何跳过登录,我就开门见山直接说吧,我了解到的跳过登录的方式无外乎有下面几种:
1、模拟用户输入登录;
2、利用Cookie跳过登录;
3、利用非正常手段绕过登录;
4、白名单;
5、其它(未知或待发掘)
对于第1种方式,做过UI自动化测试的童鞋都不会陌生,简单粗暴没毛病,可是不太适合接口测试,目前基本上都是通过第2种利用Cookie的方式跳过,在某些情况下Cookie的方式也行不通时,可以考虑第3种,第4种白名单业界都是靠商业合作来实现,没有什么好说的了。。。所以今天的重点是第2种方式,稍微讲一下第3种方式。

实现

1、利用Cookie跳过登录

利用Cookie跳过登录原理就是登录一次,查看登录后的header和cookie信息,将可关键信息拿下来,然后将这些信息加入你的接口请求头信息中,听起来是不是还是挺抽象?没关系,马上举例说明。以简书获取当前用户信息接口为例:
在没登录的时候,去请求这个接口肯定是拿不到数据的,下面我们做个试验:
1> 在已登录的情况下:我们看下获取当前用户信息接口:http://www.jianshu.com/author/current_user,在Chrome的控制台中是可以看到数据的,如下:


2> 在未登录的情况下,换个浏览器请求:http://www.jianshu.com/author/current_user,页面跳转到登录界面了。。。

现在需求出来了,我想要跳过这个登录去拿到用户信息,所以这肯定需要在接口请求中加入Cookie了,如何做?
首先,我们回到前面登录状态下,使用Chrome的调试工具或Firefox的FireDebug(按下F12可以打开)或者其他抓包工具如Fiddler、Charles等(浏览器调试工具有时可能重定向导致界面被强制刷新了而抓不到之前的请求记录,所以建议用抓包工具)抓取当前界面的请求信息;然后找到对应的接口记录,选中查看它的相关请求和响应信息,如下图:

上图红框部分就是这个接口的请求headers信息,其中就包含Cookie,现在问题来了,headers和cookie这么多,都要放进去吗?先都放进去看下效果,然后再逐步排除掉无用的headers(熟练了之后其实可以一眼看出来哪些headers信息是需要的,下面代码中我直接给出了需要的headers信息)。HTTP请求的测试代码如下:

@Test
public void testSkipLoginByCookies() throws ParseException, IOException {
    String url = "http://www.jianshu.com/author/current_user";
    Map<String, Object> headers = new HashMap<String, Object>();
    headers.put("Accept", "application/json");
    headers.put("Cookie", "remember_user_token=W1syOTUxMjMzXSwiJDJhJDEwJDFBM29ab1h5RDJMQ2xaN2kzUzFpRXUiLCIx" +
                "NTE5Mzc3NjI3LjEzNTU3ODIiXQ%3D%3D--1ad08bd92af5892df4e996e50e75ddee1bad35ef;");
    //headers.put("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36");
    HttpResponse response = new HttpRequest(url)
            .setHeaders(headers)
            .setParams(null)
            .doGet();
    //输出响应
    System.out.println(EntityUtils.toString(response.getEntity()));
    //验证响应码
    int code = response.getStatusLine().getStatusCode();
    Assert.assertEquals(200, code);
}

测试结果:



就在这样跳过了登录,所以不管你登录界面有多复杂,有没有各种验证码和极限验证,we don't care。。。。

2、利用非正常手段绕过登录

上面利用Cookie跳过登录有时也有不管用的时候,比如上面简书接口使用的cookie是一个token,这个会有一个有效期,比如几个小时、几天内有效(具体过期时间由系统设置的),那么我们不可能每次失效了都来重新人工copy一遍cookie更新到代码中吧,这不符合自动化测试的原则,所以有时候我们得用一些非正常手段来动态获得cookie,常用的手段和方法有:
1、利用WebDriver的HtmlUnitDriver来模拟无界面登录,从而获得cookie;
为什么用HtmlUnitDriver而不是用FirefoxDriver或ChromeDriver?因为HtmlUnitDriver无操作界面,是在后台静默进行的,无干扰且速度快。
2、在代码中模拟用户登录的Form表单提交;
用抓包工具仔细分析用户登录过程,你会发现前端就是一个Form提交,只不过这不是一个请求完成的,而是中间跳转了好多次,需要好几个请求去完成,那么我们也就可以将这些请求都抓出来,依次请求而从实现登录。


具体的实现就不贴了,有兴趣的童鞋可以去尝试下~

【下章节预告】:接口自动化测试(九):测试用例管理

原文来自下方公众号,转载请联系作者,并务必保留出处。
想第一时间看到更多原创技术好文和资料,请关注公众号:测试开发栈


【本系列历史章节链接】
接口自动化测试(七):数据验证专项2
接口自动化测试(六):数据验证专项1
接口自动化测试(五):Http框架搭建
接口自动化测试(四):Helloworld入门
接口自动化测试(三):关于URL
接口自动化测试(二):关于HTTP
接口自动化测试(一):关于接口

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,633评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,825评论 25 707
  • 第一天下班回来,人好好的,晚上一个人躺床上,安然入睡。夜半,喉咙干痛,又干又痛,就像是干涸的溪流露出凸起的...
    泛彼柏舟水清浅阅读 533评论 11 15
  • 愿梦却不敢梦的 想念却不得念的 分明看见了那满树满地叶的淡雅 嗅得到那沁着露水的清香 混沌又明了的声响 又使我心绪...
    心向长庚阅读 195评论 0 1
  • 过去的永远回不去,当下的会决定未来。 有些人,擦肩而过后便会永不相见。 而有些人,只一面之缘,却会想念一辈子, 时...
    未成熟的阅读 514评论 3 0