工作背景

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

实现功能

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

转换步骤

soap协议原报文如下:

 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="URL">
<soapenv:Header/>
<soapenv:Body>
<ser:queryRiskPolicyCaseInfo>
<!--Zero or more repetitions:-->
<arg0>
<!--Optional:-->
<clientInfo>
<!--Optional:-->
<batchNo>?</batchNo>
<!--Optional:-->
<size>?</size>
</clientInfo>
<!--Optional:-->
<riskPolicyCaseSubDto>
<!--Optional:-->
<riskPolicyCaseRequestInfo>
<!--Optional:-->
<companyCode>?</companyCode>
<!--Optional:-->
<currentPage>?</currentPage>
<!--Optional:-->
<districtCode>?</districtCode>
<!--Optional:-->
<districtLevel>?</districtLevel>
<!--Optional:-->
<endDate>?</endDate>
<!--Optional:-->
<pageSize>?</pageSize>
<!--Optional一页多少条:-->
<riskCode>?</riskCode>
<!--Optional风险等级:-->
<riskRuleCode>?</riskRuleCode>
<!--Optional:-->
<ruleType>?</ruleType>
<!--Optional:-->
<startDate>?</startDate>
</riskPolicyCaseRequestInfo>
</riskPolicyCaseSubDto>
</arg0>
</ser:queryRiskPolicyCaseInfo>
</soapenv:Body>
</soapenv:Envelope>

代码如下:

 import re
"""
将soap格式的报文修改为loadrunner格式
"""
file = r"C:\\Users\\zg\\Desktop\\报文转换\\报文.txt"
file_out = r"C:\\Users\\zg\\Desktop\\报文转换\\转换后的报文.txt"
#报文头部
header = 'soap_request("StepName=google", \n"ExpectedResponse=AnySoap", \n'+'"URL=www.baidu.com'+'"'\
+', \n"SOAPEnvelope= "\n"<?xml version=\\"1.0\\" encoding=\\"utf-8\\"?>"'
#报文尾部
last = '"Snapshot=t1.inf",\n"ResponseParam=result",\nLAST );'
with open(file_out,'w') as f_clear:
#写文件前清空文件
f_clear.truncate()
f_clear.write(header+'\n')
#确定line_num
line_num = 1
#确定文件的行数
numbers = len(open(file,'r').readlines())
#编辑原报文
with open(file) as f_in:
for line in f_in.readlines():
#判断是否为空行
if len(line.strip()) > 0:
# 找出每行第一个非空字符的位置(正则表达式)
num = re.search(r'\S', line).span()[0]
#判断是否为最后一行
if line_num < numbers:
# 对每行进行拼接
line = line[:num] + '"' + line[num:].replace('"', r'\"').rstrip() + '"'
line_num += 1
else:
line = line[:num] + '"' + line[num:].replace('"', r'\"').rstrip() + '"' + ','
#在最后一行行尾添加逗号‘,’
else:
line = '\r\t\n'
line_num += 1
#将修改后的内容写入新的文件
with open(file_out,'a') as f_out:
f_out.write(line + "\n")
#追加报文尾部
with open(file_out,'a') as f_out:
f_out.write(last)

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

 soap_request("StepName=google",
"ExpectedResponse=AnySoap",
"URL=www.baidu.com",
"SOAPEnvelope= "
"<?xml version=\"1.0\" encoding=\"utf-8\"?>"
"<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ser=\"URL\">"
"<soapenv:Header/>"
"<soapenv:Body>"
"<ser:queryRiskPolicyCaseInfo>"
"<!--Zero or more repetitions:-->"
"<arg0>"
"<!--Optional:-->"
"<clientInfo>"
"<!--Optional:-->"
"<batchNo>?</batchNo>"
"<!--Optional:-->"
"<size>?</size>"
"</clientInfo>"
"<!--Optional:-->"
"<riskPolicyCaseSubDto>"
"<!--Optional:-->"
"<riskPolicyCaseRequestInfo>"
"<!--Optional:-->"
"<companyCode>?</companyCode>"
"<!--Optional:-->"
"<currentPage>?</currentPage>"
"<!--Optional:-->"
"<districtCode>?</districtCode>"
"<!--Optional:-->"
"<districtLevel>?</districtLevel>"
"<!--Optional:-->"
"<endDate>?</endDate>"
"<!--Optional:-->"
"<pageSize>?</pageSize>"
"<!--Optional一页多少条:-->"
"<riskCode>?</riskCode>"
"<!--Optional风险等级:-->"
"<riskRuleCode>?</riskRuleCode>"
"<!--Optional:-->"
"<ruleType>?</ruleType>"
"<!--Optional:-->"
"<startDate>?</startDate>"
"</riskPolicyCaseRequestInfo>"
"</riskPolicyCaseSubDto>"
"</arg0>"
"</ser:queryRiskPolicyCaseInfo>"
"</soapenv:Body>"
"</soapenv:Envelope>",
"Snapshot=t1.inf",
"ResponseParam=result",
LAST );

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

