工作背景

  性能测试工程师,主要测试工具--loadrunner,主要是接口测试。

实现功能

  loadrunner对报文格式的转换存在问题,部分报文无法转换,故使用Python编写脚本自动将soap协议报文转换为loadrunner默认的格式。

转换步骤

soap协议原报文如下:

 1 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="URL">
 2    <soapenv:Header/>
 3    <soapenv:Body>
 4       <ser:queryRiskPolicyCaseInfo>
 5          <!--Zero or more repetitions:-->
 6          <arg0>
 7             <!--Optional:-->
 8             <clientInfo>
 9                <!--Optional:-->
10                <batchNo>?</batchNo>
11                <!--Optional:-->
12                <size>?</size>
13             </clientInfo>
14             <!--Optional:-->
15             <riskPolicyCaseSubDto>
16                <!--Optional:-->
17                <riskPolicyCaseRequestInfo>
18                   <!--Optional:-->
19                   <companyCode>?</companyCode>
20                   <!--Optional:-->
21                   <currentPage>?</currentPage>
22                   <!--Optional:-->
23                   <districtCode>?</districtCode>
24                   <!--Optional:-->
25                   <districtLevel>?</districtLevel>
26                   <!--Optional:-->
27                   <endDate>?</endDate>
28                   <!--Optional:-->
29                   <pageSize>?</pageSize>
30                   <!--Optional一页多少条:-->
31                   <riskCode>?</riskCode>
32                   <!--Optional风险等级:-->
33                   <riskRuleCode>?</riskRuleCode>
34                   <!--Optional:-->
35                   <ruleType>?</ruleType>
36                   <!--Optional:-->
37                   <startDate>?</startDate>
38                </riskPolicyCaseRequestInfo>
39             </riskPolicyCaseSubDto>
40          </arg0>
41       </ser:queryRiskPolicyCaseInfo>
42    </soapenv:Body>
43 </soapenv:Envelope>

代码如下:

 1 import re
 2 """
 3 将soap格式的报文修改为loadrunner格式
 4 """
 5 file = r"C:\\Users\\zg\\Desktop\\报文转换\\报文.txt"
 6 file_out = r"C:\\Users\\zg\\Desktop\\报文转换\\转换后的报文.txt"
 7 #报文头部
 8 header = 'soap_request("StepName=google", \n"ExpectedResponse=AnySoap", \n'+'"URL=www.baidu.com'+'"'\
 9          +', \n"SOAPEnvelope= "\n"<?xml version=\\"1.0\\" encoding=\\"utf-8\\"?>"'
10 #报文尾部
11 last = '"Snapshot=t1.inf",\n"ResponseParam=result",\nLAST );'
12 with open(file_out,'w') as f_clear:
13     #写文件前清空文件
14     f_clear.truncate()
15     f_clear.write(header+'\n')
16 #确定line_num
17 line_num = 1
18 #确定文件的行数
19 numbers = len(open(file,'r').readlines())
20 #编辑原报文
21 with open(file) as f_in:
22     for line in f_in.readlines():
23         #判断是否为空行
24         if len(line.strip()) > 0:
25             # 找出每行第一个非空字符的位置(正则表达式)
26             num = re.search(r'\S', line).span()[0]
27            #判断是否为最后一行
28             if line_num < numbers:
29                 # 对每行进行拼接
30                 line = line[:num] + '"' + line[num:].replace('"', r'\"').rstrip() + '"'
31                 line_num += 1
32             else:
33                 line = line[:num] + '"' + line[num:].replace('"', r'\"').rstrip() + '"' + ','
34        #在最后一行行尾添加逗号‘,’
35         else:
36             line = '\r\t\n'
37             line_num += 1
38         #将修改后的内容写入新的文件
39         with open(file_out,'a') as f_out:
40             f_out.write(line + "\n")
41     #追加报文尾部
42     with open(file_out,'a') as f_out:
43         f_out.write(last)            

运行代码,转换后的报文如下:

 1 soap_request("StepName=google",
 2 "ExpectedResponse=AnySoap",
 3 "URL=www.baidu.com",
 4 "SOAPEnvelope= "
 5 "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
 6 "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ser=\"URL\">"
 7    "<soapenv:Header/>"
 8    "<soapenv:Body>"
 9       "<ser:queryRiskPolicyCaseInfo>"
10          "<!--Zero or more repetitions:-->"
11          "<arg0>"
12             "<!--Optional:-->"
13             "<clientInfo>"
14                "<!--Optional:-->"
15                "<batchNo>?</batchNo>"
16                "<!--Optional:-->"
17                "<size>?</size>"
18             "</clientInfo>"
19             "<!--Optional:-->"
20             "<riskPolicyCaseSubDto>"
21                "<!--Optional:-->"
22                "<riskPolicyCaseRequestInfo>"
23                   "<!--Optional:-->"
24                   "<companyCode>?</companyCode>"
25                   "<!--Optional:-->"
26                   "<currentPage>?</currentPage>"
27                   "<!--Optional:-->"
28                   "<districtCode>?</districtCode>"
29                   "<!--Optional:-->"
30                   "<districtLevel>?</districtLevel>"
31                   "<!--Optional:-->"
32                   "<endDate>?</endDate>"
33                   "<!--Optional:-->"
34                   "<pageSize>?</pageSize>"
35                   "<!--Optional一页多少条:-->"
36                   "<riskCode>?</riskCode>"
37                   "<!--Optional风险等级:-->"
38                   "<riskRuleCode>?</riskRuleCode>"
39                   "<!--Optional:-->"
40                   "<ruleType>?</ruleType>"
41                   "<!--Optional:-->"
42                   "<startDate>?</startDate>"
43                "</riskPolicyCaseRequestInfo>"
44             "</riskPolicyCaseSubDto>"
45          "</arg0>"
46       "</ser:queryRiskPolicyCaseInfo>"
47    "</soapenv:Body>"
48 "</soapenv:Envelope>",
49 "Snapshot=t1.inf",
50 "ResponseParam=result",
51 LAST );

