测试即文档:自动化测试框架Concordion

简介:



如果你是那种极不情愿写文档的程序员,那么,你并不孤单。然而当你的上司在检查你的工作时,他才不想看你那一堆一堆的代码,他需要看文档,这时的你需要的是Concordion——一个符合Specification By Example的自动化测试框架,通过自然语言来描述软件功能,即项目中所有成员都能看懂的而又具备测试功能的html文档。

  (一)Concordion的工作原理

  简单的说,Concordion测试只是对JUnit的扩展,但是它可以从你写好的测试文档(html)中读取测试数据,通过传统的JUnit来跑测试,并将测试结果输出为具有红绿标记(表示失败或成功)的html文档(基于原测试文档)。

   在上图中,Specification即为我们写的html测试文档,与普通的html文档不同的是,我们需要在其中加入一些名为concordion 的标签,浏览器将忽略这些标签,但Concordion用这些标签来执行测试指令,比如调用Fixture中的测试函数等。Fixture为继承自 ConcordionTestCase(最终继承自JUnit测试类)的测试用例,这些测试用例将调用我们自己所开发的功能代码。

  (二)Concordion的Hello World

  下面就通过一个简单的Hello World例子来演示Concordion。

  下载Concordion和其所依赖的包

  首先写一个html测试用例HelloWorld.html:

<html xmlns:concordion=http://www.concordion.org/2007/concordion>
    <body>
        <p>Should print:</p>
        <p concordion:assertEquals="sayHello()">HelloWorld</p>
    </body>
</html>

  此html文档可以通过浏览器正常打开,由于浏览器并不知道concordion标签,故将其忽略:

   可以看到,以上加入的concordion标签的html测试文档和普通的html文档并无区别,同时我们也看到在concordion标签后有一个 sayHello()函数调用,此函数从什么地方来呢——这就是Concordion的约定,要求在该html文档的同目录下有一个名为 HelloWorldTest.java的测试用例类存在,并且该类有一个测试函数名为sayHello()。约定规则为:如果html文档名为 Foo.html,那么测试用例类应该为FooTest.java。此时Concordion便通过名字匹配去找名为HelloWorldTest类的 sayHello()函数并调用之。

  我们还注意到,在concordion标签后有assertEquals,此时Concordion将把helloWorld()函数的输出与之后的“HelloWorld”字符串相比,如果相等,测试成功,否则失败。

  接下来实现HelloWorldTest类,在HelloWorld.html同目下创建HelloWorldTest.java文件:

package com.thoughtworks.davenkin.concordion;

import org.concordion.integration.junit3.ConcordionTestCase;

public class HelloWorldTest extends ConcordionTestCase {

    public String sayHello()
      {
           return new HelloWorld().sayHelloWorld();
      }
}

  在HelloWorldTest.java文件中实例化了一个HelloWorld对象,并调用其sayHelloWorld()方法,于是写一个需要测试的HelloWorld类如下:

package com.thoughtworks.davenkin.concordion;

public class HelloWorld
{
     public String sayHelloWorld()
       {
            return "HelloWorld";
       } 
}

  最终生成的工程目录结构如下:

  (三)编译并运行测试

  打开终端,将目录切换到 concordion(这是笔者为此helloworld创建的工程根目录,请不要与上文提到的concordion混淆)下,编译:

