jjzjj

应聘软件测试岗位需要掌握的基础知识与技能(面试常考内容)

dvlinker 2023-08-14 原文

目录

1、前言

2、要掌握的基础知识及技能概述

3、软件测试的基本流程与基本概念

3.1、一个软件产品从无到有的完整流程

3.2、软件测试工程师的职责与工作内容

3.3、测试的分类

3.4、测试用例的编写

3.5、软件的产品形态

4、基本的网络知识和常用的网络命令

4.1、基本的网络知识

4.2、常用的网络命令

5、数据库与常用的SQL语句

6、常用的Linux命令

7、自动化测试工具的使用与自动化脚本的编写

8、做软件测试是否有前途?

9、应聘途径的选择

9.1、通过校园招聘应聘

9.2、通过招聘网站应聘

10、作为应届生,面对严峻的就业形势,该怎样应对?

11、最后


       最近和一些高校的学生朋友交流,他们打算毕业后从事软件测试的工作,他们想了解一下软件测试的一些工作内容和工作方式,想知道应聘软件测试岗位要掌握哪些知识和技能。今天我们就来讲一下在应聘软件测试岗位之前需要学习哪些内容,做好哪些方面的技能储备,给大家提供一个参考。

1、前言

       IT行业主要有两大类岗位,一是研发类岗位,一个是测试类岗位。以前我经常讲,测试岗位相对研发岗位,门槛要低不少,对学历和能力的要求要低一些,很多同学都可以来应聘软件测试的工作。

       除了计算机科学与技术、软件工程等计算机类专业的同学,其他计算机相关专业的同学也可以来从事IT相关的工作,比如电子信息工程、通信工程、电气自动化、自动化等专业,甚至是数学、物理、化学等专业同学也进入了IT行业。虽然很多IT公司的招聘岗位说明中都有提到招聘计算机专业和计算机相关专业,但实际招聘时并不会有特别的限制,只要是有一定基础的理科和工科的同学,都可以来应聘。实际情况也确实是这样的,在公司我们接触到的同事,很多都是非计算机专业毕业的。

       作为从事IT行业十多年的软件开发人员,我经常和软件测试人员打交道,对软件测试行业比较了解,对招聘软件测试人员的要求也比较熟悉!我已经成功帮助一个足球队建制的朋友们跨入了软件测试行业,其中有刚毕业的应届生,也有在其他行业工作若干年中途转到IT行业的朋友,所以在这方面积累了一些技术和经验。这些朋友在应聘软件测试岗位之前,我都会给他们做一些基础知识的技术培训,包括软件测试的基本概念和基本流程、基础的网络知识、常用的数据库技能以及常用的Linux命令。在这里我把这些培训的心得和细节内容,详细分享给大家,希望能帮到大家。

       以下内容不仅仅适用于即将毕业的同学,也适用于一些在校的学生(可以提前将相关知识储备起来),也适用于中途转行的朋友(中途转行进入软件测试行业)。

2、要掌握的基础知识及技能概述

       从当前IT行业对测试人员普遍要求来看,一般需要了解软件测试的基本流程与基本概念,了解测试用例的编写;要了解基本的网络知识;要了解数据库的基本概念,掌握常用的SQL语句;要熟悉常用的Linux命令等。如果会使用常用的自动化测试工具(比如按键精灵、QTP、selenium、Jmeter等),能用Java和Python脚本语言编写自动化测试和接口测试的脚本,就更好了。在各大IT公司的岗位招聘说明中,基本上都是对这些知识和技能的要求。下面我们就来详细讲述一下这些基础知识和技能,帮助大家尽快掌握,以满足大部分IT企业的要求。

        这些基础知识和技能,都是笔试或者面试常考的点,大家都要掌握。

3、软件测试的基本流程与基本概念

       这部分内容,是一个软件测试工程师必须要了解的内容,在进入到软件测试行业之前,要对这个行业有个初步的认识和理解。

3.1、一个软件产品从无到有的完整流程

        一个全新的软件产品从开始萌芽到最终商用,大体上会经历市场调研、技术预研、竞品分析、产品规划、产品立项、需求导入(需求人员)、需求评审、UI效果图与视觉设计(UCD美工)、编码设计(开发人员)、测试用例编写(测试人员)、测试验证、bug修改、产品bug收敛、产品发布等多个阶段。

       产品交付给客户后,因为用户机器和系统环境的不同,在用户使用的过程中会陆续报出之前未曾暴露的bug,需要研发和测试人员及时地定位、修复这些问题。客户在项目竞标等初始阶段或者在使用过程中也会提出新的需求或定制需求,产品自身也会陆续加入新的需求,产品的版本会不断的向前演进,这样就进入了产品的后期维护与需求迭代的循环往复的过程。

       面试时,面试官可能会让你简单的描述一下产品从无到有的过程,谈谈你的认识和理解。

