moco 模拟各种接口返回测试场景

本文主要介绍如何使用moco模拟测试中不容易实现的测试场景,例如:返回特定参数,接口网络延时,页面重定向等

带参数的请求

请求参数写在”queries”中

1
2
3
4
5
6
7
8
9
10
[{ 
 "request" : { 
    "uri" : "/user/getUser",
    "queries": { "name":"xcqc" }
  },
  "response" : {
       "text" : "Hey. I'm xcqc" 
     }  
}
]

正则表达式

Moco支持正则匹配,请求url和请求参数都支持正则匹配

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[{ 
 "request" : { 
    "uri" : "/user/getUser",
     "queries": { "name":
	 {
	 "match":"xc\\w+"
	 }
	 } 
  },
  "response" : {
       "text" : "Hey. I'm xcqc" 
     }  
}
]

支持各种请求方法

moco支持POST , GET , PUT , DELETE等方法

1
2
3
4
5
6
7
8
9
10
11
12
13
[{ 
 "request" : { 
    "method" : "post",
    "uri" : "/user/getUser",
     "forms": { "name":"xcqc"
	
	 } 
  },
  "response" : {
       "text" : "Hey. I'm xcqc" 
     }  
}
]

支持特定的头和返回状态码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[{ 
 "request" : { 
    "method" : "post",
	"headers" : {
        "content-type" : "application/json"
      }, 
    "uri" : "/user/getUser" 
  },
  "response" : {
     "status":200,
       "text" : "Hey. I'm xcqc" 
     }  
}
]

返回参数为json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[{ 
 "request" : { 
    "method" : "post",
	"headers" : {
        "content-type" : "application/json"
      }, 
    "uri" : "/user/getUser" 
  },
  "response" : {
     "status":200,
       "json" : 
	   {"name":"Hey. I'm xcqc" }
     }  
}
]

页面重定向

1
2
3
4
5
[{ 
  "request" : { "uri" : "/redirect" }, 
  "redirectTo" : "http://www.baidu.com" 
  }
]

网络延时

可以自定义网络延迟时间

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[{ 
 "request" : { 
    "method" : "post",
	"headers" : {
        "content-type" : "application/json"
      }, 
    "uri" : "/user/getUser" 
  },
  "response" : {
       "json" : 
	   {"name":"Hey. I'm xcqc" },
	    "latency": {
          "duration": 5,
          "unit": "second"
        }
	   
     }  
}
]

支持event事件

有时我们请求一个接口时,还需要请求另一个接口才能完成

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[{
    "request": {
        "uri" : "/event"
    },
    "response": {
        "text": "event"
    },
    "on": {
        "complete": {
            "get" : {
                "url" : "http://www.baidu.com"
            }
        }
    }
}
]

支持分模块

如果在一个测试流程中需要请求多个接口,而这些接口的moco分布在不同配置文件中,moco支持配置全局文件,只需要将需要请求的文件引入到全局文件中即可

1
2
3
4
5
6
7
8
9
10
11
[
    {
        "include" : "memberlogin.json"
    },
    {
        "include" : "confirmfree.json"
    },
	{
        "include" : "type.json"
    }
]

启动全局文件的命令:java -jar moco-runner-0.11.0-standalone.jar http -p 12345 -g global.json

支持请求body为xml

1
2
3
4
5
6
7
8
9
10
11
12
13
[{
        "request": {
            "uri" : "/event",
			"text":{
			"xml":"<request><parameters><id>1</id></parameters></request>"
			}	
        },
        "response": {
            "text": "event"
        }
      
    }
]

支持特定http版本

1
2
3
4
5
6
7
8
9
10
[{
        "request": {
            "uri" : "/event",
			"version":"HTTP/1.1"	
        },
        "response": {
            "text": "event"
        }
    }
]

支持请求body为json

1
2
3
4
5
6
7
8
9
10
11
[{
        "request": {
            "uri" : "/event",
	       "json":{"foo":"bar"}	
        },
        "response": {
            "text": "event"
        }
      
    }
]