• 0
  • 0
分享

  如何写接口自动化?这个问题,但凡涉足过自动化测试的人员都能娓娓道来。Requests、urlib、jmeter、curl等等,不在话下。那么,如何获取接口的url、参数、响应等信息呢?!答案就更是随口而出:看接口文档、swagger/apifox等管理工具接口定义。再不济,如果是web应用,通过浏览器看接口请求啊。的确如此,有“一万”种方法可以帮助我们获取到想要的接口信息。

  可是,接口文档和接口定义/说明的有无,往往取决于开发人员的自觉性。我们虽然能够要求,但也不能百分百确定一定能够获得。因此,通过浏览器等工具获取请求接口就成了我们常用的手段。

  我们以访问“51testing”网站为例,简单说明浏览器获取接口请求的常见方式。

  如下图1所示,为访问51testing网站首页时的浏览器面板截图。通过network>Fetch/XHR就能获得http请求的url、status、response等信息。在我们编写自动化测试用例时,这是常用且熟知的获取接口请求信息的方法。

1-1.png

图1 访问51testing首页的浏览器network面板信息

  但是,上述寻找接口路径/方法,是完全可行的吗?

  让我们以下图2为例。图2为51testing客服对话窗口,当我们想模拟自动化测试,获取发送请求的接口信息时,却发现唯一一个通过Fetch/XHR获得的接口(https://chat2445.talk99.cn/chat/msg.dll cmd=xx)请求体Payload和响应体Response中,没有任何与窗口对话中发送的内容(“测试”)有关的信息。那么,这条信息,是如何发送出去的呢?!

1-2.png

图2 51testing客服对话窗口

  继续对话,查看Fetch/XHR,仍无任何接口请求。直到……在WS条目中发现了真相。原来,是websocket啊;果然,是websocket啊!

1-3.png

图3 51testing客服对话窗口

  那么,什么是websocket呢?又为何要用websocket呢?

  WebSocket 是一种在 Web 应用程序中提供双向通信的协议。它允许在客户端和服务器之间创建持久性的连接,从而使得数据能够以低延迟和高效率进行双向传输。一些常见应用场景包括:1) 即时通讯应用程序:像聊天应用、在线游戏等需要实时双向通信的应用场景中,WebSocket 能够提供更好的性能和用户体验;2)实时数据更新:像股票市场、天气预报、实时地图等需要实时数据更新的应用中,WebSocket 可以用来推送实时数据给客户端,而不需要客户端不断地发起请求;3)在线协作工具:像 Google Docs、Trello 等在线协作工具可以使用 WebSocket 来实现多用户实时编辑、更新等功能;4)实时游戏:在线多人游戏需要实时的玩家位置、动作等信息同步,WebSocket 可以帮助实现这些功能。显而易见,客服对话窗属于第1种。

  那么,websocket的url、请求内容和响应如何在浏览器中获取呢?!

  如下图4所示,可以点击ws的链接,通过Request URL得到的url,再通过Messges获得发送的请求(All下拉列表选择“send”)和收到的响应(All下拉列表选择“receive”)。

1-4.jpg

1-5.jpg

图4 websocket的url、请求和响应等查看方式

  如此,我们知道了,我们一些“看不见”的接口是如何发送请求的了。但是问题又来了:知道了websocket的请求方式,如何使用自动化脚本方式模拟呢?

  我们以python为例,使用websocket库,模拟websocket请求,发送聊天信息。代码样例如下所示:

  import websocket
  import json
  def on_message(ws, message):
      print(f"Received message: {message}")
  def on_error(ws, error):
      print(f"Error occurred: {error}")
  def on_close(ws):
      print("Connection closed")
  def on_open(ws):
      print("Connection established")
      # 发送消息
      message = {
          "c": 20001818,
          "u": "e6054702278504214c792f583376d5ab",
          "v": "6817201c3614948f68de93ab151e53e5",
          "role": 2,
          "meeting": False,
          "cId": 876105175,
          "site": 0,
          "g": 10063915,
          "winId": "b6f2f684f577413abb2ab166433b060e",
          "flag": False,
          "robot": False,
          "msg": "你好"
      }
      ws.send(json.dumps(message))
  if __name__ == "__main__":
      websocket.enableTrace(True)
      ws = websocket.WebSocketApp("wss://chat2445.talk99.cn/chat/room/20001818/876105175/b6f2f684f577413abb2ab166433b060e",
                                  on_message=on_message,
                                  on_error=on_error,
                                  on_close=on_close)
      ws.on_open = on_open
      ws.run_forever()

  至此,我们简单总结一下。浏览器开发者工具功能十分强大,除了我们熟知的http请求,还可以捕获websocket请求。然后,我们可以通过得到的请求信息,使用Python或其他开发语言帮助我们完成相关的接口测试。由此,完成我们“看不见”的接口自动化测试。


