Fitnesse使用
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
例如:
![](/assets/blank.gif)
如果采用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使用相关推荐
- 介绍并扩展Fitnesse的测试模块化机制:Scenario
2019独角兽企业重金招聘Python工程师标准>>> 首先普及一下概念,什么是Fitnesse,听一听.NET版Cucumber的创始人Aslak Hellesøy谈Fitness ...
- Fitnesse测试系列--如何设置SetUp文件
又被抽去做了一段时间的Fitnesse用例的编写,现在case写了几个星期,有点收获,最近会一起整理出来. SetUp 这个页面主要被我用来做环境变量的设置了. 环境变量的设置: !note 这一部分 ...
- fitnesse页面增加认证
一.增加用户认证 1. 只增加一个认证用户:java -jar fitnesse.jar -a username:password 2. 增加多个认证用户(明文密码) 2.1 新建一个pass ...
- Fitnesse测试系列--如何做成模块Module供调用
模块化,增加复用性,提高编写代码的速度,这是我这种懒人天天喜欢想的事情. 可是在Fitnesse里如何模块化测试用例? 转载于:https://blog.51cto.com/rubyisteleano ...
- fitnesse - 框架介绍
fitnesse - 框架介绍 2017-09-29 目录: 1 fitnesse是什么? 2 框架介绍 3 与junit.testng比较,fitnesse教其他框架有什么优势 1 fitnesse ...
- php fitnesse,Fitnesse+RestFixture:Web 服务回归测试利器
摘要:RestFixture 是 Fitnesse 的一个测试 REST 服务的插件,用于调用标准的 http GET/POST 等请求方法,并可以用 XPath 语法和 Javascript 语法检 ...
- fitnesse - 安装部署
fitnesse - 安装部署 2017-09-29 1 先决条件Java环境 确保机器上装了java, java -version 2 安装fitnesse http://fitnesse.org/ ...
- 【接口测试】FitNesse中文指南
原文来自FitNesse官方网站:http://fitnesse.org/FitNesse.UserGuide#introduction 作者:Robert C. Martin, Micah D. M ...
- fitnesse 新手入门
fitnesse是一个自定化测试工具,他能帮助你自动化的实现 验收测试.保证软件的质量. fitness和单元测试的关系是,单元测试保证代码执行没有问题,fitness保证软件能够按照预期实现功能. ...
- FitNesse工具
(一)开源FitNesse Fitnesse是一个wiki server(Wiki指一种超文本系统.这种超文本系统支持面向社群的协作式写作,同时也包括一组支持这种写作的辅助工具.),同时还是一个测试引 ...
最新文章
- 我同事说我写代码像写诗
- 【MySQL】MySQL的group_concat使用例子
- FaaS — Serverless — 实现原理
- python一次性读取整个文件-使用Python读取大文件的方法
- Java填坑系列之SparseArray
- 2011考研英语词汇最佳记忆法 考量你的遗忘曲线
- Android Studio Library 模块中 Native 代码进行 debug 的一些坑
- 水平输送水汽通量matlab,分享:水汽通量散度
- 乙肝相关药物服用信息汇总
- react 生命挂钩_如何在GraphQL API中使用React挂钩来管理状态
- 插件开发之360 DroidPlugin源码分析(二)Hook机制
- dump文件 linux,linux使用MAT分析dump文件
- flash代替epcs
- 播放最近的人人影视mp4视频出现了所有文字显示不正常的现象,及其解决方法
- 每个人都应该了解的金融小知识 -- 利率计算
- 用PyTorch完成手写数字识别
- java 合并两个有序链表
- 文本相似度计算(中英文)详解实战
- 计算机图形学——光线追踪(RayTracing)算法
- android ios通讯录权限设置,IOS 通讯录的访问和修改的实现