jjzjj

接口自动化测试如何做?测试老鸟总结,接口测试数据构造大全......

测试追风 2023-05-14 原文

目录:导读


前言

接口参数的数据获取:

接口文档:接口文档通常会包含接口需要的请求参数和返回结果的格式、类型等信息;

Python接口自动化测试:https://www.bilibili.com/video/BV16G411x76E/

测试用例设计:根据测试用例设计的需求,可以确定需要哪些请求参数以及期望的响应结果;
业务数据:从实际业务场景中获取数据,以确保测试数据的真实性和代表性;
数据库:从数据库中获取数据,作为接口测试的输入参数;
随机数据生成器:通过随机数据生成器生成测试数据,以增加测试用例的多样性和覆盖率。

在选择数据来源时,需要根据具体情况进行选择。如果有可靠的接口文档,可以直接从文档中获取请求参数和预期结果;

如果测试用例设计已经明确了需要测试的功能和边界条件,可以根据需求设计测试数据;如果需要模拟实际业务场景,可以从业务数据或者数据库中获取数据。最后,为了提高测试用例的多样性和覆盖率,可以使用随机数据生成器。

在做接口自动化测试的过程中,接口参数的数据应该从哪里来比较好呢?

是写死、从业务流中生成动态数据、还是从数据库获取。

如果是写死,那么一旦切换环境,测试数据可能就无法使用;
如果是从业务流中获取,万一上一个接口出了问题,那么下一个接口不就会跟着出错呢?
如果是从数据库获取,数据库中可能存在脏数据,是否会造成测试接口返回的信息不准确呢?

接口数据生成

1、手动录入
通过手动创建测试数据,包括各种不同的输入、参数组合。

这种方式比较耗费时间和人力成本,适用于数据量较少的情况,不适合大规模的测试,且切换环境后可能就无法使用。

2、动态数据
从用例中生成,或使用数据生成工具生成需要的测试数据。

接口返回数据
在测试用例执行过程中,从接口返回的数据中提取需要的数据,再将这些数据用于下一个接口的测试。这种方法适用于接口之间有依赖关系的情况。比如:上一个接口查询商品,下一个接口添加购物车。

接口之间有依赖关系的场景,可能出现上一个接口报错,导致下一个接口也失败。对于这种情况,照常传参即可,因为多接口串联的用例,本身就是必须要保证每个接口都是正确的。上游控制不稳定,下游自然也会有问题,这个解决的下手点不在于接口如何传参,而是确定前置条件是否满足。

数据生成工具
使用数据生成工具自动生成符合要求的测试数据,例如:Faker、Mock、Mockito 等,可以根据数据类型、长度、规则等条件来生成数据,这些数据可能是时间戳、随机数字、随机字符串等。

这种方式适用于需要大量随机数据的情况,可以加快测试速度,同时提高测试的可复用性。

3、静态数据
静态数据是指一些不变的数据,这些数据可以被硬编码到测试脚本中。

4、配置数据
对于接口地址、端口号、数据库信息等环境相关配置,通常存储在专门的配置文件中,供全局调用。

5、从数据库中获取
在测试用例执行前,通过 SQL 语句查询数据库获取需要的测试数据,再将数据导入测试用例中。

这种方法适用于需要大量数据的情况。

在实际测试中,可能会组合使用以上几种数据来源来生成接口自动化测试数据。

无论使用哪种方式获取测试数据,都需要保证数据的准确性和完整性,以及数据的一致性和合理性。

同时,还需要根据接口的不同情况,设计不同的测试数据,包括正常数据、异常数据、边界数据等。应遵循测试用例之间保持独立性,各个用例不会关联影响的原则。

为避免测试环境出现大量测试数据以及脏数据,可将用例形成闭环,例如在后置操作中进行删除。

下面是我整理的2023年最全的软件测试工程师学习知识架构体系图

一、Python编程入门到精通

二、接口自动化项目实战

三、Web自动化项目实战

四、App自动化项目实战

五、一线大厂简历

六、测试开发DevOps体系

七、常用自动化测试工具

八、JMeter性能测试

九、总结(尾部小惊喜)

只有拼尽全力,才能看到最美的风景。奋斗吧,即使路上会有坎坷和挫折,但只要不放弃,就一定能够达到心中所想!

路漫漫其修远兮,吾将上下而求索。每一步都是向着梦想的跨越,每一次努力都是为了更好的自己。只要不放弃,成功就在前方等待着你!

不经历风雨,怎能见彩虹;不经历挫折,怎能成就伟业。让每一次跌倒都成为迈向成功的脚步,坚定前行,奋斗不止!

有关接口自动化测试如何做?测试老鸟总结,接口测试数据构造大全......的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby - 如何从 ruby​​ 中的字符串运行任意对象方法? - 2

    总的来说,我对ruby​​还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用

  3. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  4. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  5. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

    给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

  6. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  7. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  8. ruby - 如何指定 Rack 处理程序 - 2

    Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack

  9. ruby - 如何每月在 Heroku 运行一次 Scheduler 插件? - 2

    在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/

  10. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

随机推荐