View Code

  后期会使用Tkinter模块实现其图形界面化,代码中用到正则表达式模块re,以后会有专门的文章对其进行描述,本人为Python入门菜鸟,大神请绕过,不喜勿喷!

转载于:https://www.cnblogs.com/zhang-zhi/p/7646923.html

Python对文本文件的简单操作(一)相关推荐

  1. Neo4j离线环境搭建与基于python中py2neo的简单操作

    Neo4j离线环境搭建与基于python中py2neo的简单操作 1 安装与配置 1.1 Neo4j安装 1.2 python操作环境配置 2 Neo4j操作 2.1 创建: 创建点 创建点边: 2. ...

  2. python创建以姓名命名的txt文件,python创建文本文件的简单方法

    python open() 函数以指定模式打开一个文件,创建一个file对象,相关的方法才可以调用它进行读写. w 模式表示打开一个文件只用于写入.如果该文件已存在则打开文件,并从开头开始编辑,即原有 ...

  3. Python办公自动化----文本文件的读写操作

    用Python进行txt和csv文件的读写操作 在Python中实现文件操作可以使用Python内置的open函数来打开文件,在使用open函数时,可以通过函数的参数指定文件名.操作模式和字符编码等信 ...

  4. 利用Python对文本文件进行简单的处理

    在诸多软件压缩包中或是项目压缩包中都会存在一个readme.txt文件,其中的内容无非是对软件的简单介绍和注意事项.但是在该文本文件中,内容没有分段分行,是非常冗杂地混在一起.当然处理手段多种多样,而 ...

  5. 【python3】python实现多线程(简单操作)

    大家在使用python开发或测试中,难免会用到python的多线程操作,下面我就来简单介绍一下多线程的2种基本的实现方法: [说明]: (1)在多线程中我们需要使用的第三方库是threading: ( ...

  6. python写字板_pywinauto简单操作写字板的例子

    前段时间写了做web程序界面自动化的简单例子,今天写一下windows gui程序界面自动化测例子吧. def openwordpad(): app = application.Application ...

  7. python 字典的一些简单操作

    from numpy.core._multiarray_umath import squared={'name':'xiaoming','age':20}# # #获取元素 print(d['name ...

  8. python中文件的简单操作

    一.mode="r" mode="r":一次性读取文本中全部的内容,以字符串的形式返回结果 read :读取内容 readline : 读取一行 readlin ...

  9. mysql 空间数据操作,MySQL 空间数据 简单操作

    在做的项目中需要,自己绘制区域图形,并存储起来,后面还有更新的需要,存文件不方面,想到现在数据库都支持空间数据库. 现在用的就是 MySQL ,就继续用 MySQL 来存储.管理空间数据.下面就做一些 ...

  10. python 基础 文本文件的操作

    一  文件介绍 1.什么是文件 狭义说:文本文件:广义说:超文本文件, 图片,声音,超链接,视频. 2.文件的分类 文件大体上可以分为两类,文件文件和二进制文件. 3.文件的作用 使用文件的目的是把一 ...

最新文章

  1. ExtJs之gridPanel的属性表格,编辑表格,表格分页,分组等技巧
  2. 直播变局下百度移动生态新“野望”
  3. linux磁盘分区fdisk命令详解
  4. OpenCV实现张正友相机标定源代码
  5. 2021年中国现制茶饮行业洞察报告
  6. python matlablib安装踏坑记
  7. 工作两年多的一个菜鸟感想
  8. java flash 压缩_Java和flash通信中数据的zlib压缩与解压缩
  9. 快速打开计算机磁盘的软件,怎样快速启动电脑
  10. 一文读懂babel编译流程,再也不怕面试官的刁难了
  11. 【项目分析】利用J#类库解决项目中数据压缩以及解压的问题
  12. 深入研究:HTTP2的真正性能到底如何
  13. python学习Day6 元组、字典、集合set三类数据用法、深浅拷贝
  14. 知云文献翻译出现乱码的解决方式
  15. 矩阵分析及应用(1-2章)
  16. 重学css 0x3 CSS效果
  17. PTA 实验7-5 输出大写英文字母(10 分)
  18. 动态选择屏幕(FREE_SELECTIONS_INIT)
  19. CedarX中代码技术的应用借鉴 (二)多态的方式创建格式解析器
  20. 传奇服务器最多登录人数设置,传奇服务器中如何设置角色升级经验值数量

热门文章

  1. win7 更新失败解决方案一
  2. 获取指定年份至今年分列表
  3. Erlang中的OTP简要
  4. 码农们:你属于哪一种极品程序员?
  5. table内容超出宽度时隐藏并显示省略标记
  6. 身为华人,我再一次不淡定了,中文输入项目启动
  7. 【BMC_patrol常见问题汇总】Console License生成
  8. python装饰器两层和三层_2020 python学习第十六天————三层装饰器与迭代器
  9. unity性能优化初级入门篇
  10. 关于redis内存分析,内存优化