3.2、软件测试工程师的职责与工作内容

       软件测试工程师需要根据产品的需求文档,编写测试用例,待开发人员将软件初步开发完毕后,测试人员根据之前编写的测试用例,对软件进行功能验证与测试,同时在测试过程中不断的丰富和完善测试用例。测试人员将测试过程中发现的问题,在bug记录系统中以bug单的形式反馈给开发人员。开发人员修改bug后,测试人员再对bug进行验证。软件测试人员是产品质量的把关者,是软件不断改进和优化的推动者,在软件产品研发过程中担任着很重要的角色。

3.3、测试的分类

       我们需要了解一下测试的分类。测试可以分为白盒测试黑盒测试。黑盒测试是指测试人员在不了解软件内部原理和机制的情况下进行的测试,给定一个输入,看能否得到期望的输出。白盒测试是指测试人员在了解软件内部原理和流程的情况下进行的有针对性的测试。

       测试还可以分为单元测试集成测试。单元测试是以模块为单位进行的单一模块的测试。集成测试是将软件的多个模块集成在一起,进行整个系统的相关业务和流程的测试。

       测试还可以分为压力测试性能测试。压力测试是对系统进行极限压力测试,比如多客户端同时并发操作以考验服务器的性能,再比如借助自动化测试工具对客户端某个功能进行长时间的拷机测试(长时间频繁执行某一操作,比如在IM聊天框中不断地发消息)。性能测试的一个基本指标是目标软件对系统内存和CPU的占用。一个优秀的软件需要持续地对内存和CPU占用进行优化。

       在测试的过程中,还有回归测试冒烟测试的概念。回归测试是指修改代码后,重新进行测试以确认修改没有引入新的问题,并且没有影响已有功能。冒烟测试是在版本转测试之前,先选择一部分基础的测试用例进行验证,确保全流程没有严重、阻塞性的问题。

       此外,还有稳定性测试兼容性测试易用性测试等。稳定性测试主要是监测软件长时间运行是否会出现异常,比如崩溃、死锁、内存泄漏等问题。兼容性测试则是测试软件在不同环境下的兼容性,比如:

1)Web网页要在IE不同版本的浏览器(低版本IE浏览器一般不支持了)、Chrome浏览器、FireFox浏览器、360浏览器等上进行测试,看看Web页面显示是否正常。
2)客户端软件要在XP、win7、win8、win10、win11等系统上进行测试,保证在各个系统上能正常的运行。
3)视频会议软件对各个厂商的USB摄像头的兼容,保证操作不同厂商的摄像头时不会发声异常,保证能采集到清晰的图像。

易用性测试主要是检查软件中是否存在不方便用户使用的问题,主要侧重软件的用户体验。比如操作太繁琐、功能掩藏的太深、界面展现不方便用户使用等。

       面试时,面试官可能会让你列举一些常见的测试类型分类,以考察对测试相关概念的认知与理解。

3.4、测试用例的编写

       测试用例的编写,是根据软件需求文档中列出的功能,考虑各种可能的场景,给定一个输入,对应一个期望的输出。不仅要考虑正常的情况,也要各种异常的情况。比如以登录为例,输入正确的用户名和密码,期望结果是能正常登录到系统中,如果登录不上,就是软件功能有问题。输入正确的用户名和错误的密码,期望结果是不能登录的,如果能登录上,就是软件存在问题。

       有的公司的笔试题或面试题中出一项关于测试用例的题,让应聘者现场编写或者口述某个场景下的测试用例。回答时,既要考虑正常的场景,也要异常的场景。

3.5、软件的产品形态

       服务器侧的产品形态比较单一,这里主要讲的是客户端软件的产品形态,比如Windows上的PC软件,也有苹果和安卓移动端的app软件,也有苹果MAC系统中的客户端,也有硬件形态的嵌入式终端,也要有web客户端,甚至还要有支持国产化系统的客户端软件

       这里还需要了解什么是B/S架构,什么是C/S架构。所谓C/S架构就是客户端(Client)/服务器(Server)模式,比如电脑端的QQ。所谓B/S架构就是,浏览器(Browser)/服务器(Server)模式,比如使用浏览器访问的的淘宝主页。

