Fitnesse 的使用
一,介绍
Fitnesse是一种可以有效提供给软件开发前期各种角色合作的框架。
前端采用wiki界面便于编写case,后端将具体执行可以比较方便的添加各种feature。
前端case和后端feature共同作用起来就可以实现自动化测试。

二,原理
如何使wiki形式的case,驱动后端的class执行具体的代码,是Fitnesse的主要实现,现在存在两种方式

Fit: Framework for Integrated Testing
Fit是采用来控制Fitnesse test table执行的引擎。后台新添加的case需要引用该引擎。
Test table的格式也是来源于Fit。

Slim:Simple List Invocation Method
            instruction list 
+-------------+    o--->     +--------------------+      +----------+       +-----------------------------------------+
| FitNesse |---[socket]-->| SlimServer |----->| Fixtures |------>| SUT(System Under test) | 
+-------------+    <---o     +--------------------+      +----------+       +-----------------------------------------+ 
              response list

1)FitNesse通过命令行的方式触发slim Server
2)Fitnesse随后会发一个命令的list以及期待的结果到SlimServer。
3)然后slimServer会去调用相应的Fixture。

对各语言的支持情况:

三,内部包含的Fixture

Slim: simple list Invocation method

http://fitnesse.org/FitNesse.UserGuide.SliM.SlimProtocol

Fit:http :// fitnesse.org / FitNesse.UserGuide.FitFramework

四,添加Feature
1)Java API
采用Fit模式:
自己新建的fixture需要继承Fit中的一种Fixture

例如:

Package eg;
import fit.ColumnFixture;   
public class Division extends ColumnFixture   
{   
public double numerator;   
public double denominator;   
public double quotient() {   
return numerator/denominator;   
}   
}
在wiki界面上就可以调用

如果采用slim模式:

我们需要添加的fixture:

package fitnesse.slim.test;

import java.util.List;
public class ShouldIBuyMilk {
private int dollars;
private int pints;
private boolean creditCard;

public void setCaseInWallet(int dollars){
this.dollars=dollars;
}
public void setPintsOfMilkRemaining(int pints){
this.pints=pints;
}
public void setCreditCard(String valid){
if(valid == "yes")
creditCard = true;
else
creditCard = false;
}
public String goToStore(){
if (pints==0&&(dollars>2||creditCard))
return "yes";
else
return "no";
}
 public void execute() {  }
 public void reset() {  } 
 public void table(List<List<String>> table) {}

}

添加wiki并执行就是这样的结果:

2)C++的支持:

为了实现对C++测试的支持,Fitnesse存在Fit的C++版本,便于新的C++ feature的加入

我们需要下载CppTestTool,然后在同级目录下建立结构:

比如: addTest-----|-------bin

|-------CppTestTools

|-------include

|-------lib

|-------src

在src中添加我们需要的new feature

一旦触发wiki上的开始按钮,fitnesse就会给FitServer法请求,Fit就会去调用我们新加的这部分feature。

首先是main函数,int main(int argc, char* argv[])
{
 FixtureMaker* maker = new HomeGuardFixtureMaker();
 int status = FitnesseServer::Main(argc, argv, maker);
 return status;
}

在main函数中就会把用大的feature都注册过来

#include <Fit/Platform.h>
#include <Fit/Fit.h>
#include <Fit/Summary.h>
#include <Fit/ResolutionException.h>

#include "MgmtFixtureMaker.h"

#include "addsampletest.h"

#include <iostream>
#include <string>

using namespace std;

HomeGuardFixtureMaker::HomeGuardFixtureMaker()
{
}

HomeGuardFixtureMaker::~HomeGuardFixtureMaker()
{
}

Fixture* HomeGuardFixtureMaker::make(const string& fullName)
{

string name = fullName;
   string libraryName = splitName(fullName).first;
    if (libraryName != fullName)
        name = splitName(fullName).second;

PUBLISH_FIXTURE(Fixture);
    PUBLISH_FIXTURE(ColumnFixture);
    PUBLISH_FIXTURE(ActionFixture);
    PUBLISH_FIXTURE(PrimitiveFixture);
    PUBLISH_FIXTURE(Summary);

// mgmt test
 PUBLISH_FIXTURE(addsampleTest)

throw ResolutionException(name);

return 0;
}

我们的新feature主体,需要用到的方法名,同样需要声明

#include <string>
#include <stdlib.h>
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <map>

#include <Fit/ActionFixture.h>
class addsampleTest : public Fixture
{
public:
    addsampleTest()
 { PUBLISH_ENTER(addsampleTest, std::string, addstring1);
   PUBLISH_ENTER(addsampleTest, std::string, addstring2);
   PUBLISH_ENTER(addsampleTest, std::string, addpath);
   PUBLISH_CHECK(addsampleTest, std::string, runTest);
 }

void addstring1(std::string input){
   string1 = input;   
}
 void addstring2(std::string input){
   string2 = input;
}
void addpath(std::string input){
   path=input;
}
 std::string runTest(){
   string command="";
   command=path+" "+string1+" "+string2+">ll.log";
  
   int tmp = system(command.c_str());
   return "success";
}
private:
   std::string string1;
    std::string string2;
    std::string path;
};

