frisby用例动态链

frisby是一个nodejs的rest api测试框架。一般来讲,因为nodejs是众所周知的异步编程模式,api以.after()方法一步步走:

frisby.create(‘login‘)
  .get(‘http://httpbin.org/login‘,{usernmae:xxx,password:xxx})
  after(function(err, res, body) {
    frisby.create(‘logout‘)
      .get(‘http://httpbin.org/logout‘)
    .toss()
  });
.toss()

在一些较为复杂的测试流程中,需要根据上一部的返回动态决定下一步需要做什么。比如:

frisby.create(‘login‘)
  .get(‘http://httpbin.org/login‘,{usernmae:xxx,password:xxx})
  afterJSON(function(rsp) {
    if(rsp.ok){
       frisby.create(‘logout‘)
         .get(‘http://httpbin.org/logout‘)
       .toss()
    }else{
       frisby.create(‘login again‘)
         .get(‘http://httpbin.org/login‘,{username:xxx,password:xxxx})
       .toss()
    }
  });
.toss()

上面的例子,如果第二个frisby toss的时候还有更多的after操作,代码会非常难组织。为此写了一个简单的pipeLine函数用于将多个frisby串起来。

function toss(f, msg){
    return function(){
        //console.log(‘toss ‘ + msg);
        f.toss();
    }
}

//frisby.after() just add a function to array and invoke them when .toss()
function pipeLine(works){
    for(var i = 0; i < works.length - 1; i++){
        works[i].after(toss(works[i+1], ‘‘+(i+1)));
    }
    return works[0];
}

var testsPipline = function() {
    var f1 = frisby.create(‘test 1‘)
        .get(‘http://192.168.5.120:8080/static/3ef9f60c/images/title.png‘);
    var f2 = frisby.create(‘test 2‘)
        .get(‘http://192.168.5.120:8080/static/3ef9f60c/images/title.png‘);
    var f3 = frisby.create(‘test 3‘)
        .get(‘http://192.168.5.120:8080/static/3ef9f60c/images/title.png‘);
    toss(pipeLine([f1, f2, f3]), 0)();
    toss(pipeLine([f2,f3]), 0)();
}

可以很方便的重用预定义的frisby测试过程。

时间: 2024-11-01 12:38:11

frisby用例动态链的相关文章

动态链式表示与实现

#define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define MYOVERFLOW -2 typedef int Status; typedef int Elemtype;//用指定标识符Elemtype代表int类型,顾名思义表示元素类型为int型 typedef struct LNode{ Elemtype data; LNode *next; }*LinkList; Sta

第79讲:单例深入讲解及单例背后的链式表达式

今天我们来看一下scala中的单例及单例的链式表达式 让我们通过代码进行分析. object Scalaclass Java1class JVM{def method1:this.type=this}class JVM_Language extends JVM{def method2:this.type=this}object Singleton_type{def main(args:Array[String]){println(Scala.getClass)println(typeOf[Sca

VC6 鼠标钩子 最简单样例

Windows系统是建立在事件驱动的机制上的,说穿了就是整个系统都是通过消息的传递来实现的.而钩子是Windows系统中非常重要的系统接口,用它能够截获并处理送给其它应用程序的消息,来完毕普通应用程序难以实现的功能.钩子能够监视系统或进程中的各种事件消息,截获发往目标窗体的消息并进行处理.这样,我们就能够在系统中安装自己定义的钩子,监视系统中特定事件的发生,完毕特定的功能,比方截获键盘.鼠标的输入,屏幕取词,日志监视等等.可见,利用钩子能够实现很多特殊而实用的功能.因此,对于高级编程人员来说,掌

C++中的链式操作

代码编译环境:Windows7 32bits+VS2012. 1.什么是链式操作 链式操作是利用运算符进行的连续运算(操作).它的特点是在一条语句中出现两个或者两个以上相同的操作符,如连续的赋值操作.连续的输入操作.连续的输出操作.连续的相加操作等都是链式操作的样例. 链式操一定涉及到结合律的问题.比如链式操作赋值操作满足右结合律,即a=b=c被解释成a=(b=c).而链式输出操作原则满足左结合律,即cout<<a<<b被解释成(cout<<a)<<b,基本

链式生产环境装配

链式生产环节装配: /// <summary> /// 数据,它会反复接收工厂里各个环节的加工 /// </summary> public class DataStream { public string Status { get; set; } } /// <summary> /// 节点抽象类,模拟各种机器 /// </summary> /// <typeparam name="T"></typeparam>

MFC规则动态库

一.概述 "是MFC的"意味着可以在这种DLL的内部调用MFC类库中的内容:"是规则的"意味着它不同于MFC扩展DLL,在MFC规则DLL的内部虽然可以调用MFC类库,但是其与应用程序的接口不能是MFC,而MFC扩展DLL与应用程序的接口可以是MFC,可以从MFC扩展DLL中导出一个MFC类的派生类:规则DLL能够被所有支持DLL技术的语言所编写的应用程序调用,当然也包括使用MFC的应用程序. 二.分类 MFC规则动态库分为: ①作为静态链接的MFC规则DLL 该D

c/c++ 直接使用动态库 dlopen

把各个版本编译成动态库,××.so ,提供统一的接口进行调用.这里使用的工具是dlxx系列函数 dlopen  void *dlopen(const char *filename, int flag);    装载动态库 dlclose int dlclose(void *handle); dlerror char *dlerror(void); 返回可读字符串 dladdr dlsym void *dlsym(void *handle, const char *symbol); dlvsym

怎么样使用Nodejs 的 c++ module 链接到 OpenSSL

事情的起因是这样的, 因为某些原因, 最近在写 Nodejs 的 c++ module, 然后在js这边调用.  网络通信自然离不开ssl, 于是需要链接到Openssl的库. 我们本来的期望是,需要用户安装有Openssl的运行库, 然后我们的c++ module 动态链接到Openssl的so库上来运行. 起初一切看起来还不错,直到我们发现这个openssl的函数不能工作: PKCS7_sign() PKCS7_sign ( ) 我们发现: 如果我们的 c++ 模块与Openssl库动态链接

php程序设计经典300例,第39-44例

第39例php生成不重复随机数 <?phpheader("Content-type:text/html;charset=utf-8");$num=5;//要生产多少个随机数$start=0;$end=100;$connt=0;while($connt<$num)   {    $a[]=rand($start,$end);//产生随机数    $ary=array_unique($a);//遍历数组$a,如有相同的值则剔除该值    $connt=count($ary);/