MockServer的测试思想与实现(下篇)

发表于:2012-10-12 11:08

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:51Testing软件测试网采编

  接《MockServer的测试思想与实现(上篇)

  MockServer的技术实现

  目前,笔者已经用Python实现了一个基于socket接口的Mock Server并在测试中进行了一定的应用,实现中利用了一些Python的语言特性、一点RPC技术和一点DSL的技巧。

  一个CASE

  下面先看一个实际的CASE,CASE加入了许额外的注释,以解释这段代码的意义(CASE的格式为一种可嵌入Python代码的DSL脚本)

#定义用例集
CASE DS返回结果异常测试
BEGIN
    #定义用例的公共数据,后面的用例中都可以引用该数据,且互不干扰
 GROUP_ID=55
    #定义用例的公共入口动作,相关CASE的MAIN函数
 __exec__=BEGIN
  PYTHON mock_execute(r"""${MOCK_DATA}""".strip()) #设置MockServer的行为
  PYTHON request(host='${HOST}',port=${PORT},id=${MEDIA_ID},group=${GROUP_ID},time=${TIME},type='${TYPE}',cached=${CACHED},cache_flag='${CACHE_FLAG}') #向被测模块发送一条请求
 END
    #定义用例
 CASE 测试 1
 BEGIN
       #定义用例数据,描述MockServer的行为
  MOCK_DATA=BEGIN
   Mock.on(
    large_than(192),     #当接收的数据长度大于192字节时(一个正常请求的最小长度)
   ).do(
    send_back(           #返回下面的数据包
     am_head_t(1,0,(c_uint32*2)(100,100),sizeof(ds_qres_head_t)+12+32),
     ds_qres_head_t(0,1,1,32,12,),
     2,4,
     "show",
     47,3,4,12,
     123,"hello,world!"
    ),
    clear_buf(),         #清除接收缓冲区
    clear_mock(),        #请除MockServer的行为
   )
  END
 END
    #定义用例
 CASE 测试 2
 BEGIN
    ……
    ……
    END
    ……
    ……
    ……
    ……
END

  上面的代码中,request的函数的功能是将各参数拼装成一个HTTP请求发送给被测系统并接收返回的结果。而mock_execute也就是对 Mock Server的调用了。

  下面就看看这个Mock Server是如让上面的CASE得以运行的

  核心代码

  首先看Mock Server中的主体代码,该代码基于Python中的ThreadingTCPServer,如下:

while not self.stop and not self.server.stop:
    buf=self.sock.recv(4096)
    if not buf:
        time.sleep(0.1)
    self.buffer+=buf
    for mock in MockRequestHandler.mocks:
        if mock(self):
            break

41/41234>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号