• 0
  • 0
分享
  • Python助力性能测试:报文批量生成——软件测试圈
  • 曼倩诙谐 2021-03-04 10:42:25 字数 1890 阅读 1228 收藏 0

  当前,我国金融体系内交易量持续增长,业务场景日趋复杂。系统交易量的增加,临时产生的集中业务需求,都会使服务器面临考验,因此,需要对系统进行性能测试。在金融系统中,报文处理是必不可少的。各大金融机构间通过报文的交换进行信息流的传递,从而最终实现资金的跨机构流转。在对金融系统的性能测试中,自然也少不了与报文打交道,而性能测试往往伴随着大量数据准备。那么,如何高效地生成大量报文呢?

  试想这样一种场景:某金融机构需在特定时间内进行一波资金划转,该业务是新增交易,且交易数量较大,需要准备大量报文对服务器进行性能测试。数据的准备有很多方法,其中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)

  在以下示例中,原有的编号已被替换成为了不重复随机数。

1-1.png

1-2.png

  实际测试中,结合以上方法,即使上万条交易报文也能轻松准备,为性能测试的开展提供了有力的支持。


作者:许思琦   

来源:51Testing软件测试网原创

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •    测试结果(图示+文字说明结论):  图1:按照任务来呈现二分式成功率  图2:按照2类用户类型来呈现二分式成功率  图3:成功等级呈现  图4:每个任务的平均时间呈现  图5:综合多种因素的严重性评估 附件提交:访谈录音文件 + 原始数据excel表(3张)  一、测试基本信息 -3  测试网站:  携程  测试目标:  通过测试携程网站发掘用户体验存在的问题,并就出现问题提出合理的建议 - 用户对网站使用程度的满意状况如何  测试规则制定:  每一次任务都需要有清晰界定的开始和结束状态,测试者的每一个任务被标记为成功或失败    1.任务成功:每...
            1 2 4149
            分享
          •   1. 软件测试不是点点点,还有性能测试,自动化测试,安全测试,甚至于AI测试,大数据测试等等,软件测试的前景还是非常好的。  2. 软件测试相对门槛比较低,前期比较容易入门,哪怕不是计算机专业的小白,也能轻松掌握,不过,软件测试后期的难度和开发没有什么两样,想要拿到高薪,就得学会自动化测试,接口测试这些编码知识。  3. 经常有人抱怨,学了用不上,学完就容易忘记,因为学的都是理论知识,长时间不用自然会容易忘记,最好边学边找项目练手。  4. 如果你身边有人说测试很简单,薪资混混也很容易,那么他基本上过几年还是如此,没啥大的长进。  5. 软件测试有高薪也有低薪,月入两三千是真实存...
            0 0 1244
            分享
          • 因为工作需要,常常需要我们做停库测试。停Oracle服务器一共分为2大类:一类是11g数据库,一类是19C数据库,大致方法类似,19C服务器比11g服务器多一个切换容器的步骤。具体如下:一、停11g数据库方法:首先申请root权限需要跟管理员申请,然后登录通过工具登录服务器用普通账户先登录成功。su - root切换到管理员 root 用户su - ora11g  切换到ora11g 用户sqlplus / as sysdba启 动 SQL*PLUS 连 接 数 据 库 作 为 sysdba 进 行 管 理 的 工 具shutdown immediate;停服务器通过数据库...
            0 0 1317
            分享
          • 1、引言在微服务最流行的年代,开发与测试是不可缺少的环节(这说的跟没说一样),至于开发的环节,我就不说了(说的好像我会似的…);来聊一聊测试环节中的接口测试(这是我擅长的)。2、参数传递方式2.1 定义及方式接口测试目的:    验证微服务对客户端或服务暴露的接口是否能够正常工作。主要方式:    构造并发送HTTP请求消息给微服务,然后接收并验证微服务回复的HTTP响应消息。2.2 Path Parameter(路径参数)    1、在HTTP中,URL是一个很基本的概念,...
            1 2 12240
            分享
          •   前几天在我创建的技术交流群,几位同学聊起了兼容性测试相关的话题。有测试的方法技巧,有如何选择测试时的切入点,也有在质量和投入成本之间如何做平衡的思考。  翻了翻写过的技术文章,大多集中在后端、中间件以及稳定性测试方面,兼容性测试也有做过专项。这篇文章,我想结合自己对兼容性测试的理解,以及做技术专项的一些经验,谈谈我的一些看法。  如何理解兼容性测试  兼容性测试,最初是为了检查软件在不同的硬件、操作系统以及软件平台上是否可以正常运行,即软件的可移植性和正确性检查。操作系统如 Windows 和 Mac,各种浏览器兼容如Chrome、Firefox、IE。  近几年随着移...
            0 0 736
            分享
      • 51testing软件测试圈微信