don't stop believing

blockchain 테스트에 사용한 python 함수 - getTestConfig 본문

Python/Basic

blockchain 테스트에 사용한 python 함수 - getTestConfig

Tongchun 2018. 12. 18. 15:44

blockchain 테스트에 사용한 python 함수를 설명합니다.

  • getDateStrings - 날짜 - 년, 월, 일, 시, 분, 초를 확인하는 함수입니다.
  • getLogfileNameWithPath - 로그 기록을 위해 폴더를 생성하고 경로를 반환합니다.
  • getRequestId - ramdom으로 숫자를 반환합니다.
  • moveFile - 특정 파일을 로그 폴더로 이동시킵니다.
  • saveResultData - 데이터를 파일에 저장합니다.
  • convertToHex - String을 hex로 변환합니다.
  • leftPad64 - 왼쪽에 (또는 오른쪽에) 0을 채워 고정된 길이로 만듭니다.
  • getTestConfig - json 형태의 config 파일을 만들고 불러옵니다.
  • waitingCount - time.sleep() 할 때 동적으로 카운트를 셉니다.
  • callRPC - requests 모듈을 사용해 http API를 호출합니다.
  • callWS - websocket 모듈을 사용해 API 통신을 합니다.


테스트 스크립트가 복잡해지거나, 길어져서 반복되는 구간이 많고, DEV, QA, LIVE와 같이 테스트 환경이 나눠진다면 config 파일을 만들어서 사용하면 유용합니다. 


먼저 아래와 같이 json 형태로 config 내용을 작성합니다.

저는 DEV, QA, LIVE로 환경을 구분했습니다. 각 환경별로 동일한 key를 가지고 있습니다. value는 환경마다 달라집니다. 만약 특정 환경에서 설정 key가 없더라도 관리를 위해 각 환경(DEV, QA, LIVE)은 동일한 구성으로 해주는게 좋습니다.


파일 이름은 testConfig.json으로 만들어 줬습니다.

{
	"ngle": "어떤 테스트에 사용되는 설정 정보입니다.",
	"explain": [
		"explain에는 config 파일에 대한 설명을 작성합니다.",
		"json에는 주석이 없기 때문에 설명을 대신할 key를 만들고 array로 설명을 추가해 줍니다.",
		"config에는 DEV, QA, LIVE로 구성됩니다."
	],
	"config": {
		"DEV": {
			"account": {
				"coinbase": {
					"address": "0x7f294a186d8068e6f5a8ba776cfac5b927e16342"
				},
				"main": {
					"address": "0x0e5d9b4afBf0848b2776620905b87C0791fb6Cd0",
					"password": "ngle1234",
					"privatekey": "0x4e772e484233dada219c7c78e153c549073c2e78c80a5c673c4e449a46fec58a"
				},
				"info": {
					"enode": "enode://4429164a91cd45a8dc938e1c6be2cea736ae2fa8b583a5595621134371936fffa5a9ba4b24fc5d9e4e07c438260fb35b7afbe15399331a52344b42ba5c21cf8d@10.10.1.168:32323"
				}
			}
		},
		"QA": {
			"account": {
				"coinbase": {
					"address": "0x7f294a186d8068e6f5a8ba776cfac5b927e16342"
				},
				"main": {
					"address": "0xbDE7e68037E5eD6cc6436E173A134a1Fde5c945d",
					"password": "ngle1234",
					"privatekey": "0x72065795e50668f586390043374fc3560b830fe1e8ada56ca67865282158d1f3"
				},
				"info": {
					"enode": "enode://71534185c62a4404c516fbc5dd0252c6578c1955b94bab55c363d5a1a86fac0e6562e584e4e8d046bb9b197962d3b350417af49f0bf08b4368cb4916232b50c3@10.10.0.129:32323"
				}
			}
		},
		"LIVE": {
			"account": {
				"coinbase": {
					"address": "0xec3f4b0248029375891640ae3619bbe9404aa64d"
				},
				"main": {
					"address": "0xb17d189e8aacd69d54a7ca2c99c78254e7367b8d",
					"password": "ngle1234",
					"privatekey": "0xd49bbe19c264d1dc290932dfc158836968566e9edb713a3a6e4b7f139d4696c0"
				},
				"info": {
					"enode": "enode://d3fcc6f7e11ea796e293c55822720750bcfed464508d39d648aea51f0356f3f66ff3a1a730a9396ef2b2bce75cd29e81e5db419666aeb3bc0736fab079880f25@10.10.0.145:32323"
				}
			}
		}
	}
}

이제 json 파일을 불러오는 함수를 만들어 주고 테스트 스크립트에서 필요한 곳에 불러다 씁니다.

# coding=utf-8
import json

class nGleUtils():

	def getTestConfig(self, exMode="DEV"):
		''' config 파일 정보를 읽어옵니다. '''

		with open('testConfig.json') as f:
			data = json.load(f)

		return data['config'][exMode]


if __name__== "__main__":
	ngle = nGleUtils()

	ASSET = ngle.getTestConfig('QA')

	# QA 환경의 coinbase의 address를 불러옵니다.
	address = ASSET['account']['coinbase']['address']
	print(address)

	# main 계정의 password를 불러옵니다.
	password = ASSET['account']['main']['password']
	print(password)

ASSET 변수에 할당한 QA 환경의 json 데이터는 python의 dictionary 형태로 데이터를 불러올 수 있습니다.



Comments