news 2026/4/25 22:02:37

没看错!selenium自动化集成REST api实践!

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
没看错!selenium自动化集成REST api实践!

01 问题

当我们描述一个“好的自动化测试用例”时,经常出现标准是:

  • 精确

    自动化测试用例应该测试一件事,只有一件事。与测试用例无关的应用程序的某个部分中的错误不应导致测试用例失败

  • 独立

    自动化测试用例不应该受测试套件中任何其他测试用例影响

  • 快速

    这不需要太多的解释。自动化测试用例套件运行得越快,它就越有用

这些标准在Selenium测试套件中可能特别具有挑战性。原因在于,Selenium的UI自动化测试通常涉及可能包括注册,登录,某些导航,表单提交或与网站的其他交互的设置。只有在做完这些事情之后,你才可以在网站的某些方面做出断言。但是这样就会引入一些和原本的测试用例无关的错误导致自动化脚本运行失败。

02 解决方法

现在很多新的网站的后端都采用REST API。如果能够在脚本中通过访问REST API来完成一些基础的必要操作,而不是在UI上,这样将提高我们测试的执行效率

REST API基于HTTP协议,这是基本上支持整个互联网的协议。几乎所有现代编程语言都有可用于发出HTTP请求的库,因此,我们可以将调用REST API的支持添加到几乎任何测试套件中。

03 实例

很多测试中都会遇到新建账号的问题。需要测试新的账号在登陆之后的行为。如果能够使用REST API来新建用户的话,就可以大大的节省填写新建账号的表单的时间。

这里假设一个虚拟的REST API

POST http://api.myfakeapp.com/v1/create-user

AI写代码

通过POST方法可以新建用户。

Body里面需要填充的JSON数据如下:

  1. {

  2. 'username': 'example-username',

  3. 'password': 'abcd1234',

  4. 'email': 'bob@example.com',

  5. 'first_name': 'bob',

  6. 'last_name': 'example'

  7. }

下面是代码实现:

  1. require 'rest-client'

  2. require 'json'

  3. require 'securerandom'

  4. class RestApiInterface

  5. @headers = {

  6. 'content-type' => 'application/json',

  7. 'user-agent' => 'Rest Api Helper',

  8. }

  9. def post_to_api url, post_body_obj

  10. json_body = JSON.generate(post_body_obj)

  11. response = RestClient.post url, json_body, @headers

  12. end

  13. def create_test_user

  14. # Step 1: Build the user parameters randomly

  15. random_test_user = {

  16. 'username' => random_string,

  17. 'password' => random_string,

  18. 'email' => "#{random_string}@testing.com",

  19. 'first_name' => 'test',

  20. 'last_name' => 'user',

  21. }

  22. # Step 2: Execute the API call

  23. response = post_to_api "http://api.myfakeapp.com/v1/create-user",

  24. random_test_user

  25. # Step 3: Ensure the api call returned a success code

  26. if response.code != '200'

  27. raise 'User creation failed'

  28. end

  29. # Final Step: Return the user object so we can use it

  30. response.body['user']['data']

  31. end

  32. def random_string

  33. # This is an easy way to get a good randomized string

  34. SecureRandom.hex

  35. end

  36. end

  37. $driver = Selenium::WebDriver.for :firefox

  38. user = RestApiInterface.new.create_test_user

  39. $driver.get 'http://myfakeapp.com'

  40. $driver.find_element(:css, 'input[name="username"]').send_keys @user['username']

  41. $driver.find_element(:css, 'input[name="password"]').send_keys @user['password']

  42. $driver.find_element(:css, 'button[name="login"]').click

  43. puts $driver.find_element(:css, '#user_id').text

04 总结

这里只是给出了一个如何把API访问和UI自动化结合的思路。在这个思路的引导下,可以对UI自动化测试进行很多扩展,例如校验界面数据元素的数据和API中数据的一致性等等。

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/25 20:48:58

中文命名实体识别:RaNER模型半监督学习方案

中文命名实体识别:RaNER模型半监督学习方案 1. 技术背景与问题提出 在自然语言处理(NLP)领域,命名实体识别(Named Entity Recognition, NER) 是信息抽取的核心任务之一。其目标是从非结构化文本中自动识别…

作者头像 李华
网站建设 2026/4/21 0:35:46

springboot个人健康管理网站的设计与实现

3 个人健康管理网站的设计 健康知识、疫情资讯是个人健康管理网站的重要组成部分,信息清晰、详细、准确,能够有效地促进个人健康管理网站的运行[5]。基础设定函数是对整个系统的总体布局进行合理安排,包括:健康知识、疫情资讯等。…

作者头像 李华
网站建设 2026/4/22 9:07:56

【AI+教育】AI幻觉问题及秘塔AI解决方案解析

核心问题引入:AI幻觉与元认知能力的关联 刚刚或多或少也提到过一个问题,就是AI的幻觉问题。生成式人工智能会产生幻觉,也就是编造错误的内容。如果我们缺乏元认知能力,就很容易让这些错误悄然蒙混过关。幻觉问题在教育、社会科学、计算机等多个领域都有大量热门研究展开,包…

作者头像 李华
网站建设 2026/4/22 4:50:11

开源NER模型哪个强?AI智能实体侦测服务RaNER实测报告

开源NER模型哪个强?AI智能实体侦测服务RaNER实测报告 1. 引言:为何我们需要高性能中文NER? 在信息爆炸的时代,非结构化文本数据(如新闻、社交媒体、文档)占据了企业数据总量的80%以上。如何从这些杂乱文本…

作者头像 李华
网站建设 2026/4/25 11:30:30

AI实体识别WebUI实战:基于RaNER的高效部署案例

AI实体识别WebUI实战:基于RaNER的高效部署案例 1. 引言:AI 智能实体侦测服务的现实需求 在信息爆炸的时代,非结构化文本数据(如新闻、社交媒体、客服对话)占据了企业数据总量的80%以上。如何从中快速提取关键信息&am…

作者头像 李华
网站建设 2026/4/22 16:05:38

RaNER模型对比分析:不同预训练模型的效果

RaNER模型对比分析:不同预训练模型的效果 1. 引言:AI 智能实体侦测服务的背景与选型需求 在信息爆炸的时代,非结构化文本数据(如新闻、社交媒体、文档)中蕴含着大量关键信息。如何高效地从中提取出有价值的内容&…

作者头像 李华