另外一种有效的控制测试用例粒度的方法——策略覆盖。在设计测试用例时,经常会遇到这样的情况:
1)有些因子,如操作系统、平台等,除了那些可以分析到的对系统有影响的地方之外,对系统可能没有影响、影响很弱或者影响未知的地方,没有必要使用Pairwise来进行正交。
2)有些数据类的测试点比较细,比如测试一个名称,但是它和其他的测试点没有关系或者关系很弱,此时就没有必要使用Pairwise来做正交。
针对上述两种情况,可以考虑使用策略覆盖的方式,将这些因子或数据的取值分配到其他测试用例中,作为其他测试用例的测试数据或者是测试条件(或预置条件)。例如,对于第一种情况,假设因子A有4个因子值,且已经通过流程、参数、数据或组合的测试设计方法,得到了6个测试用例。

将因子A作为预置条件,并将其分配到如下表6个测试用例。



对于第二种情况,假设数据B使用等价类和边界值分析后,有4个测试数据。

将数据B作为测试输入数据,并将其分配到用例表1的6个测试用例中。

在分配因子或数据的时候,使用的是轮询的方式,即按照A1、A2、A3、A4、A1……的顺序在进行。在实际项目中,轮询方式不一定适合,还需要考虑如下几种情况。
1.内容的重要性
不同的因子或数据值,它们的重要性可能也不同。对于重要的、优先级高的因子,可以加大分配量。例如,因子A中的A1重要性相对A2~A4都要高一些。
2.测试执行的便利性
尽量将和这个测试用例有关的因子或数据值分配到一起,达到执行测试用例的时候可以顺便测试这个因子或数据值的效果。
以“PC连接WiFi”为例,看看如何进行策略覆盖。目前还有一个“PC会使用不同的操作系统来连接WiFi”这样一个测试点,如何将这个测试点中“操作系统”这个因子,放在“PC连接WiFi”的测试用例中进行策略覆盖。
在“PC会使用不同的操作系统来连接WiFi”这个测试点中,支持的操作系统包括Windows 10、Windows 8、Windows 7、Mac OS X。

将这个测试点策略覆盖到上表所示的测试用例中:
首先分析操作系统这个因子,看看不同的操作系统是否具有不同的优先级。作为举例,假设Windows 10和Windows 8的优先级比较高。接下来,考虑测试执行的便利性。
从测试时的配置顺序来看,先选择是使用“首选WiFi”还是“备选WiFi”,再选择“是否要加密”,如果要“加密”,还要选择“加密算法”。可以将上述配置过程绘成一棵树的形式。

然后让每种操作系统覆盖一个“树杈”。

如图所示,(1)和(3)中还包含了3种加密的情况,包含的测试用例比(2)和(4)要多一些,可以将(1)和(3)分别“分配”给分析出来的重要操作系统——Mac OS和Windows 10;将(2)和(4)分别分配给相对不那么重要的操作系统——Windows 7和Windows 8。
按照上述分配策略,将操作系统这个因子在测试用例中进行分配。

摘取自刘琛梅老师的《测试架构师修炼之道:从测试工程师到测试架构师 第2版》
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah
我有一个围绕一些对象的包装类,我想将这些对象用作散列中的键。包装对象和解包装对象应映射到相同的键。一个简单的例子是这样的: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?并散列所有无济于事。
我有一些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
当我在Rails控制台中按向上或向左箭头时,出现此错误:irb(main):001:0>/Users/me/.rvm/gems/ruby-2.0.0-p247/gems/rb-readline-0.4.2/lib/rbreadline.rb:4269:in`blockin_rl_dispatch_subseq':invalidbytesequenceinUTF-8(ArgumentError)我使用rvm来管理我的ruby安装。我正在使用=>ruby-2.0.0-p247[x86_64]我使用bundle来管理我的gem,并且我有rb-readline(0.4.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/
我正在使用Ruby2.1.1和Rails4.1.0.rc1。当执行railsc时,它被锁定了。使用Ctrl-C停止,我得到以下错误日志:~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`gets':Interruptfrom~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`verify_server_version'from~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.
我将我的Rails应用程序部署到OpenShift,它运行良好,但我无法在生产服务器上运行“Rails控制台”。它给了我这个错误。我该如何解决这个问题?我尝试更新rubygems,但它也给出了权限被拒绝的错误,我也无法做到。railsc错误:Warning:You'reusingRubygems1.8.24withSpring.UpgradetoatleastRubygems2.1.0andrun`gempristine--all`forbetterstartupperformance./opt/rh/ruby193/root/usr/share/rubygems/rubygems
我遵循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