Python对文本文件的简单操作(一)的更多相关文章

  1. python对mysql进行简单操作

    python 连接MySQL数据库,进行简单操作 一.连接MySQL数据库,关闭连接 import pymysql db = pymysql.connect(host="xxx.xxx.x. ...

  2. python中通过selenium简单操作及xpath元素定位&轴定位

    浏览器的简单操作 # 导入webdriver模块 # 创建driver对象,指定Chrome浏览器 driver = webdriver.Chrome() # 窗口最大化 driver.maximiz ...

  3. python+mysql数据库的简单操作

    最近接了一个任务,测试某项类似于收益情况报表的功能,因计算公式复杂,单纯手算过于复杂,所以想到写成脚本 根据python的分治原则,先整了几个函数用于实现计算逻辑,后发现数据输入过于繁琐,所以决定使用 ...

  4. Python第一天——入门Python(2)字符串的简单操作

    数据的操作 字符串的一些常用操作: 1 1 #!/usr/bin/env python 2 # #coding=utf-8 3 # 4 # test='hello world' 5 # print(t ...

  5. Python学习笔记_03:简单操作MongoDB数据库

    目录 1. 插入文档 2. 查询文档 3. 更新文档 4. 删除文档   1. 插入文档 # -*- coding: UTF-8 -*- import datetime from pymongo im ...

  6. python redis基本概念简单操作

    转自:http://www.cnblogs.com/melonjiang/p/5342383.html 一.redis redis是一个key-value存储系统.和Memcached类似,它支持存储 ...

  7. 【转】python win32api win32gui win32con 简单操作教程(窗口句柄 发送消息 常用方法 键盘输入)

    作者:https://blog.csdn.net/qq_16234613/article/details/79155632 附:https://www.programcreek.com/python/ ...

  8. python 对mongdb的简单操作

    准备工作:1.选择安装合适的mongodb到本地电脑,2.创建mongodb实例,3,开启mongodb实例,4,下载pymongo第三方库,5.下载pycharm对mongodb可视化支持的插件mo ...

  9. python中文件的基础操作

    打开文件的三种方式: open(r'E:\学习日记\python\code\文件的简单操作.py') open('E:\\学习日记\\python\\code\\文件的简单操作.py') open(' ...

随机推荐

  1. android通过fiddler代理,抓取网络请求

    安装fiddler过程省略 1, 2, 3, 4,手机需要跟电脑处于同一局域网,设置网络代理为电脑在局域网内的ip,端口为3步设置的port 5,电脑就可以通过fiddler监控手机的所有网络请求了( ...

  2. SAP Netweaver的负载均衡消息服务器 vs CloudFoundry的App Router

    Message server for ABAP Netweaver SAP传统应用经典的三层架构: 起到负载均衡的消息服务器(Message Server)在图中没有得到体现.然后,消息服务器在我们每 ...

  3. git版本管理工具 标签(Tag) / 版本回退 / 分支的简单使用

    a.标签 标签,可以使用这个功能来标记发布结点. 举个例子, 假如我们的项目版本目前是1.2版本, 上级要求这个版本要在半个月后再进行上传至Appstore, 并要求我们未来的半个月内,去写1.3版本 ...

  4. 这些年,在wp平台打拼的日子

    最近经常胃疼,在当地的镇医院看了几次都没有改善,只好去市医院照胃镜检查,发现有胃炎,虽然是很普通和常见的毛病,但这种毛病一但沾上,就很难根治,一喝酒或者吃饭不定时.熬夜.吃酸辣冷冻等食物都容易引起复发 ...

  5. 使用selenium的方式获取网页中图片的链接和网页的链接,来判断是否是死链(二)

    上一篇使用Java正则表达式来判断和获取图片的链接以及跳转的网址,这篇使用selenium的自带的API(getAttribute)来获取网页中指定的内容 实现内容:获取下面所有图片的链接地址以及跳转 ...

  6. POJ 1742 Coins(多重背包,优化)

    <挑战程序设计竞赛>上DP的一道习题. 很裸的多重背包.下面对比一下方法,倍增,优化定义,单调队列. 一开始我写的倍增,把C[i]分解成小于C[i]的2^x和一个余数r. dp[i][j] ...

  7. 【BZOJ3668】[NOI2014] 起床困难综合症(位运算思想)

    点此看题面 大致题意: 给定一些位运算操作,让你在\(0\sim m\)范围内选一个初始值,使其在经过这些运算后得到的结果最大. 前置技能:关于位运算 作为一道位运算的题,如果你不知道什么是位运算,那 ...

  8. Bootstrap历练实例:弹出框(popover)事件

    事件 下表列出了弹出框(Popover)插件中要用到的事件.这些事件可在函数中当钩子使用. 事件 描述 实例 show.bs.popover 当调用 show 实例方法时立即触发该事件. $('#my ...

  9. SVG path

    在网页上画一图形,比如星星或波浪线,开始是想着图形软件画一个的,后来发现SVG这绘图程序的语言,感觉甚是可以,就发了些时间学了一下,在此做一简单分享和记录. 菜鸟上是这么介绍的(SVG 是使用 XML ...

  10. 二十六、MySQL 临时表

    MySQL 临时表 MySQL 临时表在我们需要保存一些临时数据时是非常有用的.临时表只在当前连接可见,当关闭连接时,Mysql会自动删除表并释放所有空间. 临时表在MySQL 3.23版本中添加,如 ...