當前,我國金融體系內交易量持續增長,業務場景日趨復雜。系統交易量的增加,臨時產生的集中業務需求,都會使服務器面臨考驗,因此,需要對系統進行性能測試。
在金融系統中,報文處理是必不可少的。各大金融機構間通過報文的交換進行信息流的傳遞,從而最終實現資金的跨機構流轉。在對金融系統的性能測試中,自然也少不了與報文打交道,而性能測試往往伴隨著大量數據準備。那么,如何高效地生成大量報文呢?
試想這樣一種場景:某金融機構需在特定時間內進行一波資金劃轉,該業務是新增交易,且交易數量較大,需要準備大量報文對服務器進行性能測試。數據的準備有很多方法,其中Python/ target=_blank class=infotextkey>Python由于易上手且兼具靈活性而逐漸受到測試工程師們的青睞。今天,我們就來介紹一下如何通過Python批量生成測試報文。
1.批量報文準備
上述例子中提到的報文一般可分為單交易報文和批量交易報文兩種。單交易報文的獲取是非常容易的,而批量交易報文則可通過單交易報文生成,Python中的pyperclip模塊為實現這一功能提供了便捷的支持。pyperclip中的copy和paste方法分別可實現向剪切板發送文本和從剪切板讀取文本。下面的代碼實現了讀取單交易信息,并生成指定數量批量交易的功能:
import pyperclip
# 交易數量
dealNum = 2
# 讀取單交易信息并復制到剪貼板
with open(r'test.txt', encoding='utf-8') as f:
txt = f.read()
pyperclip.copy(txt)
# 生成批量交易
res = ''
dealInfo = pyperclip.paste()
for i in range(dealNum):
res = '{}n{}'.format(res, dealInfo)
print(res)
當交易數量為2時,生成報文示例如下:
<tag>測試報文</tag>
<tag>測試報文</tag>
2.交易號生成
在一筆交易中,往往包含標志交易唯一性的定長交易號。
從上一步中,我們得到了擁有相同信息的若干筆交易,但由于交易號相同,直接發送上述交易報文會因重復編號導致記賬失敗。我們很容易想到,可以通過random函數生成隨機數來模擬不同交易,但如何確保編號的唯一性呢?random模塊中包含一個名為sample的方法,通過它,可以生成不重復的隨機數。例如,通過以下代碼可得到5個不重復的8位隨機數:
import random
# 隨機生成8位交易號
traNo = random.sample(range(10**7, 10**8), 5)
print(traNo)
返回生成的隨機數列表,如下:
[69244291, 71447069, 95104116, 91919619, 50861438]
3.交易號替換,目標報文生成
在前面步驟均已完成的前提下,下一步就可以進行編號的替換了。報文中的交易號一般形式為“<標簽>編號</標簽>”,對于此類數據的替換,正則表達式是非常有效的手段。Python中的re模塊可通過正則表達式進行字符串的匹配,下面的代碼通過查找交易標簽,對其中的交易編號進行了替換:
import re
# file:待替換文件
# numberList:隨機交易號列表
def alter_file(file, numberList):
fileData = ''
i = 0
with open(file, 'r', encoding='utf-8') as f:
for line in f:
if '<tag>' in line:
newStr = '<tag>{}</tag>'.format(numberList[i])
i += 1
line = re.sub(r'<tag>d+</tag>', newStr, line)
fileData += line
with open('result.txt', 'w', encoding='utf-8') as f:
f.write(fileData)
在以下示例中,原有的編號已被替換成為了不重復隨機數。
實際測試中,結合以上方法,即使上萬條交易報文也能輕松準備,為性能測試的開展提供了有力的支持。
如果你的也有很多問題想要解決,你的測試職業規劃也需要一點光亮,你也想跟著大家一起分享探討,我給你推薦一個「Python自動化測試學習交流群」你缺的知識這里有,你少的技能這里有,你要的大牛也在這里……