4、基本的网络知识和常用的网络命令

       现在基本所有的软件系统都是基于网络的,有走局域网(私网)的,有走互联网(公网)的,不可避免的会出现很多与网络相关的问题,特别是软件部署到安全级别比较高的客户环境后会出各种复杂的网络问题。所以无论是软件开发人员,还是测试人员,亦或是运维人员,还是技术支持,都需要掌握一些常用的基础网络知识,以用于日常网络问题的排查。这一块的内容,一般是面试时必问的内容。

4.1、基本的网络知识

       首先要了解OSI的7层分层TCP/IP的5层(或4层)分层,这是最基本的概念,也是笔试和面试经常问的问题。

       再就是要了解TCP建链时的三次握手的流程,即连接发起者给目标端发送一个SYN包,目标端收到这个SYN包后给发起端回一个ACK包,发起端收到这个ACK包后,再给目标端发送一个ACK包,这样就完成了3次握手建链的过程。这个过程使用WireShark抓包软件抓包看的最清楚。

       还要了解TCP的ACK确认机制丢包重传机制,比如客户端给服务器发送了一包数据,客户端会等待服务器回复的ACK确认包,如果长时间没有收到ACK包,客户端就会认为网络出问题了,会重新将之前发送的数据包重新发给服务器。正是因为这种确认机制,有效的保证了TCP的可靠性。

      要了解TCP和UDP的区别及应用场景。TCP是面向连接的,建立连接后才能进行数据的收发,是可靠的;而UDP是无连接的,无需建立连接,直接将数据丢给目标端,无法保证数据能被送到对端,所以是不可靠的。

       TCP和UDP分别用在什么场景下呢?比如在视频会议和视频监控系统中,会有大量且频繁的音视频数据的收发,这些音视频数据的收发一般要使用UDP,因为UDP可以保证很好的实时性,没有TCP那种繁杂的数据ACK机制(频繁的ACK会影响数据的收发的效率)。当然UDP是不可靠的,但这个场景中,实时性要求性比较高,最好不要有音视频的延时,即使因为UDP不可靠导致小部分数据的丢失,也是可以接收的。但一般情况下,TCP和UDP要结合在一起使用,一些关键的控制信令必须要保证传输的可靠性,所以这些控制信令的收发必须要使用TCP。

       我们还需要了解端口的概念,运行在一台电脑的众多软件,IP地址都是一样的,在建立网络连接及后续数据的收发,是如何区分的呢?其实都是通过端口号(一个介于0与65535之间的整数值)进行区分的,建立连接时需要使用到IP和端口。对于服务器而言,要接收客户端的连接请求,必须开启服务监听端口,客户端在连接时,就使用服务器的IP和监听端口与服务器建立连接。如果服务器登录不上,可以先看能否ping通服务器地址,如果能ping通,就要telnet服务器的监听端口,看服务器是否开启了监听端口。在服务器程序出现崩溃退出时,可能就没有开启监听端口了。

       此外,还要了解路由器和交换机的区别,可以自行搜索,这个地方就不再赘述了。

4.2、常用的网络命令

1)ping命令

       当软件出现网络问题时,比如登录不上,首先应该确认是否是所在电脑的网络或者远端服务器的网络出现问题了。最简单的就是ping命令,直接ping一下目标地址就好了。

如果软件系统在交互的过程中数据出现延时或抖动,可以使用ping指令,加上一个-t的参数,比如ping 172.16.72.136 -t,查看连续的ping包,看网络是否存在明显的抖动或延迟,如下:

2)ipconfig命令

        ipconfig命令主要用来查看网卡的配置信息,比如IP地址,子网掩码和默认网关等,如下所示:

3)telnet命令

       在使用这个命令之前,需要在Windows系统中打开telnet服务,该服务在win7以上系统中默认是关闭的。打开telnet服务的入口是:控制面板-->程序与功能-->打开或关闭Windows功能:

勾选“telnet客户端”,点击确定即可。

       一般我们会使用telnet命令,查看服务器的监听端口有没有开启,比如telnet 172.16.72.136 7800,其中172.16.72.136是服务器地址,7800是服务器的监听端口。如果端口没有开启,则会显示端口打开失败,如下所示:

4)netstat命令

        netstat命令用来查看本机的网络连接与端口占用情况,如下:

