51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2012|回复: 2
打印 上一主题 下一主题

金融类数据测试与监控实践

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2018-3-23 13:31:27 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
金融类接口数据的因为业务性比较强, 就像股票,每天的价格都是实时的,除非特殊原因,例如停牌,价
格才不会变动。 所以原来的的测试,基本都是要靠着准确的时间去测试,如股票开盘是9:30 , 11:30收盘。
特别是行情系统改动了一点,很多时候,测试是非常辛苦的。 特别是如果实时数据有问题,那么将导致今
天的数据不准确,而且验证又是需要这样重复的流程。而且这个接口是不能出错的,不然行情数据是不对的。
如果用户直接索赔,那就尴尬了。

那么有没办法解决这种问题呢。 为了妹子的笑容,我牺牲点脑细胞还是可以的。

我要测试的就是这样子的数据






问题的解决过程

第一次尝试 :

好吧,第一次我就去尝试了下,结果第一次手动测试,我就错过了时间。。。。

第二次尝试:

需求:

通过接口比对公司的接口和新浪接口是否一致

实现:

testng +HttpClient 调用我公司行情接口 +新浪行情接口 进行比对

接口说明

Sina股票数据接口
以大秦铁路(股票代码:601006)为例,如果要获取它的最新行情,只需访问新浪的股票数据接口:
http://hq.sinajs.cn/list=sh601006
这个url会返回一串文本,例如:
var hq_str_sh601006="大秦铁路, 27.55, 27.25, 26.91, 27.55, 26.20, 26.91, 26.92,
22114263, 589824680, 4695, 26.91, 57590, 26.90, 14700, 26.89, 14300,
26.88, 15100, 26.87, 3100, 26.92, 8900, 26.93, 14230, 26.94, 25150, 26.95, 15220, 26.96, 2008-01-11,
15:05:32";

字段0:”大秦铁路”,股票名字;
字段1:”27.55″,今日开盘价;
字段2:”27.25″,昨日收盘价;
字段3:”26.91″,当前价格;
等等 ..........

用例管理

用例的设计 我采用yaml 进行管理

比特币类型
testcase:
    - base_url: http://api.btctrade.com/api/ticker
      type: BTC
      param: coin=${coinType}
参数化放在 execl 中

coinType
eth
btc
doge
股票类型
testcase:
    - base_url: http://hq.sinajs.cn/
      type: BTC
      param: list=${fullcode}
参数化放在 execl 中

fullcode
sh000001
sz300005
数据比较

我司数据接口返回的是json数据,也是如上接口的数据一样,只是返回的是json数据
两个接口进行比对,如果数据相同就是通过的。

testng中使用 assertEquals方法:判断是否相等,Object类型的对象需要实现haseCode及equals方法。这个就
不说明了, 因为都是== 啊,Equals

第三次尝试:

需求:

为了满足测试一整天的接口的准确性 时间段 每天9:30 ---23:00 每5秒调用一次

实现 :

这次的实现使用 HttpClient + webmagic + javamail +Quartz



因为这个爬虫的代码逻辑比较复杂点 所以我重点说明:

首先通过 Quartz 启动定时任务

  1. QuartzManager.addJob("btctrade",
  2.                 BtcTradeJob.class.getName(), "*/5 * 7-23 * * ?"); //7-23点获取数据 ,定时5秒刷新接口
  3. QuartzManager.addJob("次新股",
  4.                 NewStockPlateJob.class.getName(), "*/5 * 9-15 ? * MON-FRI");//9点15开始 定时5秒刷新接口
  5. 定制获取数据的job,以比特币为例子

  6. package com.mj.job;

  7. import org.quartz.Job;
  8. import org.quartz.JobExecutionContext;
  9. import org.quartz.JobExecutionException;

  10. import us.codecraft.webmagic.Spider;

  11. import com.mj.processor.BtcProcessor;
  12. import com.mj.processor.BtcTradeProcessor;

  13. public class BtcTradeJob implements Job {
  14.     // BTC:http://api.btctrade.com/api/ticker?coin=btc
  15.     // ETH:http://api.btctrade.com/api/ticker?coin=eth
  16.     // LTC:http://api.btctrade.com/api/ticker?coin=ltc
  17.     // DOGE:http://api.btctrade.com/api/ticker?coin=doge
  18.     // YBC:http://api.btctrade.com/api/ticker?coin=ybc
  19.     public void execute(JobExecutionContext arg0) throws JobExecutionException {
  20.         Spider.create(new BtcTradeProcessor())
  21.                 .addUrl("http://api.btctrade.com/api/ticker?coin=btc",
  22.                         "http://api.btctrade.com/api/ticker?coin=eth",
  23.                         "http://api.btctrade.com/api/ticker?coin=ltc",
  24.                         "http://api.btctrade.com/api/ticker?coin=doge",
  25.                         "http://api.btctrade.com/api/ticker?coin=ybc")
  26.                 .thread(2)
  27.                 .run();
  28.     }
  29. }
  30. 通过 Processor 进行对比

  31. package com.mj.processor;

  32. import java.util.Date;
  33. import java.util.Map;

  34. import org.slf4j.Logger;
  35. import org.slf4j.LoggerFactory;

  36. import com.alibaba.fastjson.JSON;
  37. import com.alibaba.fastjson.JSONArray;
  38. import com.alibaba.fastjson.JSONObject;
  39. import com.mj.activity.BtcServer;
  40. import com.mj.common.cache.CacheManager;
  41. import com.mj.model.BtcModel;
  42. import com.mj.model.NotifyModel;
  43. import com.mj.util.date.VeDate;
  44. import com.mj.util.mail.MailUtil;

  45. import us.codecraft.webmagic.Page;
  46. import us.codecraft.webmagic.Site;
  47. import us.codecraft.webmagic.processor.PageProcessor;

  48. public class BtcTradeProcessor implements PageProcessor {
  49.     private static final Logger logger = LoggerFactory
  50.             .getLogger(BtcTradeProcessor.class);
  51.     // 部分一:抓取网站的相关配置,包括编码、抓取间隔、重试次数等
  52.     private Site site = Site.me().setRetryTimes(5).setSleepTime(1000);

  53.     // process是定制爬虫逻辑的核心接口,在这里编写抽取逻辑
  54.     public void process(Page page) {
  55.         // TODO Auto-generated method stub
  56.         // page.setSkip(true);
  57.         if (page != null) {
  58.             logger.debug(page.getJson().toString());
  59.             // MailUtil.mail("数据", page.getJson().toString());
  60.             BtcModel model = JSON.parseObject(page.getJson().toString(),
  61.                     BtcModel.class);
  62.             if (model != null) {
  63.                 model.type = page.getRequest().getUrl().replace("http://api.btctrade.com/api/ticker?coin=", "btctrade_");
  64.                 logger.debug(model.toString());
  65.                 if (CacheManager.getInstance().getCache(model.type) == null) {
  66.                     CacheManager.getInstance().putCache(model.type,
  67.                             "20170101010101");
  68.                 }

  69.                            //这里忽略了公司的对比代码
  70.                            ....
  71.                 if (不通过就发送邮件) {
  72.                         CacheManager.getInstance().putCache(model.type,
  73.                                 nowStr);
  74.                         NotifyModel notifyModel = new NotifyModel();
  75.                         notifyModel.head = model.type + "最低价";
  76.                         notifyModel.body = " 最新 " + model.last + " 最低 "
  77.                                 + model.low + " 最高 " + model.high +“在“+nowStr+”出现数据不一致”;
  78.                         MailUtil.mail(notifyModel.head, notifyModel.body);
  79.                 }
  80.             }
  81.         }
  82.     }

  83.     public Site getSite() {
  84.         return site;
  85.     }

  86. }
复制代码

用例的管理想法和第二次尝试一样, 用execl 和yaml 双剑客。也就不累赘说明了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1
回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-24 17:18 , Processed in 0.066248 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表