作者:刘晓佳Rachel    

来源:http://www.51testing.com/html/20/n-7801020.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • Jmeter是什么?一般情况下,我们提压力测试,通常指是指负载测试和压力测试.我们做压力测试,基本上会使用到工具进行测试,我常用的工具,一个是jmeter,另外一个是loadRunner。我先介绍一下jmeter吧,jmeter是Apache组织开发的基于java的压力测试工具,支持接口测试,压力测试,还可以做录制回放操作,操作比较简便。List item整体流程我先说一下JMeter的操作的整体流程吧,我们测试的时候,通常是创建一个线程组,指定并发的线程数量,然后指定要测试的接口,创建相应的监听器,比如表格结果,结果树和聚合报告信息,通过监听器来监听测试是否通过或者接口是否存在什么问题其中在...
            15 15 2922
            分享
          •   序言  由于公司在来年需要进行压力测试,所以也就借节假日的机会来学习一下压力测试的步骤,由于本人的学习时间比较短,希望各位大神朋友们能够多多的谅解并指正在下的错误,在此仅表敬意。  适应人群  1、初入门的压力测试工程师。  2、为入门但是打算在软件测试方面发展的同学。  3、对软件测试有浓厚的兴趣的人。  压力测试初窥探  压力测试顾名思义就是通过模拟指定的用户数量同时访问网站从而达到对网站进行施压,进而测试出网站在高并发问题上的性能优势劣势以及应对DDOS攻击的防护能力,这也是考验一个网站的健壮性的一个特点(本人认为的),目前主流的压力测试工具有Jmeter、RoadRunner,其中...
            0 0 1095
            分享
          •   概述  (一)背景  随着银行各业务的不断发展和延伸,各项目对实施效率及用户体验提出了日益迫切的要求。  本文提炼了以交互设计原型驱动为核心的方法——原型法,作为驱动敏捷设计开发有效开展的重要方法之一,该方法在保证产品实施进度的同时,更加有效地平衡了业务目标和用户体验目标。  (二)目的  通过对原型在项目设计实施各环节中所发挥的作用,以及对原型作为一种工具,如何在不同情境下更加合理地加以应用所做的梳理,使相关人员对原型法的目的、要求和指导思想达成共识,以便在项目合作中更加有效地应用与协作。  (三)适用对象  项目管理、业务需求、设计、前端开发、测试等相关人员。  原型与原型法介绍  (...
            12 12 1760
            分享
          •   【缘起】:“云计算”三个字在IT圈内的人士眼中绝对不陌生,至少听过见过不下数十次,近百次,甚至更多,但倘若要刨根究底这三个字背后的技术含义,势必会难倒不少人,说不清道不明的当不在话下。本次分享就带圈内人士们一起组队揭开“云计算”背后的神秘,从此不再做云端“盲人”,身在“云端”深处而浑然不知。  1.“云”深不迷茫  云计算可视为一种服务,以互联网为媒介,提供数据存储,数据访问及相关大数据计算等功能。之所以称之为“云”,一是因为它不会在我们本地个人计算机上存储任何数据,其二是由于该服务属于“on-demand service”,即按需服务,更接地气的说法是“点播业务”,仅根据用户需求提供服务...
            2 2 1550
            分享
          • 1、引言因为小鱼在上一章节写了 多台appium的启动,然后就联想到 能不能搞一个多进程启动appium服务。于是乎~~那就搞起来~ ~关于并发的问题,小鱼写过专题文章《常见并发问题》《多线程并发》《多线程并发框架》但是呢,今天小鱼不写多线程并发,写个多进程并发在上代码之前,咱先弄清楚,多进程与多线程,到底有何区别:2、代码示例知道了多进程与多线程的区别, 我们就来写代码代码示例:# -*- coding: utf-8 -*- #@ auth : Carl_DJ #@ time : 2022-6...
            0 0 1694
            分享
      • 51testing软件测试圈微信