5)route相关命令

       route相关命令主要用来查看路由表信息,添加策略路由等。route print命令是将Windows系统中的路由表打印出来,如下图所示:

        route add命令可以往路由表中添加一条路由,如下:

route add 172.16.0.0 mask 255.255.0.0  172.16.30.186(172.16.30.186为内网中的网关)

        一般在处理Windows系统中的多网卡问题时,会用到这些路由相关命令。比如系统中有两张网卡,一张是内网的网卡,一张是外网的网卡:

Windows系统中只能设置一个默认网关,没设置默认网关的网卡,必须通过route add命令添加策略路由来控制ip的访问走向!

6)traccert命令

       该命令可以追踪访问目标地址所经历的路径,如下所示:

通过该命令,可以看出数据包是从那个网卡发出去的(看默认网关),也可以看出从哪个运营商线路(联通线路、移动线路、电信线路)访问到目标地址的!

       之前专门写过一篇关于基础网络知识的文章,里面讲解的比较详细,可以打开看看:

详解常用的基础网络知识(面试常考内容)https://blog.csdn.net/chenlycly/article/details/124433936

5、数据库与常用的SQL语句

       数据库是用来存储软件业务中的数据,任何大型软件都需要用数据库软件来存放数据的。常用的数据库有SQL Server、Oracle、MySQL、小型数据库sqlite等。其中SQL Server是微软出品的,Oracle是美国甲骨文公司收费的商业数据库,MySQL和sqlite数据库则是免费的,大家都可以免费使用的。

       大家可以安装一下MYSQL数据库,然后使用sqlyog可视化工具查看数据库,操练操练一些常用的SQL语句。

       这部分我们需要熟悉一些常用的SQL语句。Oracle、MySQL和sqlite这些数据库的语法大体上是差不多的,只是部分细节上会有所不同,我们只需要掌握通用的SQL语句即可。比如创建数据库文件(create database)、创建数据表(create table)、修改数据表(alter)、删除数据表(drop)、向数据表中插入数据(insert into)、修改表中的数据(update)、查询表中的满足给定条件的数据(select)、删除表中的数据(delete)等。这里注意要将对表结构的操作与对表中数据的操作区分开来。具体的SQL语句,大家自行学习一下,此处就不一一展开了!

       还有就是要了解一下数据库中的索引、视图、事务处理、存储过程、触发器等概念的使用。

6、常用的Linux命令

       当前大部分IT公司的后台服务器中使用的操作系统都是Linux系统,Linux系统有多个版本,比如常用的RedHat红帽系统、Ubantu系统和CentOS等,其中CentOS是免费的,也是大多数公司所采用的Linux系统。RedHat公司已经宣布停止维护CentOS服务器操作系统,可以选择华为开源的欧拉系统阿里开源的龙蜥系统腾讯开源的TencentOS系统作为替代,这些系统也都是基于开源的Linux系统的。

       除了后台的服务器,很多嵌入式系统使用的也是Linux系统。所以Linux系统已经被IT公司广泛地采用,所以很多IT企业在招聘时都会将了解Linux及掌握Linux常用命令当成基本的要求。

       掌握常用的Linux命令,主要用于Linux系统的日常维护与软件问题的排查。下面简单的列举几个日常工作中常用的命令:(下面只列出了一小部分命令,后面会专门写一篇Linux常用命令的文章

1)vi命令

       vi命令主要用来查看和修改文件内容,执行该命令后直接进入vi的命令模式。从命令模式进入编辑模式需要按i键或者a键,使用ESC键可以从编辑模式进入命令模式,具体为:

i - 插入文本

a - 追加文本

命令模式可执行的操作:(按下shift键输入:号)

:w保存文本

:wq保存并退出

:wq!保存并强制退出

:q退出

2)ls命令和ll命令

      ll命令主要用于罗列出当前目录中所有文件和文件夹的详细信息,比如文件的修改时间、读写权限、文件大小、所属用户等信息,类似于Windows中显示的详细信息,如下:

      ls命令仅罗列出当前目录中的文件名称,没有详细信息。平时我们常用ll命令查看文件的修改时间。

3)文件和文件夹操作命令touch、mkdir、rm

       touch命令用于创建文件,mkdir用于创建文件夹,rm命令(-rf)用来删除文件或文件夹。

4)chmod命令

       用于修改文件的可读可写可执行的权限。

5)netstat命令

       netstat命令用来本机的网络连接及端口占用情况的。一般使用“netstat -anp|grep + 进程名”命令,列出进程的已建立的连接或者正在监听的端口信息。

