本文首发自「慕课网」,想了解更多IT干货内容,程序员圈内热闻,欢迎关注!
作者| 慕课网精英讲师 陈磊
想要成为一名合格的测试工程师并不是一件容易的事情,但是想要划水的人生其实也不难。阅读这篇文章的同学想来一定是不甘于划水的人生的,那我们继续往下看:
说到软件测试,那么我们不得不从测试的基本功测试用例的设计开始。那么首先我们应该知道测试用例是什么,这里我们引用 IEEE Standard 610 (1990) 的测试用例的定义开始:
A set of test inputs, execution conditions, and expected results developed for a particular objective, such as to exercise a particular program path or to verify compliance with a specific requirement.
(IEEE Std 829-1983) Documentation specifying inputs, predicted results, and a set of execution conditions for a test item.为特定目标开发的一组测试输入,执行条件和预期结果,例如执行特定程序路径或验证是否符合特定要求。
(IEEE标准829-1983)指定测试项目的输入,预测结果和一组执行条件的文档。
软件测试用例的定义描述得非常清楚,测试用例就是一组有测试输入、执行条件和预期结果的集合。那么如何设计这样的一个测试用例呢?
我相信你从任何一个软件测试的大学教材里面都能看到,例如边界值法、等价类法、因果图法、场景法等待。只要一提到等价类方法,我相信很多小伙伴都会想起书本上的三个整型变量组成三角形的例子。
等价类设计测试用例比较适合解决有很多条件组合的输入方面的测试用例的设计,场景法适合对批量任务、定时任务等业务逻辑进行测试用例设计,边界值适合于一个输入框的测试用例设计,同时边界值还可以和正交试验方法进行组合使用,因果图方法比较适合有相互约束的功能的测试用例设计。
无论你是一个测试经理还是一个测试工程师,甚至你是一个测试开发工程师,你也需要知道这些科学的方法,这些科学的方式是软件测试中输入项的有效的设计方法,在工作中使用这些科学的方法设计测试用例,可以使你的测试工作更加得可靠和可信。
伴随着工作年限的提供,所有人都在面向于业务或者技术的一个选择。
这上面是完全不同的两条路,一个是走纯业务路线,即测试工程师。测试工程师对自己负责业务很了解,对所有细枝末节的流程都很清楚。在一个团队中,产品经理对每次新 feature 很了解,因为是他设计的,他有可能也对一些和这些新设计的 feature 相关联的一些业务逻辑也很清楚,但是他对上上一次乃至更久之前的迭代的 feature 有可能并不了解。
开发工程师对本次开发的功能很熟悉,并且对和本次迭代的feature有交集的一些内容了解,但是对历史版本的逻辑并不清楚。这里面唯独业务测试工程师对某一个被测试系统所有的 feature 都很了解,这样他才能更好地评估一个系统的质量。随着业务测试工程师的努力,慢慢地会变成测试负责人或者一个对应业务领域的专家。
如果要选择测试开发这条路,那么你会走上一个半测试、半开发的路,在这条职业生涯的路上,你会不断地coding,不断重新定义测试。从自动化脚本的撰写到测试框架的设计、开发和维护,从测试执行到测试平台的研发和搭建,然后慢慢走向高级测试开发工程师的道路,推进项目级别的持续集成、持续交付、持续部署的进程,推进工程效率的不断提高。最后会走上测试架构师的角色,这个时候你有可能更加贴合实际,更加的底层。在某一项技术的细节上和开发架构师的知识库和技能库相差无几,但是又多出了很多DevOps相关的内容知识体系,是真个团队的自动化程度的推进者,或者发展成一个测试开发负责人,管理team内部的交付周期,推动过程化测试进程。
随着测试自动化的发展,测试开发工程师和测试工程师最终变成一个矛盾体,测试开发工程师在推动团队内的自动化程度,通过不断地开发、引进和探索,释放大量的业务测试的手工测试工作量。业务测试工程师的很多工作越来越多的交由机器来完成,业务测试工程师会逐渐的变成整个测试进度、测试进程的决策者,辅助测试工具链最终完成测试,并评审最终的测试结果。
但是如今市场已经越来越多地开始意识到了自动化可以给团队交付效率带来的红利,因此现在的一个纯业务测试工程师的工作机会越来越少了,因此我还是建议很多人选择第二条路,无论你现在是中级业务测试工程师还是高级业务测试工程师,都要尝试着去学习测试开发的技术,给自己充电。
在掌握测试理论基础之上你还需要知道如下的知识内容:
HTTP协议等一些相关的通信协议,掌握各种各样的协议截获方法;
开发的专业术语:序列化、MVC、NIO等内容;
自动化测试框架(这里面包含了WebUI、AppUI和API相关的自动化测试框架);
性能测试工具;
Linux操作系统相关操作方法;
数据库的一些查询方法语句;
各种消息、协议的模拟手段;
理解持续集成、持续交付、持续集成和DevOps;
了解敏捷,懂得精益,会用看板;
懂得容器化以及容器编排;
会一种coding的技术(有基础的你会什么就深入学习一下对应的,要是都没有建议学习python)。
上面都是很多星星点点的一些知识点,最后要通过 DevOps 类的平台可以流程化你的技术体系,达到一种可以通过端到端交付效果的过程。
今天我们从软件测试工程师基本功测试用例设计开始,讨论了测试职业生涯的两条路,但是就与当今招聘市场的需求,建议大家都多少走到第二条路上。最后介绍了要走上第二条路需要逐渐学习的一些内容,以及对大家的一些建议。
欢迎关注「慕课网」,发现更多IT圈优质内容,分享干货知识,帮助你成为更好的程序员!
我正在学习如何使用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
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
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
在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为