电脑软件超时、MOCK测试方案

大家好,我是谭叔。

今天,谭叔跟大家分享我在测试电脑软件(程序)时,模拟超时环境的N种尝试,以及电脑软件(程序)的MOCK测试方案。

超时环境

在日常测试工作中,弱网环境、超时请求等异常测试,是必不可少的,也是保证系统稳定性的重要环节。

比如有一些测试需求是这样的:

1、在一些特殊的测试场景中,需要模拟请求某服务超时,以查看软件是否能正常工作

2、有些场景,需要服务器返回某特定值,而这个特定值在异常情况下才会有(类似需要mock环境)

这里,谭叔推荐几种测试方法。

方法一:修改hosts

将本机hosts修改为一个无效的ip地址,以模拟超时。

image-20210406105731699

优点:操作简单

缺点:仅能验证无法请求某服务的场景,无法验证某服务不可用的场景

方法二:停服

顾名思义,将测试环境的后端服务停掉。

优点:可以模拟真实的超时场景

缺点:会造成服务不可用,影响其他测试 or 开发的工作

方法三:路由器限速

顾名思义,搞一台wifi路由器,在路由器后台设置网速。

电脑软件超时、MOCK测试方案_第1张图片

优点:限制wifi速度,操作简单

缺点

1、无网卡的台式机无法使用

2、路由器限速最低0.01Mbps/s,即1.25kb/s,无法达到Byte级别,当请求体很小时,仍旧无法模拟超时

方法三:使用NetLimiter4

NetLimiter4是一款简单实用、方便易用的网络流量监控软件,可以限制程序的上下行网速。

NetLimiter4安装包(破解版):http://www.testtalking.com/#/data/data 【测试工具-NetLimiter4】

电脑软件超时、MOCK测试方案_第2张图片

优点

1、多版本可用(winXP、win7、win10),操作简单、使用方便

2、可以限制电脑软件的上传和下载速度,且能达到Byte/s级别

缺点

网速限制全局有效,当该软件有其他ip地址+端口的请求时,会将该请求同时限制。无法模拟单个接口的超时场景。

电脑软件超时、MOCK测试方案_第3张图片

方法五(推荐):Proxifier + Fiddler

Proxifer是一个socks5客户端,可以让不支持通过代理服务器工作的程序通过HTTPS或SOCKS代理。

Proxifier安装包:http://www.testtalking.com/#/data/data 【测试工具-Proxifier】

Fiddler是一款代理抓包软件(测试人应该都知道)。

01 实现原理

一般的PC客户端不能设置代理,因此只用Fiddler检测不到数据,需要配合Proxifier使用。Proxifier负责把所有的请求发给Fiddler,再在Fiddler上分析客户端请求,并利用Fiddler一些强大的功能,如打断点,篡改请求或者响应内容等来模拟我们需要的测试场景。

02 配置代理

如图,配置Proxifier的代理服务器和代理规则

电脑软件超时、MOCK测试方案_第4张图片

电脑软件超时、MOCK测试方案_第5张图片

电脑软件超时、MOCK测试方案_第6张图片

使用方法

同Fiddler使用方法类似。

不会用Fiddler?请移步:http://testtalking.com/#/project/fiddler

①打断点进行调试,模拟超时

请求前断点(before response): bpu testgw.xxxx.com

响应后断点(after requests): bpafter testgw.xxxx.com

比如:命令行输入bpu testgw.xxxx.com

即,程序请求testgw.xxxx.com时,请求不会发到服务端,截留在Fiddler里,任君操作。

比如:命令行输入bpuafter testgw.xxxx.com

即,请求可以达到服务端,拿到响应,但可通过Fiddler篡改响应,将错误的超时响应返回给程序,以观察程序对该异常的处理情况。

{"code":"GW40000","msg":"服务超时,请稍后再试~(GW40000)","sourceMsg":"服务超时,请稍后再试~","data":null,"success":false,"breaker":false}

②模拟弱网

如果要限制网速来模拟弱网,可以不打断点,通过修改fiddler配置的方式实现。

电脑软件超时、MOCK测试方案_第7张图片

搜索m_SimulateModem

        if (m_SimulateModem) {
            // Delay sends by 300ms per KB uploaded.
            oSession["request-trickle-delay"] = "500"; 
            // Delay receives by 150ms per KB downloaded.
            oSession["response-trickle-delay"] = "500"; 
        }

        if (m_DisableCaching) {
            oSession.oRequest.headers.Remove("If-None-Match");
            oSession.oRequest.headers.Remove("If-Modified-Since");
            oSession.oRequest["Pragma"] = "no-cache";
        }

电脑软件超时、MOCK测试方案_第8张图片

