如题。我现在在写测试中遇到一些问题,比如: 1、有的接口可能在低并发时不会显示出问题,但高并发(或者网络条件不太好)的情况下会出 bug; 2、有的接口可能会在特定的时间内做特定的事情; 3、有的接口在服务器端执行了许多代码,但其中一部分行为是行为客户端难以获知(或者无需获知)的; 4、有的接口返回结果具有一定随机性,难以准确测试出来。
这样的程序,我想有没有一个比较好的思路去写测试呢(与测试所用的工具无关是最好的)?举几个例子吧。
第一个例子,我们可以设想一个多玩家一起打 boss 的手游。boss 被所有玩家共享 HP,最终击杀 BOSS 的玩家、总共让 BOSS 的 HP 减少得最多的玩家、参与打 BOSS 的玩家分别获得不同的奖励。boss 在特定时间后(比如每天 12:30 以后)允许玩家攻击,如果 20 分钟内没有击杀 BOSS 则今日挑战失败,等等。 然后某些接口可以根据今天的挑战是否结束,决定返回今日或是昨日的战报,等等。
这个例子主要涉及到第一和第二个问题:时间问题、高并发、网络不太好的情况下的问题。我目前还没有想好该以什么思路写测试,不知道大家有什么意见?
第二个例子,比如我们的服务器端有一个接口,这个接口获取客户端提交的 session_key,然后根据特定的逻辑和条件(不管这些条件储存在服务器端还是客户端,对这个例子没有影响)来给用户的数据库里发一个奖励道具。由于多种原因,现在的客户端不会实时从服务器端拉取更新后的道具列表。那么这个接口会把增加的道具的键名和数量发给客户端,让客户端能够把道具更新在本地。 那么问题来了:假如我日后重构了这个接口,但服务器端增加的道具并没有实际加到数据库里,就返回给了客户端正确的响应,那么我们的功能测试是很难测试到这种情况的。当然,我们可以调用道具列表接口,比较增加前和增加后的列表,但这麻烦,并且需要重复造轮子。 这个例子主要涉及到上面第三个问题。
第三个例子,比如我有一个{道具=>概率}的键值对数组,或者是我有一个指定方差和均值的正态分布模型,我需要按照指定的分布来获取随机结果。这样的测试,我们如何测试它返回的结果是真实(或者至少是接近)的分布呢?
我想到的办法是多次请求这个接口然后统计返回结果。但这样做成本比较高,不知道有没有什么简单的思路?