javac -cp lib/*:src:test test/com/thoughtworks/davenkin/concordion/HelloWorldTest.java

  用JUnit运行测试:

java -cp lib/*:src:test org.junit.runner.JUnitCore com.thoughtworks.davenkin.concordion.HelloWorldTest

  运行结果如下:

JUnit version 4.8.2
./var/folders/wM/wMUC8-0FEsq-MMkTzdzYA++++TI/-Tmp-/concordion/com/thoughtworks/davenkin/concordion/HelloWorld.html
Successes: 1, Failures: 0

Time: 0.307

OK (1 test)

  运行成功,并且显示测试输出的html文件的全路径名称(此时应该去掉最前面的那个点"."):

/var/folders/wM/wMUC8-0FEsq-MMkTzdzYA++++TI/-Tmp-/concordion/com/thoughtworks/davenkin/concordion/HelloWorld.html

  打开该文件:

  测试运行成功。


本文出自seven的测试人生公众号最新内容请见作者的GitHub页:http://qaseven.github.io/

目录
相关文章
|
19天前
|
人工智能 搜索推荐 Serverless
使用金庸的著作,来测试阿里通义千问最新开放的长文档处理功能
使用金庸的著作,来测试阿里通义千问最新开放的长文档处理功能
42 7
使用金庸的著作,来测试阿里通义千问最新开放的长文档处理功能
|
3天前
|
Web App开发 JavaScript 前端开发
深入理解自动化测试框架Selenium的设计与实现
【4月更文挑战第20天】 在软件测试领域,自动化测试已成为提升测试效率和确保产品质量的关键手段。Selenium作为一款广泛使用的开源自动化测试框架,其设计精巧且功能强大,为Web应用提供了一种灵活、高效的测试解决方案。本文将深入探讨Selenium的核心架构与实现细节,解析其如何通过模拟用户操作来执行测试用例,以及它如何适应不断变化的Web技术标准。通过对Selenium内部机制的剖析,旨在帮助测试工程师更好地掌握该工具,并在测试实践中发挥其最大效能。
|
5天前
|
监控 测试技术 数据安全/隐私保护
如何将代理IP集成到自动化测试框架中?
如何将代理IP集成到自动化测试框架中?
|
7天前
|
敏捷开发 监控 前端开发
深入理解自动化测试框架Selenium的架构与实践
【4月更文挑战第16天】 在现代软件开发过程中,自动化测试已成为确保产品质量和加快迭代速度的关键手段。Selenium作为一种广泛使用的自动化测试工具,其开源、跨平台的特性使得它成为业界的首选之一。本文旨在剖析Selenium的核心架构,并结合实际案例探讨其在复杂Web应用测试中的高效实践方法。通过详细解读Selenium组件间的交互机制以及如何优化测试脚本,我们希望为读者提供深入理解Selenium并有效运用于日常测试工作的参考。
14 1
|
8天前
|
自然语言处理 测试技术 API
深入理解自动化测试框架Selenium的设计理念与实践
【4月更文挑战第15天】 在现代软件开发过程中,自动化测试已成为确保产品质量和加速迭代的关键手段。Selenium作为一种广泛使用的自动化测试框架,提供了对多种浏览器和平台的支持,极大地促进了Web应用的功能测试。本文旨在剖析Selenium的核心设计理念,探讨其在实际项目中的应用,并指出常见的误区及最佳实践,以期帮助测试工程师更高效地利用Selenium进行测试工作。
|
9天前
|
监控 测试技术 API
深入理解自动化测试框架Selenium的设计与实现
【4月更文挑战第14天】在软件开发过程中,自动化测试是确保代码质量、减少人工重复劳动的关键步骤。Selenium作为一款广泛使用的自动化测试工具,提供了对多种浏览器和操作系统的支持。本文将探讨Selenium的核心组件及其架构设计,分析其如何通过WebDriver与浏览器交互,以及它如何支持多种编程语言进行脚本编写。同时,我们还将讨论Selenium Grid的作用以及它如何实现并行测试,以缩短测试周期并提高测试效率。
174 59
|
11天前
|
Web App开发 前端开发 Java
框架分析(11)-测试框架
框架分析(11)-测试框架
|
13天前
|
敏捷开发 监控 测试技术
深入探索软件测试中的自动化边界
【4月更文挑战第10天】 在现代软件开发过程中,自动化测试已成为提升效率、确保质量的关键手段。然而,随着技术的不断进步和项目需求的多样化,确定自动化的合理边界成为测试工程师面临的重要问题。本文将探讨如何界定自动化测试的有效范围,包括成本效益分析、风险评估与技术选型等方面,并提出一种基于风险和回报权衡的自动化测试策略。
11 0
|
16天前
|
测试技术
深入理解软件测试中的自动化边界
【4月更文挑战第7天】 在追求快速交付和质量保证的双重压力下,软件测试领域正经历着从手工到自动化的转变。本文旨在探讨自动化测试的有效边界,即哪些场景适合自动化,以及如何界定这些边界以优化测试策略。通过对自动化测试优势、挑战及适用性的分析,文章为读者提供了一个清晰的框架,用于评估和实施自动化测试。
|
18天前
|
jenkins 测试技术 持续交付
软件测试|docker搭建Jenkins+Python+allure自动化测试环境
通过以上步骤,你可以在Docker中搭建起Jenkins自动化测试环境,实现Python测试的自动化执行和Allure报告生成。 买CN2云服务器,免备案服务器,高防服务器,就选蓝易云。百度搜索:蓝易云
38 6

热门文章

最新文章