基于Robot Framework的验收测试驱动开发

A-TDD(Acceptancetest-drivendevelopment)withRobotframework

在了解A-TTD之前,先了解下TTD

测试驱动开发,英文全称Test-DrivenDevelopment,简称TDD,是一种不同于传统软件开发流程的新型的开发方法。它要求在编写某个功能的代码之前先编写测试代码,然后只编写使测试通过的功能代码,通过测试来推动整个开发的进行。这有助于编写简洁可用和高质量的代码,并加速开发过程。

A-TTD(验收测试驱动开发)非常接近T-DD。不同点在于A-TDD强调开发-测试-客户之间的协同,A-TTD是一种协同需求发现方法,利用示例和可自动的测试来明确需求,创建可执行用例方法。


ATTD(验收测试驱动开发)是敏捷和scrum经常采用的实践方法。框图如下:

wKiom1X8-bTDpRAqAACC5Q_eU9o613.jpg


1.Discusstherequirementinaworkshop(在专题讨论会中讨论需求)

2.Developthemconcurrentlyduringtheiteration(在迭代中并行开发)

3.Delivertheresulttothestakeholderforacceptance.(提交结果给利益相关方进行验收)


Discuss(讨论):

    • paticipants:productowner,relatedstakeholder,developer

如何讨论:假象系统完成,你会如何使用系统并期待它能实现什么。

研讨会的重点是讨论并发现需求,而不是实际的测试。

Develop(开发):

将示例提取成测试。