6)ps命令

      ps命令用来查看进程的相关信息。一般使用“ps -aux|grep + 进程名”命令,列出目标进程的相关信息。如果要强制杀掉某个进程,可以使用“kill -9 + 进程id”命令,要先使用“ps -aux|grep + 进程名”命令打印出目标进程的id,然后再调用kill命令。

7)top命令

       top命令可以查看进程的CPU和内存占用情况,类似于windows下的任务管理器窗口,可以查看系统中各进程的资源占用情况,如下所示:

这个命令在排查目标软件在CPU和内存占用率高的问题时比较好用。

7)tcpdump命令

        tcpdump命令主要是用来在Linux系统上抓取网卡上的网络数据包,是个很强大很实用的命令。常用的命令格式为:tcpdump -i eth0 -s 0 -w 0515.pcap,其中-i用来指定抓哪张网卡的,可以是any,表示抓所有网卡的数据包;-s用来指定抓包文件的大小,一般设置为0,即不限制抓包文件的大小;-w用来指定抓包文件的名称。

       待抓包完成后,可以将抓包文件下载到Windows系统中,使用WireShark打开抓包文件进行数据包的分析。

7、自动化测试工具的使用与自动化脚本的编写

       测试岗位其实分两大类,一类是功能测试,一类是开发测试。对于功能测试,主要人工测试,属于低层次的测试岗位。对于开发测试,需要使用自动化测试工具,需要编写测试脚本或代码。 开发测试也叫自动化测试,属于软件测试的高级岗位,掌握自动化测试技能的人,在招聘市场上会比较受欢迎。大型互联网公司比如阿里、腾讯、字节跳动、美团等,因为自身产品和业务的测试需要,也比较推崇自动化测试技术,推出了大量的自动化测试岗位。

       常用的自动化测试工具有按键精灵、QTP、LoadRunner、jemeter、selenium等。除了自动化测试工具,还需要编写自动化测试脚本,最常用的脚本语言是Python。有时也需要使用Java语言编写用于自动化接口测试的脚本。目前JavaPython在大型互联网公司已经被广泛的使用。

8、做软件测试是否有前途?

       与开发岗位相比,软件测试岗位的门槛要低不少,但门槛低并不代表没有前途。刚毕业入门时的待遇可能要低一些,但随着工作年限的增长,技术和经验得到逐步的提升,个人价值也逐渐体现出来。如果技术水平能进阶到自动化测试(开发测试)的阶层,薪资待遇会得到快速的提升,月薪上几万也不再是遥不可及!互联网公司对自动化测试的需求量比较大,如果有机会能进入互联网公司,不仅能拓宽视野,个人能力也会得到很大的提升。

        另外,测试岗位也可以考虑转岗,比如可以转产品需求,也可以转系统运维。总之,软件测试岗位也有足够大的发展空间,只要你愿意努力,力求上进,总能拼出属于自己的大好未来。

9、应聘途径的选择

       对于即将毕业的应届生,在工找工作方面都是新手,没什么经验,所以我们需要在应聘途径上给一些建议。应聘的途径主要有两个,一个是校园招聘,一个是招聘网站。

9.1、通过校园招聘应聘

       还没毕业的同学,最好通过毕业前的校园招聘会来应聘,校园招聘会一般会在毕业的前一年的国庆后进行。校园招聘应聘软件测试岗位成功的几率要大很多,一是各大IT公司在校园招聘中投入了大量的招聘名额,二是校园招聘时各大公司对应届生的要求,相对走社会招聘的渠道,要低不少。

9.2、通过招聘网站应聘

       地域比较热的或者学校比较好的,校园招聘会上来的公司比较多,提供的岗位也比较多,应聘上的几率比较大。但学校地域较偏或者登记差一点的学校,去招聘的公司比较少,岗位也就比较少。这些学校的学生一般会有两种选择,一种是拿着简历到好点的学校或者去外地比较热门的城市去参加其他学校的招聘会,但这种情况下竞争压力也比较大。很多同学则选择另一种方式,拿到毕业证后(毕业后),再到北上广深等大城市来找IT相关的工作,大城市IT公司比较多,机会也比较多。

       这个时候基本是通过51job、智联招聘和BOSS直聘这些招聘网站来投递简历。其实此时应届生的机会要少很多,因为稍微好点的公司基本上在年前的招聘会上就将应届生的名额招满了,已经基本没有应届生的招聘需求了。这些招聘网站上的职位大多数都是社会招聘的职位,对工作经验有一定的要求,不过部分岗位也考虑应届生,对应届生的要求会低一些。

