def test_token_info(self): ''' 获取地址信息 :return: json ''' url = get_api_url('token_info') params = {'chain': "ethereum"} # token level filters = ['tx', "holder"] for f in filters: res = requests.get(url + '/DGD?filter=%s' % f, params=params).json() self.assert_request_success(res) data = res['data'] req_content = data[f] self.assertEqual(len(req_content), 10) # account level filters = ['in', "out"] addr = "0x6bdf7b73632379960c4dc25f9f6b2c92ecefde4d" for f in filters: res = requests.get(url + '/DGD?filter=%s&a=%s' % (f, addr), params=params).json() self.assert_request_success(res) data = res['data'] self.assertIn(f, res['data'])
def test_block_info(self): ''' 获取区块信息 :return: json ''' url = get_api_url('block_info') block_height = 330000 for i in range(3): #test block height chain = '?chain=bitcoin' page = '&page=%d' % i if i else '' res = requests.get(url + '/%d' % block_height + chain + page).json() self.assert_request_success(res) self.assert_equal(res, 'height', block_height) #test block hash for block_hash in config.BTC_BLOCK_HASHS: res = requests.get(url + '/%s' % block_hash + chain + page).json() self.assert_request_success(res) self.assert_equal(res, 'hash', block_hash) #test block list res = requests.get(url + 's?chain=bitcoin').json() self.assert_request_success(res) self.assert_len(res['data'], 6) res = requests.get(url + 's?start=0&offset=30&chain=bitcoin').json() self.assert_request_success(res) self.assert_len(res['data'], 30)
def test_block_info(self): ''' 获取区块信息 :return: json ''' url = get_api_url('block_info') block_heights = config.BLOCK_IDS params = { 'chain' : "ethereum" } # genesis block and normal block by block number for block_height in block_heights: res = requests.get(url + "/%s" % block_height, params = params).json() self.assert_request_success(res) self.assert_equal(res, 'number', block_height) self.assertIn("confirmation", res["data"]) # genesis block and normal block by block hash for block_hash in config.ETH_BLOCK_HASHS: url2 = url + '/%s' % block_hash res = requests.get(url2, params = params).json() self.assert_request_success(res) self.assertEqual(res['data']['hash'], block_hash) # test block with page param for i in range(1, 5): res = requests.get(url+'/0?page=%d' % i, params = params).json() self.assert_request_success(res) self.assert_len(res['data']['transactions'], 10) res = requests.get(url+'/0?page=890', params = params).json() self.assert_request_success(res) self.assert_len(res['data']['transactions'], 3) res = requests.get(url+'/0?page=891', params = params).json() self.assert_request_success(res) self.assert_len(res['data']['transactions'], 0) # test block list without param res = requests.get(url+'s', params = params).json() self.assert_request_success(res) self.assert_len(res['data']['blocks'], 10) # test block list with page param res = requests.get(url+'s?page=1', params = params).json() self.assert_request_success(res) self.assert_len(res['data']['blocks'], 10) # test block list with start offset param res = requests.get(url+'s?start=0&offset=30', params = params).json() self.assert_request_success(res) self.assert_len(res['data']['blocks'], 30) for _ in range(0, 29): blk1 = res['data']['blocks'][_] blk2 = res['data']['blocks'][_+1] self.assertGreaterEqual(blk1['number'], blk2['number'])
def test_market_info(self): ''' 获取价格和24hr统计信息 :return: json ''' url = get_api_url('market_info') res = requests.get(url).json() self.assert_request_success(res)
def test_abouts(self): ''' 获取文案信息 :return: json ''' url = get_api_url('abouts_info') res = requests.get(url).json() self.assert_request_success(res)
def test_captcha_code(self): ''' 测试验证码 :return: json ''' url = get_api_url('captcha_info') res = requests.get(url + '?width=10&height=20') self.__assert_binary(res)
def test_logo(self): ''' 测试logo :return: json ''' url = get_api_url('logo_info') for name in config.LOGOS: res = requests.get(url + '?name=%s&width=10&height=20' % name) self.__assert_binary(res)
def test_qrcode(self): ''' 测试二维码信息 :return: json ''' url = get_api_url('qr_info') res = requests.get(url + '?data=1NkAKsHPpT5LAaDPCMoL9hGG2vT9EbeRbB&size=200') self.__assert_binary(res)
def __test_tx_chart(self): start_point = [0, 10, 20] url = get_api_url('tx_chart_info') for chart in config.TX_CHARTS: for s in start_point: res = requests.get(url + '?start=%d&offset=%d&type=%s' % (s, s + 10, chart)).json() self.assert_request_success(res)
def test_miner_info(self): ''' 获取区块信息 :return: json ''' url = get_api_url('miner_info') for miner in config.MINERS: res = requests.get(url + '/%s?chain=bitcoin&page=2' % miner).json() self.assert_request_success(res)
def test_search(self): ''' 搜索测试 :return: json ''' url = get_api_url('search_info') for sp in config.SEARCH_PATTERN: pay_load = {'q': sp} res = requests.post(url, data=pay_load).json() self.assert_request_modified(res)
def test_archives_info(self): ''' 获取地址信息 :return: json ''' url = get_api_url('archives_info') res = requests.get(url+'/list?start=0&offset=15').json() self.assert_request_success(res) for f in config.ARCHIVES_FILTERS: res = requests.get(url+'/list?start=0&offset=15&filter=%s' % f).json() self.assert_request_success(res) res = requests.get(url+'/list?start=15&offset=30&filter=%s' % f).json() self.assert_request_success(res) url = get_api_url('archives_noted_info') for f in config.ARCHIVES_FILTERS: res = requests.get(url+'/list_noted?start=0&offset=15&filter=%s' % f).json() self.assert_request_success(res)
def __test_miner_chart(self): timespan = [1, 2, 6, 12, 24, 100] url = get_api_url('miner_chart_info') for chart in config.MINERS: for ts in timespan: res = requests.get(url + '/%s?timespan=%d&linear=0' % (chart, ts)).json() self.assert_request_success(res) res = requests.get(url + '/%s?timespan=%d&linear=1' % (chart, ts)).json() self.assert_request_success(res)
def __test_block_chart(self): timespan = [1, 2, 6, 12, 24, 100] url = get_api_url('block_chart_info') for chart in config.BLOCK_CHARTS: for ts in timespan: res = requests.get(url + '/%s?timespan=%d&linear=0' % (chart, ts)).json() self.assert_request_success(res) res = requests.get(url + '/%s?timespan=%d&linear=1' % (chart, ts)).json() self.assert_request_success(res) url = get_api_url('block_index_chart_info') timespan = [1, 7, 30] for chart in config.BLOCK_INDEX_CHARTS: for ts in timespan: res = requests.get(url + '/%s?timespan=%d' % (chart, ts)).json() self.assert_request_success(res)
def test_search_address(self): url = get_api_url('search_info') params = { 'chain': "bitcoin", 'q': '', } headers = {'content-type': 'application/json'} for addr in config.ADDRESSES: params['q'] = addr res = requests.post(url, data=json.dumps(params), headers=headers).json() self.assertEqual(res['code'], '302') self.assertEqual(res['status'], 'success', msg=u'请求失败')
def test_address_info(self): ''' 获取地址信息 :return: json ''' url = get_api_url('address_info') params = {'chain': "ethereum"} ''' 1 normal account ''' # normal info addr = config.ETHERUM_ADDRESS[0] params['filter'] = 'tx' res = requests.get(url + '/%s' % addr, params=params).json() self.assert_request_success(res) self.assertEqual(res['data']['contract_flag'], False) self.assertEqual(res['data']['miner_flag'], False) txs = res['data']['tx'] self.assertEqual(len(txs), 10) self.assertEqual(res['data']['pages'], 81) # miner info addr = config.ETHERUM_ADDRESS[1] params['filter'] = 'mine' res = requests.get(url + '/%s' % addr, params=params).json() self.assert_request_success(res) self.assertEqual(res['data']['contract_flag'], False) self.assertEqual(res['data']['miner_flag'], True) mine = res['data']['mine'] self.assertEqual(len(mine), 10) self.assertEqual(res['data']['pages'], 47) params['filter'] = 'uncles' res = requests.get(url + '/%s' % addr, params=params).json() self.assert_request_success(res) self.assertEqual(res['data']['contract_flag'], False) self.assertEqual(res['data']['miner_flag'], True) uncles = res['data']['uncles'] self.assertEqual(len(uncles), 10) self.assertEqual(res['data']['pages'], 6) ''' 2 contract account ''' # contract account # DGD addr = "0xe0b7927c4af23765cb51314a0e0521a9645f0e2a" params['filter'] = 'tx' res = requests.get(url + '/%s' % addr, params=params).json() self.assert_request_success(res) self.assertEqual(res['data']['miner_flag'], False) self.assertEqual(res['data']['contract_flag'], True) self.assertIn("abi", res['data']) self.assertIn("source_code", res['data'])
def __test_address_chart(self): timespan = [1, 2, 6, 12, 24, 100] addr = '1HstuMgmBZkLGBTPLH7U6HQjRZDvwc7J2M' url = get_api_url('address_chart_info') for chart in config.ADDRESS_CHARTS: for ts in timespan: res = requests.get(url + '/%s?q=%s×pan=%d&linear=0' % (chart, addr, ts)).json() self.assert_request_success(res) res = requests.get(url + '/%s?q=%s×pan=%d&linear=1' % (chart, addr, ts)).json() self.assert_request_success(res)
def test_search_pattern(self): url = get_api_url('search_info') params = { 'chain': "bitcoin", 'q': '', } headers = {'content-type': 'application/json'} for pattern in config.SEARCH_PATTERN: params['q'] = pattern res = requests.post(url, data=json.dumps(params), headers=headers).json() self.assertEqual(res['code'], '302') self.assertEqual(res['status'], 'success', msg=u'请求成功')
def test_search_tx(self): url = get_api_url('search_info') params = { 'chain' : "ethereum", 'q' : '', } for tx_hash in config.ETH_TX_HASHS: params['q'] = tx_hash res = requests.post(url, params = params).json() self.assertEqual(res['code'], '302') self.assertEqual(res['status'], 'success', msg=u'请求失败') #test tx in detail redirect_url = HOST + "/api/" + res['data']["type"] + "/" + res['data']["value"] res = requests.get(redirect_url, params = {"chain":"ethereum", "detail":0}).json() self.assert_request_success(res) self.assertEqual(res['data']['tx']['hash'], tx_hash)
def test_tx_info(self): ''' 获取交易信息 :return: json ''' url = get_api_url('tx_info') for tx_hash in config.TX_HASHS: #test tx in short res = requests.get(url+'/%s?detail=0&chain=bitcoin' % tx_hash).json() self.assert_request_success(res) #test tx in detail res = requests.get(url+'/%s?detail=1&chain=bitcoin' % tx_hash).json() self.assert_request_success(res) self.assert_in(res, 'inputs', 'script') self.assert_in(res, 'outputs', 'script')
def test_search_address(self): url = get_api_url('search_info') params = { 'chain' : "ethereum", 'q' : '', } for addr in config.ETHERUM_ADDRESS[1:]: params['q'] = addr res = requests.post(url, params = params).json() self.assertEqual(res['code'], '302') self.assertEqual(res['status'], 'success', msg=u'请求失败') redirect_url = HOST + "/api/" + res['data']["type"] + "/" + res['data']["value"] res = requests.get(redirect_url, params = {"chain":"ethereum"}).json() self.assert_request_success(res) self.assertEqual(res['data']['address'], addr)
def test_address_info(self): ''' 获取地址信息 :return: json ''' url = get_api_url('address_info') for addr in config.ADDRESSES: #single url res = requests.get(url+'/%s?chain=bitcoin' % addr).json() self.assert_request_success(res) for f in config.FILTERS: page = '?page=2' filter = '&filter=%s&chain=bitcoin' % f res = requests.get(url+'/%s' % addr + page + filter).json() self.assert_request_success(res)
def test_stat_info(self): ''' 获取区块链统计信息 :return: json ''' url = get_api_url('stat_info') #blockchain stat res = requests.get(url + '/blockchain').json() self.assert_request_success(res) #tx stat res = requests.get(url + '/tx').json() self.assert_request_success(res) #block stat res = requests.get(url + '/block').json() self.assert_request_success(res) #address stat res = requests.get(url + '/address').json() self.assert_request_success(res)
def test_search_block(self): # multi is False url = get_api_url('search_info') params = { 'chain': "bitcoin", 'q': '', } headers = {'content-type': 'application/json'} for block_height in config.BLOCK_IDS: params['q'] = block_height res = requests.post(url, data=json.dumps(params), headers=headers).json() self.assertEqual(res['code'], '302') self.assertEqual(res['status'], 'success', msg=u'请求成功') for block_hash in config.BLOCK_HASHS: params['q'] = block_hash res = requests.post(url, data=json.dumps(params), headers=headers).json() self.assertEqual(res['code'], '302') self.assertEqual(res['status'], 'success', msg=u'请求成功')
def setUp(self): """ setup fixtures :return: """ self.app = blockmeta.app self.host = HOST # login and get the token url = get_api_url('login') res = requests.post(url, data={'email': EMAIL, 'password': PASSWORD}) assert res.json()['code'] == u'200', u'登录失败' assert res.json()['status'] == 'success', u'登录失败' self.token = res.cookies.get('token') self.key = res.cookies.get('key') data = res.json()['data'] self.user_id = data['user_id'] self.remote_ip = data['remote_ip'] self.csrf_token = self._generate_csrf_token() self.cookies = {'token': self.token, 'key': self.key} self.headers = {'csrf-token': self.csrf_token}
def test_api_info(self): ''' 测试对外API信息 :return: json ''' url = get_api_url('api_info') SIMPLE_APIS = [ 'getdifficulty', 'getblockcount', 'reward', 'chainsize', 'totalbtc', 'interval', 'hashrate', 'avgtxnum', 'nextdifficulty', 'lastminer', 'lastblockhash', 'unconfirmedcount', '24hrpoolstat', '24hrblockcount', 'ticker', ] #simple API for api in SIMPLE_APIS: res = requests.get(url + '/chain/%s' % api).json() self.assert_request_success(res) #tx api txid = "34668ec700f9ed6037d473830c0d47548bf8462c1e83bc0a2380dda74aded84e" self.__request_assert(url + '/tx/info/%s' % txid) self.__request_assert(url + '/tx/raw/%s' % txid) txids = ','.join(id for id in config.TX_HASHS) self.__request_assert(url + '/tx/info/%s' % txids) self.__request_assert(url + '/tx/raw/%s' % txids) #block api h1, h2, h3 = 310021, 232132, 23 bhash = "00000000000000000612c5c994f64af6722fa20f209a98e367b58a141615cc0d" bhashs = ','.join(id for id in config.BLOCK_HASHS) self.__request_assert(url + '/block/info/%d' % h1) self.__request_assert(url + '/block/info/%s' % bhash) self.__request_assert(url + '/block/info/%s' % bhashs) self.__request_assert(url + '/block/info/%d,%d,%d' % (h1, h2, h3)) self.__request_assert(url + '/block/info/first,last') self.__request_assert(url + '/block/raw/%d' % h1) self.__request_assert(url + '/block/raw/%s' % bhash) self.__request_assert(url + '/block/raw/%s' % bhashs) self.__request_assert(url + '/block/raw/%d,%d,%d' % (h1, h2, h3)) self.__request_assert(url + '/block/raw/first,last') self.__request_assert(url + '/block/tx/%d' % h1) self.__request_assert(url + '/block/tx/%s' % bhash) self.__request_assert(url + '/block/tx/%s' % bhashs) self.__request_assert(url + '/block/tx/%d,%d,%d' % (h1, h2, h3)) self.__request_assert(url + '/block/tx/first,last') #address api addr = "1EkRKXzUhkoz1LvYS4MU1NJzMQPuWi7hAZ" self.__request_assert(url + '/address/info/%s' % addr) self.__request_assert(url + '/address/unconfirmed/%s' % addr) self.__request_assert(url + '/address/unspent/%s' % addr) addrs = ','.join(addr for addr in config.ADDRESSES) self.__request_assert(url + '/address/info/%s' % addr) self.__request_assert(url + '/address/unconfirmed/%s' % addr) self.__request_assert(url + '/address/unspent/%s' % addr) #tool api dbhash = '90ba214202df2979e3f8866b9a65b7935d2df530' self.__request_assert(url + '/tool/hashtoaddress?q=%s' % dbhash) self.__request_assert(url + '/tool/hashtoaddress?q=%s&v=0' % dbhash) self.__request_assert(url + '/tool/addresstohash?q=%s' % dbhash)
def test_search_block(self): # multi is False url = get_api_url('search_info') block_heights = config.BLOCK_IDS params = { 'chain' : "ethereum", 'q' : '', } for block_height in block_heights: params['q'] = block_height res = requests.post(url, params = params).json() self.assertEqual(res['code'], '302') self.assertEqual(res['status'], 'success', msg=u'请求失败') redirect_url = HOST + "/api/" + res['data']["type"] + "/" + res['data']["value"] res = requests.get(redirect_url, params = {"chain":"ethereum"}).json() self.assert_request_success(res) self.assertEqual(res['data']['number'], block_height) for block_hash in config.ETH_BLOCK_HASHS: params['q'] = block_hash res = requests.post(url, params = params).json() self.assertEqual(res['code'], '302') self.assertEqual(res['status'], 'success', msg=u'请求失败') redirect_url = HOST + "/api/" + res['data']["type"] + "/" + res['data']["value"] res = requests.get(redirect_url, params = {"chain":"ethereum"}).json() self.assert_request_success(res) self.assertEqual(res['data']['hash'], block_hash) for block_hash in config.ETH_BLOCK_HASHS: params['q'] = block_hash[2:] res = requests.post(url, params = params).json() self.assertEqual(res['code'], '302') self.assertEqual(res['status'], 'success', msg=u'请求失败') redirect_url = HOST + "/api/" + res['data']["type"] + "/" + res['data']["value"] res = requests.get(redirect_url, params = {"chain":"ethereum"}).json() self.assert_request_success(res) self.assertEqual(res['data']['hash'], block_hash) # uncle for block_hash in config.ETH_UNCLES: params['q'] = block_hash res = requests.post(url, params = params).json() self.assertEqual(res['code'], '302') self.assertEqual(res['status'], 'success', msg=u'请求失败') redirect_url = HOST + "/api/" + res['data']["type"] + "/" + res['data']["value"] res = requests.get(redirect_url, params = {"chain":"ethereum"}).json() self.assert_request_success(res) self.assertEqual(res['data']['hash'], block_hash) for token in ["DGD", "DCS"]: params['q'] = token res = requests.post(url, params = params).json() self.assertEqual(res['code'], '302') self.assertEqual(res['status'], 'success', msg=u'请求失败') redirect_url = HOST + "/api/" + res['data']["type"] + "/" + res['data']["value"] res = requests.get(redirect_url, params = {"chain":"ethereum"}).json() self.assert_request_success(res)
def __test_charts(self): url = get_api_url('charts_info') for chart in config.KNOWN_CHARTS: res = requests.get(url + '/%s' % chart).json() self.assert_request_success(res)