• 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

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

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   背景  在现代的开发模式中,基于微服务的开发模式越来越常见,但是随着项目规模的扩大,服务与服务之间的依赖越来越密切,当不同的开发团队去开发不同的服务时,服务的提供者的变动会影响到众多消费它的消费者,为了保证系统的正确性和一致性,这将需要大量的沟通成本和代码修改的时间成本。  之前遇到的某个客户内部就是因为服务与服务之间依赖过多,且存在各种的物理依赖,再加上其他种种原因,使得在集成测试时bug激增。对于他们而言集成测试需要依赖于各个服务版本的一致性以及真实的物理环境,因此他们的集成测试通常需要用上几个小时才可以完成,这就使得整体的效率大大缩减。除此之外,在集成测试中发现的问题也会使得他们花很...
            0 0 720
            分享
          • 7 月 22 日晚,Dify 主创团队和用户们临时性地组织了一场高质量的线上交流活动。交流会主要围绕 Dify 的产品规划、用户对于 LLM 的探索和理解、用户使用 Dify 过程中遇到的问题和困惑等方面展开讨论。相信对所有基于 LLM 或 Dify 创造应用的小伙伴们都能提供很好的思路和借鉴。错过的小伙伴看这里,我们整理总结了相关的问题和讨论要点,供大家阅读参考(Question 部分为不同用户提出的问题,Answer 部分为 Dify 团队的理解和答疑)。关于 Dify 产品规划Dify 产品上线以来受到很多开发者朋友的关注和喜爱,在平台上已经创建了 3 万多个应用(仅云端版),我们希望能...
            0 0 2225
            分享
          • 接口请求断言是指在发起请求之后,对返回的响应内容去做判断,用来查看是否响应内容是否与规定的返回值相符。接口请求断言响应内容在发起请求后,我们使用一个变量 r 存储响应的内容,也就是 Response 对象。  >>> import requests   >>> r = requests.get('http://httpbin.org/get')   >>> print(r)   <Response [200]>Response 对象有很多功能强...
            0 0 2632
            分享
          •   巴西最高法院法官亚历山大-德-莫赖斯(Alexandre de Moraes)在周二发布的一项命令中写道,该公司已经满足了"立即恢复在巴西活动的所有必要条件","我命令结束封禁"。  这一授权结束了这位亿万富翁与莫赖斯之间长达数月的争斗,在马斯克藐视巴西法规之后,法官于 8 月底封杀了X。  这相当于这位世界首富的一次重大屈服,他曾将与莫赖斯的冲突作为反对南美国家管制网络内容的言论自由运动。  马斯克关闭了 X 在巴西的办公室,以抗议删除某些资料的命令,据称这些资料对巴西的民主构成威胁。 几天后,最高法院封禁该平台,理由是它没有遵守当地法律,该法律要...
            0 0 273
            分享
          •   苹果与医疗科技公司 Masimo 之间的专利纠纷持续发酵,近期更是发展到 ITC 裁决苹果侵犯 Masimo 专利,可能导致 Apple Watch Series 9 和 Apple Watch Ultra 2 在美国禁售的地步。  根据最新消息,苹果正在探索多种解决方案,其中之一便是通过 Apple Watch OS 10 系统的软件更新尝试规避 Masimo 的专利。  IT之家此前报道,今年 10 月,ITC 裁定苹果手表的血氧传感器侵犯了 Masimo 的两项专利,涉及五项独立的专利侵权行为。目前该案件已进入为期 60 天的总统审查期,将于 12 月 25 日截止。拜登政府可以介入...
            0 0 1056
            分享
      • 51testing软件测试圈微信