联调测试总计
一个大型项目都会涉及多个部门的多个系统,系统之间通过接口或中间件等形式交互。在项目开发时各系统的工作都是并行的,每个系统开发完成后先由内部测试工程师进行内部的功能模块测试。在这整个项目的层面上讲,每个模块的内部测试属于集成测试,待全部模块测试完成后还应进行整个项目的系统联调测试。联调测试相当于在一个大的项目平台下进行系统间接口或中间件的UAT测试。
1 联调测试的意义
在各模块进行自己系统的测试过程中,测试到模块间的交互时,测试工程师都是按照事先的约定(接口文档,消息示例等)通过Mock方式进行的。由于各系统间开发并不是同步的,并没有真正的进行联调调用。接口文档或消息实例中的描述有时并不是十分详细,消费方系统和服务提供方系统的研发人员对于这些文档的理解难免会出现一些偏差,体现在系统上就会出现bug。在联调测试中,将能发现这些问题。另外,联调测试时将覆盖实际用到的所有业务场景和所有接口服务,为整个项目的上线提供充足的信心。
2 如何开展联调测试
联调测试时涉及多个系统多个部门测试工程师参加,是需要协调组织的工作。通常由项目经理和项目发起方系统的测试负责人共同组织,服务提供方和服务消费方的测试工程师参与执行,涉及其他依赖系统的测试工程师配合。下面是联调测试流程图:

测试工程师编写测试用例时最后要对联调的内容编写特定的联调测试用例。在模块内部测试用例评审时,对联调用例也会进行评审。每个模块的联调测试用例包括作为服务提供方的和作为服务消费方的两方面。例如A模块调用B模块某个接口,此时A模块就是服务消费方B模块就是服务提供方。如果A模块发消息给某中间件,B模块订阅A模块发的消息,此时A模块就是服务提供方B模块就是服务消费方。
项目测试负责人在联调测试前,组织各模块的联调测试用例评审。项目涉及的所有产品经理、开发工程师和测试工程师都会参加。评审有三点目的:第一、通过服务消费方的联调用例对应的服务提供方研发查看自身系统是否满足需要。第二、项目测试负责人评估各模块间交互场景,为后续汇总项目整体联调用例做准备。第三、各模块间研发人员相互沟通,为后续模块间单独联调做好准备。
两个交互的模块各自内部测试完成后就可以进行模块间的两两联调测试了,一般由服务消费方发起,按照之前评审过的联调测试用例进行。联调测试的大部分工作量在这个阶段完成,如果测试充分,后续进行项目整体联调时将会更为顺利。然而很多情况下,服务消费方在消费一条数据时还要对其它模块的服务进行消费才能满足联调的需要。例如:B模块处理A模块的消息时需要调用C模块验证消息中某个内容是否一致。这样B模块想要进行联调测试就需要A,C两个模块配合。如果C模块没有开发完成或没有对应数据,可以采用对C模块进行Mock完成两两联调。所以两两联调并不一定是真实的联调,需要所有模块完成后进行系统整体联调。
联调用例评审后,项目测试负责人就可以汇总项目整体联调用例了。项目的联调用例是一种流程性的用例,测试负责人根据项目PRD文档,首先将业务的所有分支流程一一列举汇总。这些流程能够覆盖系统的业务,但是不能确保对每个模块中的分支流程都被覆盖。在了解所有模块的联调用例后,对比汇总的系统分支流程,补充完善整体联调用例。
项目整体联调用例评审后,就可以进入执行联调测试的环节了。首先,各服务提供方和服务消费方模块的测试工程师搭建联调测试环境。需要依赖其它配合的系统时,项目经理协调配合方研发提供环境并通知调用方的测试工程师修改相关配置。
服务提供方测试工程师在准备完联调测试环境后,为了避免整体联调时出现服务不通导致的整体延迟,还需要对自身系统提供的服务进行连通性测试。按照接口测试用例中的主要分支流程执行验证即可。
所有项目涉及模块联调测试环境准备完成并且服务提供方系统连通性测试通过后,就可以执行项目整体联调用例了。一般情况下,如果前期各环节准备充足到了联调测试执行阶段很少出现问题。项目测试负责人按照评审过的联调用例,主导执行即可。执行不通过遇到问题时,涉及的研发定位问题,如果是系统bug或传参问题会及时修改,如果是依赖系统数据问题,双方协调处理。
最后,在进入项目联调执行阶段后,测试负责人每日要对项目的联调情况发送报告,通知所有涉及人员。如果特殊问题严重影响进度,每两小时通报问题解决状况。项目联调日报内容包括:联调用例执行情况、预期完成时间、是否存在风险、阻塞问题描述及解决状况、问题责任人等。
很好奇,就使用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(在整个项目的根目录中),然后当
我有一个围绕一些对象的包装类,我想将这些对象用作散列中的键。包装对象和解包装对象应映射到相同的键。一个简单的例子是这样的: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
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/
我遵循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
我已经构建了一些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
我在app/helpers/sessions_helper.rb中有一个帮助程序文件,其中包含一个方法my_preference,它返回当前登录用户的首选项。我想在集成测试中访问该方法。例如,这样我就可以在测试中使用getuser_path(my_preference)。在其他帖子中,我读到这可以通过在测试文件中包含requiresessions_helper来实现,但我仍然收到错误NameError:undefinedlocalvariableormethod'my_preference'.我做错了什么?require'test_helper'require'sessions_hel
只是想确保我理解了事情。据我目前收集到的信息,Cucumber只是一个“包装器”,或者是一种通过将事物分类为功能和步骤来组织测试的好方法,其中实际的单元测试处于步骤阶段。它允许您根据事物的工作方式组织您的测试。对吗? 最佳答案 有点。它是一种组织测试的方式,但不仅如此。它的行为就像最初的Rails集成测试一样,但更易于使用。这里最大的好处是您的session在整个Scenario中保持透明。关于Cucumber的另一件事是您(应该)从使用您的代码的浏览器或客户端的角度进行测试。如果您愿意,您可以使用步骤来构建对象和设置状态,但通常您
我有:When/^(?:|I)follow"([^"]*)"(?:within"([^"]*)")?$/do|link,selector|with_scope(selector)doclick_link(link)endend我打电话的地方:Background:GivenIamanexistingadminuserWhenIfollow"CLIENTS"我的HTML是这样的:CLIENTS我一直收到这个错误:.F-.F--U-----U(::)failedsteps(::)nolinkwithtitle,idortext'CLIENTS'found(Capybara::Element