需求实现活动的开发(包括testlibrariestables

实现需求通过测试。

Deliver(交付):

当测试通过后,需求会被产品负责人和其他利益相关方评审,这可能导致新的需求产生或现有测试的变化

下图是一个更为详细的A-TDD框架图


wKioL1X8_GWQNjRDAAOrpbTx5Lk966.jpg


A-TDD如何mapScrum迭代开发

wKiom1X8-nqwgZ1ZAAFhj7r2qR8743.jpg

讨论:在具体的Sprint计划之前,团队,产品负责人,相关利益方需要在专题讨论会中澄清需求。


并行开发:在迭代开发的过程中,实现需求的开发,验证实现的测试需要在sprintbacklog中计划


交付验收:付基于需求的产品和验收测试的case给相关利益方并组织Sprintreview讨论。




A-TDD例子示范(ATTDwithRobotFramework


Robot背景:RobotFramework是一个基于关键字驱动的自动化测试框架。具体信息参见

www.robotframework.org


现有一个供应商展销会的信息查询系统,通过该系统参观者可以用它来查询下面的信息:

  • 我在哪里可以找到供应商X的展销摊位?

  • 我怎么才能到达那个地方?

  • 最近的餐厅在哪里?

  • 其他参观者对本次展销会的评价。


案例一:供应商列表


一:需求澄清(产生具体的示例)


客户:需要把所有的供应商名单制作成一份“好的表格”


开发:能举得例子吗?什么是一份“好的表格”


客户:下面是一个例子:

wKioL1X9APuhTxZqAAB-SB1AVqI566.jpg

讨论:发现假如有微小的不同,将会发生重复的输入(比如相同的供应商,不同的展位等)。


开发:数据库中什么样数据可以导出一份“好的供应商列表”


客户:


wKioL1X9AU7DEBOsAADnEhs7_0Q673.jpg


从上面的表格可以发现,相同的供应商由于展位信息不同,有美有logo,会存在一些重复。



二.需求示例提取成Robotframework的测试用例。

这里简单介绍下Robotframework,具体参见www.robotframework.org

Robotframework包含4个表格:

  • 测试用例表:包含实际的测试用例,表头是“TestCase

  • 关键字表:包含底层的用户关键字,这些关键字组成了测试用例的结构,表头是Keyword或者是“UserKeyword

  • 设置表:允许引用文件,lib.表头是“setting”或者“settings

  • 变量表:声明变量,表头是“Variable”或者“Variables


下面是Robotframwork的调用过程:

wKioL1X9AZPQpxt0AAENwJrwjxk531.jpg


测试用例和用户关键字是填在RobotFramework里面的,Framework调用testlibraries,它再调用待测系统。


现在从示例中抽取测试用例。


wKiom1X8_9TSO-dxAAKTdYqqGZA698.jpg


测试用例执行,发现keywordsStandinput,Isstandoutput,Hasnoextrastandsareundefined.


下面我用userkeyword实现Isstandoutput,Hasnoextrastands


wKioL1X9AmHxk-urAAHaiklfICg981.jpg


再次跑测试用例发现下面keyword没有定义:Standout,Getcurrentlog,Getcurrentname,Getcurrentplace,Standsleft.而这些关键字将会在testlibrary里面实现。


当前待测系统是用C语言写的,可以通过用户接口来调用或者直接调用。该案例采用直接调用(使用ctypesforeignlibrary)。testlibrary代码如下:


wKioL1X9Av_Tm9dqAALXI12nsdk274.jpg

结论:


A-TTD是一个相互协作的需求澄清工具,它使用可执行的用例去探索需求。需求-->需求例子表格-->Robot表格-->可执行用例(表格表述)


RobotFramework是一个基于A-TDD思想的测试框架。它采用表格化的结构来表述一个用例,再通过testlibraries去实现用例的可执行话。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


什么是设计模式一套被反复使用、多数人知晓的、经过分类编目的、代码 设计经验 的总结;使用设计模式是为了 可重用 代码、让代码 更容易 被他人理解、保证代码 可靠性;设计模式使代码编制  真正工程化;设计模式使软件工程的 基石脉络, 如同大厦的结构一样;并不直接用来完成代码的编写,而是 描述 在各种不同情况下,要怎么解决问题的一种方案;能使不稳定依赖于相对稳定、具体依赖于相对抽象,避免引
单一职责原则定义(Single Responsibility Principle,SRP)一个对象应该只包含 单一的职责,并且该职责被完整地封装在一个类中。Every  Object should have  a single responsibility, and that responsibility should be entirely encapsulated by t
动态代理和CGLib代理分不清吗,看看这篇文章,写的非常好,强烈推荐。原文截图*************************************************************************************************************************原文文本************
适配器模式将一个类的接口转换成客户期望的另一个接口,使得原本接口不兼容的类可以相互合作。
策略模式定义了一系列算法族,并封装在类中,它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
设计模式讲的是如何编写可扩展、可维护、可读的高质量代码,它是针对软件开发中经常遇到的一些设计问题,总结出来的一套通用的解决方案。
模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中,使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
迭代器模式提供了一种方法,用于遍历集合对象中的元素,而又不暴露其内部的细节。
外观模式又叫门面模式,它提供了一个统一的(高层)接口,用来访问子系统中的一群接口,使得子系统更容易使用。
单例模式(Singleton Design Pattern)保证一个类只能有一个实例,并提供一个全局访问点。
组合模式可以将对象组合成树形结构来表示“整体-部分”的层次结构,使得客户可以用一致的方式处理个别对象和对象组合。
装饰者模式能够更灵活的,动态的给对象添加其它功能,而不需要修改任何现有的底层代码。
观察者模式(Observer Design Pattern)定义了对象之间的一对多依赖,当对象状态改变的时候,所有依赖者都会自动收到通知。
代理模式为对象提供一个代理,来控制对该对象的访问。代理模式在不改变原始类代码的情况下,通过引入代理类来给原始类附加功能。
工厂模式(Factory Design Pattern)可细分为三种,分别是简单工厂,工厂方法和抽象工厂,它们都是为了更好的创建对象。
状态模式允许对象在内部状态改变时,改变它的行为,对象看起来好像改变了它的类。
命令模式将请求封装为对象,能够支持请求的排队执行、记录日志、撤销等功能。
备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。 基本介绍 **意图:**在不破坏封装性的前提下,捕获一个对象的内部状态,并在该
顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为
享元模式(Flyweight Pattern)(轻量级)(共享元素)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结