这样wiki界面上就可以直接调用了:

Fitnesse使用相关推荐

  1. 介绍并扩展Fitnesse的测试模块化机制:Scenario

    2019独角兽企业重金招聘Python工程师标准>>> 首先普及一下概念,什么是Fitnesse,听一听.NET版Cucumber的创始人Aslak Hellesøy谈Fitness ...

  2. Fitnesse测试系列--如何设置SetUp文件

    又被抽去做了一段时间的Fitnesse用例的编写,现在case写了几个星期,有点收获,最近会一起整理出来. SetUp 这个页面主要被我用来做环境变量的设置了. 环境变量的设置: !note 这一部分 ...

  3. fitnesse页面增加认证

    一.增加用户认证 1. 只增加一个认证用户:java -jar fitnesse.jar -a username:password 2. 增加多个认证用户(明文密码)     2.1 新建一个pass ...

  4. Fitnesse测试系列--如何做成模块Module供调用

    模块化,增加复用性,提高编写代码的速度,这是我这种懒人天天喜欢想的事情. 可是在Fitnesse里如何模块化测试用例? 转载于:https://blog.51cto.com/rubyisteleano ...

  5. fitnesse - 框架介绍

    fitnesse - 框架介绍 2017-09-29 目录: 1 fitnesse是什么? 2 框架介绍 3 与junit.testng比较,fitnesse教其他框架有什么优势 1 fitnesse ...

  6. php fitnesse,Fitnesse+RestFixture:Web 服务回归测试利器

    摘要:RestFixture 是 Fitnesse 的一个测试 REST 服务的插件,用于调用标准的 http GET/POST 等请求方法,并可以用 XPath 语法和 Javascript 语法检 ...

  7. fitnesse - 安装部署

    fitnesse - 安装部署 2017-09-29 1 先决条件Java环境 确保机器上装了java, java -version 2 安装fitnesse http://fitnesse.org/ ...

  8. 【接口测试】FitNesse中文指南

    原文来自FitNesse官方网站:http://fitnesse.org/FitNesse.UserGuide#introduction 作者:Robert C. Martin, Micah D. M ...

  9. fitnesse 新手入门

    fitnesse是一个自定化测试工具,他能帮助你自动化的实现 验收测试.保证软件的质量. fitness和单元测试的关系是,单元测试保证代码执行没有问题,fitness保证软件能够按照预期实现功能. ...

  10. FitNesse工具

    (一)开源FitNesse Fitnesse是一个wiki server(Wiki指一种超文本系统.这种超文本系统支持面向社群的协作式写作,同时也包括一组支持这种写作的辅助工具.),同时还是一个测试引 ...

最新文章

  1. 我同事说我写代码像写诗
  2. 【MySQL】MySQL的group_concat使用例子
  3. FaaS — Serverless — 实现原理
  4. python一次性读取整个文件-使用Python读取大文件的方法
  5. Java填坑系列之SparseArray
  6. 2011考研英语词汇最佳记忆法 考量你的遗忘曲线
  7. Android Studio Library 模块中 Native 代码进行 debug 的一些坑
  8. 水平输送水汽通量matlab,分享:水汽通量散度
  9. 乙肝相关药物服用信息汇总
  10. react 生命挂钩_如何在GraphQL API中使用React挂钩来管理状态
  11. 插件开发之360 DroidPlugin源码分析(二)Hook机制
  12. dump文件 linux,linux使用MAT分析dump文件
  13. flash代替epcs
  14. 播放最近的人人影视mp4视频出现了所有文字显示不正常的现象,及其解决方法
  15. 每个人都应该了解的金融小知识 -- 利率计算
  16. 用PyTorch完成手写数字识别
  17. java 合并两个有序链表
  18. 文本相似度计算(中英文)详解实战
  19. 计算机图形学——光线追踪(RayTracing)算法
  20. android ios通讯录权限设置,IOS 通讯录的访问和修改的实现

热门文章

  1. 大白话给你讲明白UDS诊断(汽车诊断服务 实例应用图文讲解)(二)
  2. 车载诊断新驱动——远程诊断
  3. 计算机未来职业倾向,计算机专业职业生涯规划书50390.docx
  4. HTTP 请求报文、响应报文格式详解
  5. 什么是监控系统云台?
  6. Tailscale ACL 访问控制策略完全指南!
  7. python 抠图白幕_巧用Python,视频抠图无需绿幕
  8. YOLO9000, Better, Faster, Stronger论文翻译——中文版
  9. 什么性格的人适合做产品经理?
  10. Navicat数据库导入