根据需求自行修改:上传1KB需要300ms,转化一下:1Kb/0.3s = 10/3=3.3(KB/s)

修改后,点击保存,并勾选生效

电脑软件超时、MOCK测试方案_第9张图片

注意事项

01 proxifier默认占用8888端口,如果proxifier不可用,无法连接127.0.0.1:8888,需检查端口是否被占用。比如jupyter notebook服务会占用8888端口

02 使用NetLimiter4限速后,关闭NetLimiter4前,记得去勾选,否则会影响程序正常使用

MOCK方案

步骤五推荐的Fiddler+Proxifier给电脑软件打前后断点,可以模拟一些异常场景。

但是,如果接口的超时时间较短,使用此方法便捉襟见肘了,可能你还来不及篡改响应,流程就已走完,无法构造异常响应。

因此,我们需要引入MOCK测试。

什么是MOCK测试?

在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。比如

进行接口测试时:

  • 无法控制第三方系统某接口的返回,返回的数据不满足要求
  • 某依赖系统还未开发完成,就需要对被测系统进行测试
  • 有些系统不支持重复请求,或有访问访问频次限制

等场景,我们可以使用MOCK测试方法。

也许,你听说过MOCK测试,并且做过接口的MOCK测试。

但是,电脑软件如何做?怎么做?

谭叔今天便分享一份电脑软件的MOCK方案,解决此类问题。

简单说来,我们需要:mock工具+代理工具。

环境搭建

一、mock环境

安装

Mockoon是在本地运行mock api最简单、最快的方法。无需远程部署,无需帐户,开源。

安装包:http://www.testtalking.com/#/data/data 【测试工具-Mockoon】

设置

设置端口+资源路径+response响应

电脑软件超时、MOCK测试方案_第10张图片

例如:设置请求127.0.0.1:3355/hytrade/info的响应内容为一条异常json:

{"code":"TR10000","msg":"系统异常[com.xxxx.getTraceId()Ljava/lang/String;](TR10000)","sourceMsg":"系统异常[com.xxxx.getTraceId()Ljava/lang/String;](TR10000)","data":null,"success":false}

设置Headers

电脑软件超时、MOCK测试方案_第11张图片

启动

电脑软件超时、MOCK测试方案_第12张图片

验证

用postman调一下,可以拿到结果,证明服务启动成功

电脑软件超时、MOCK测试方案_第13张图片

二、代理环境

安装

LightProxy 是 阿里巴巴 IFE 团队开发的一款基于 Electron 和 whistle 支持 Windows、Mac 的开源桌面代理软件 。LightProxy 可以自动完成证书安装和代理设置,让开发人员能够精确的掌握自己的开发环境,通过 HTTP代理使用规则转发、修改每一个请求和响应的内容。

安装包:http://www.testtalking.com/#/data/data 【测试工具-LightProxy】

设置

将本机访问的http://testgw.xxxx.com/hytrade/info代理到前面设置的mock服务http://127.0.0.1:3355/hytrade/info

http://testgw.xxxx.com/hytrade/info http://127.0.0.1:3355/hytrade/info

电脑软件超时、MOCK测试方案_第14张图片

实操

打开你待测试的电脑软件,针对配置接口的实际业务,发起操作。

可以看到,软件拿到了异常的响应,并给出了提示。

电脑软件超时、MOCK测试方案_第15张图片

查看程序日志,确实是拿到了mock的json串。

2021-04-06 13:45:17.709 [INFO]E:\Jenkins\workspace\qt_http_task.cpp[152] QtHttpTask::Post b7596ffd19a443ff886fb5784bf70751 start post param: http://testgw.xxxx.com/hytrade/info?param={xxxxxxxxxx}]}&sign=xxxxxxxxxx&lkToken=xxxxxxxxxx
2021-04-06 13:45:19.381 [INFO]E:\Jenkins\workspace\qt_http_task.cpp[438] QtHttpTask::SlotReplyFinished b7596ffd19a443ff886fb5784bf70751 -> {"code":"TR10000","msg":"系统异常[com.xxxx.getTraceId()Ljava/lang/String;](TR10000)","sourceMsg":"系统异常[com.xxxx.getTraceId()Ljava/lang/String;](TR10000)","data":null,"success":false}

至此,成功进行了一次mock测试,并且发现了一个问题:后端服务未兼容异常,易暴露堆栈信息。

后期规划

可考虑在服务器上搭建mock环境,大家统一维护mock环境,以减少重复操作。

一如既往,做个总结

方案是死的,人是活的多动脑筋,多想想解决之道,没有你不会做的工作;

多捣腾,才能多给开发提bug。

你可能感兴趣的:(软件测试,原力计划,软件测试)