10、作为应届生,面对严峻的就业形势,该怎样应对?

       首先我们要事先有准备的学习并掌握上述基本知识与技能,以保证能相对顺利地通过IT公司的笔试和面试。其次就是要降低要求,降低对公司和薪资的要求,应该把能在IT行业立足放在首位。工资不是最重要的,应该把学习和增长经验放在首位。有了技术和经验之后,工资肯定会一步步涨上去的。

       再就是,以往我们不太建议刚毕业的应届生去外包公司,一是外包公司不太稳定,二是外包公司没有归属感。但在机会不多的情况下,外包公司是可以考虑的。特别是一些大型的外包公司,他们有着大量的合作资源,提供了大量的就业岗位,并且他们相对要正规一些,公司的业务也要稳定一些。

11、最后

        以上就是我多年来的心得与经验的分享,希望能帮到打算进入IT软件测试行业的朋友们!

有关应聘软件测试岗位需要掌握的基础知识与技能(面试常考内容)的更多相关文章

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

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

  2. ruby - 将数组的内容转换为 int - 2

    我需要读入一个包含数字列表的文件。此代码读取文件并将其放入二维数组中。现在我需要获取数组中所有数字的平均值,但我需要将数组的内容更改为int。有什么想法可以将to_i方法放在哪里吗?ClassTerraindefinitializefile_name@input=IO.readlines(file_name)#readinfile@size=@input[0].to_i@land=[@size]x=1whilex 最佳答案 只需将数组映射为整数:@land边注如果你想得到一条线的平均值,你可以这样做:values=@input[x]

  3. ruby - 使用 C 扩展开发 ruby​​gem 时,如何使用 Rspec 在本地进行测试? - 2

    我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当

  4. ruby - Ruby 的 Hash 在比较键时使用哪种相等性测试? - 2

    我有一个围绕一些对象的包装类,我想将这些对象用作散列中的键。包装对象和解包装对象应映射到相同的键。一个简单的例子是这样的:classAattr_reader:xdefinitialize(inner)@inner=innerenddefx;@inner.x;enddef==(other)@inner.x==other.xendenda=A.new(o)#oisjustanyobjectthatallowso.xb=A.new(o)h={a=>5}ph[a]#5ph[b]#nil,shouldbe5ph[o]#nil,shouldbe5我试过==、===、eq?并散列所有无济于事。

  5. ruby - RSpec - 使用测试替身作为 block 参数 - 2

    我有一些Ruby代码,如下所示:Something.createdo|x|x.foo=barend我想编写一个测试,它使用double代替block参数x,这样我就可以调用:x_double.should_receive(:foo).with("whatever").这可能吗? 最佳答案 specify'something'dox=doublex.should_receive(:foo=).with("whatever")Something.should_receive(:create).and_yield(x)#callthere

  6. ruby - Sinatra:运行 rspec 测试时记录噪音 - 2

    Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/

  7. ruby-on-rails - 如何在我的 Rails 应用程序 View 中打印 ruby​​ 变量的内容? - 2

    我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby​​中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R

  8. ruby-on-rails - 迷你测试错误 : "NameError: uninitialized constant" - 2

    我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test

  9. ruby - 即使失败也继续进行多主机测试 - 2

    我已经构建了一些serverspec代码来在多个主机上运行一组测试。问题是当任何测试失败时,测试会在当前主机停止。即使测试失败,我也希望它继续在所有主机上运行。Rakefile:namespace:specdotask:all=>hosts.map{|h|'spec:'+h.split('.')[0]}hosts.eachdo|host|begindesc"Runserverspecto#{host}"RSpec::Core::RakeTask.new(host)do|t|ENV['TARGET_HOST']=hostt.pattern="spec/cfengine3/*_spec.r

  10. ruby-on-rails - 如何使辅助方法在 Rails 集成测试中可用? - 2

    我在app/helpers/sessions_helper.rb中有一个帮助程序文件,其中包含一个方法my_preference,它返回当前登录用户的首选项。我想在集成测试中访问该方法。例如,这样我就可以在测试中使用getuser_path(my_preference)。在其他帖子中,我读到这可以通过在测试文件中包含requiresessions_helper来实现,但我仍然收到错误NameError:undefinedlocalvariableormethod'my_preference'.我做错了什么?require'test_helper'require'sessions_hel

随机推荐