iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python 3.x基于Xml数据的Ht
  • 269
分享到

Python 3.x基于Xml数据的Ht

数据PythonHt 2023-01-31 02:01:51 269人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

1. 前言 由于公司的一个项目是基于B/S架构与WEB服务通信,使用XML数据作为通信数据,在添加新功能时,WEB端与客户端分别由不同的部门负责,所以在WEB端功能实现过程中,需要自己发起请求测试,于是便选择了使用python编写

1. 前言

由于公司的一个项目是基于B/S架构WEB服务通信,使用XML数据作为通信数据,在添加新功能时,WEB端与客户端分别由不同的部门负责,所以在WEB端功能实现过程中,需要自己发起请求测试,于是便选择了使用python编写此脚本。另外由于此脚本最开始希望能在以后发展成具有压力测试的功能,所以除了基本的访问之外,添加了多线程请求。

整个脚本主要涉及到的关于Python的知识点包括:

  • 基于urllib.request的Http访问
  • 线程
  • 类与方法的定义
  • 全局变量的定义与使用
  • 文件的读取与写入
  • ……

2. 源码与结果

整个程序包括Python源码和配置文件,由于源码中有相应的注释,所以就直接贴源码吧,如下:

# TradeWeb测试脚本
import threading, time, http.client, urllib.request, os
#import matplotlib.pyplot as plt

URL = 'http://127.0.0.1:8888/XXXXXXXXX/httpXmlServlet' # 在配置文件中读取,此处将无效

TOTAL       = 0;    # 总数
SUCC        = 0;    # 响应成功数量
FaiL        = 0;    # 响应失败数量
EXCEPT      = 0     # 响应异常数  
MAXTIME     = 0     # 最大响应时间  
MINTIME     = 100   # 最小响应时间,初始值为100秒
COUNT_TIME   = 0    # 总时间
THREAD_COUNT = 0    # 记录线程数量
CODE_MAP = {200:0, 301:0, 302:0, 304:0}     # 状态码信息(部分)
RESULT_FILE = 'tradeWebResult.xml'          # 输出结果文件
REQUEST_DATA_FILE = 'requestData.config'         # 数据文件

DATA = '''请在tradeWebRequestData.config文件中配置'''

TIME_LIST = []  # 记录访问时间

#创建一个threading.Thread的派生类
class RequestThread(threading.Thread):
    #构造函数
    def __init__(self, thread_name):
        threading.Thread.__init__(self)
        self.test_count = 0;

    #线程运行的入口函数
    def run(self):
        global THREAD_COUNT
        THREAD_COUNT += 1
        #print("Start the count of thread:%d" %(THREAD_COUNT))
        self.testPerforMace()

    #测试性能方法
    def testPerfORMace(self):
        global TOTAL  
        global SUCC  
        global FAIL  
        global EXCEPT 
        global DATA
        global COUNT_TIME
        global CODE_MAP
        global URL
        try:
            st = time.time()    #记录开始时间

            start_time
            cookies = urllib.request.HTTPCookieProcessor()
            opener = urllib.request.build_opener(cookies)

            resp = urllib.request.Request(url=URL,
                                      headers={'Content-Type':'text/xml', 'Connection':'Keep-Alive'},
                                      data=DATA.encode('gbk'))

            respResult = opener.open(resp)

            # 记录状态码 START
            code = respResult.getcode()
            if code == 200:
                SUCC += 1
            else:
                FAIL += 1

            if code in CODE_MAP.keys():
                CODE_MAP[code] += 1
            else:
                CODE_MAP[code] = 1

            # print(request.status)
            # 记录状态码 END           

            html = respResult.read().decode('gbk')
            print(html)

            time_span = time.time() - st    # 计算访问时间

             # 记录访问时间
            TIME_LIST.append(round(time_span * 1000))

            # print('%-13s: %f ' %(self.name, time_span))

            self.maxtime(time_span)
            self.mintime(time_span)

            self.writeToFile(html)

            # info = respResult.info()   # 响应头信息
            # url = respResult.geturl()  # URL地址
            # print(info);
            # print(url)

            COUNT_TIME += time_span
            TOTAL += 1
        except Exception as e:
            print(e)
            TOTAL += 1
            EXCEPT += 1

    # 设置最大时间,如果传入的时间大于当前最大时间
    def maxtime(self, ts):
        global MAXTIME
        #print("time:%f" %(ts))
        if ts > MAXTIME:
            MAXTIME = ts

    # 设置最小时间,如果传入的时间小于当前最小时间
    def mintime(self, ts):
        global MINTIME
        #print("time:%f" %(ts))
        if ts < MINTIME and ts > 0.000000000000000001:
            MINTIME = ts

    # 写入文件
    def writeToFile(self, html):
        f = open(RESULT_FILE, 'w')
        f.write(html)
        f.write('\r\n')
        f.close();

# 读取XML数据信息
def loadData():
    global URL
    global DATA

    f = open(REQUEST_DATA_FILE, 'r')
    URL = "".join(f.readline())
    DATA = "".join(f.readlines())

    # print(DATA)

    f.close()


if __name__ == "__main__":
    # print("============测试开始============")
    print("")
    # 开始时间
    start_time = time.time()
    # 并发的线程数
    thread_count = 1

    loadData()     # 加载请求数据

    i = 0
    while i < thread_count:
        t = RequestThread("Thread" + str(i))
        t.start()
        i += 1

    t = 0
    while TOTAL < thread_count and t < 60:
        # print("total:%d, succ:%d, fail:%d, except:%d\n" %(TOTAL,SUCC,FAIL,EXCEPT))
        print("正在请求 ",URL)
        t += 1
        time.sleep(1)

    # 打印信息
    print()
    print("请求", URL, "的统计信息:")
    print("    总请求数 = %d,成功 = %d,失败 = %d,异常 = %d" %(TOTAL, SUCC, FAIL, EXCEPT))
    print()
    print("往返程的估计时间(以毫秒为单位):")
    print("    合计 =", int(COUNT_TIME * 1000), "ms", end = '')
    print("    最大 =", round(MAXTIME * 1000), "ms", end = '')
    print("    最小 =", round(MINTIME * 1000), "ms", end = '')
    print("    平均 =", round((COUNT_TIME / thread_count) * 1000), "ms")
    print()
    print("响应的状态码与次数信息(状态码:次数):")
    print("    ", CODE_MAP)
    print()
    print("输出页面请查看", RESULT_FILE, "文件(建议使用浏览器或XML专业工具打开)")
    print()
    # os.system("pause")

    print(TIME_LIST)
    input()

配置文件主要在于易于更改访问路径等,其中SESSION_ID是在Fiddler中抓包获取,配置文件源文件如下(为不泄露公司隐私,数据并非原始数据,但格式相同):

http://127.0.0.1:8888/XXXXXXXXX/httpXmlServlet

<?xml version=“1.0” encoding = “GB2312”?>
<COM>
<REQ name="commodity_query">
<USER_ID>0001</USER_ID>
<COMMODITY_ID>0000</COMMODITY_ID>
<SESSION_ID>4918081208706966071</SESSION_ID>
</REQ>
</COM>

测试结果如下:

这里写图片描述

由于公司保密性要求,地址做了模糊处理,另外输出的tradeWebResult.xml结果页面也未展示。

以上仅为个人学习与使用Python过程的一个记录,难免会有程序设计或使用不当,如有更好的意见,欢迎指正。

注:此代码开发环境为Python 3.5 + windows,未在Python 2.x环境下测试

--结束END--

本文标题: Python 3.x基于Xml数据的Ht

本文链接: https://www.lsjlt.com/news/186369.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python 3.x基于Xml数据的Ht
    1. 前言 由于公司的一个项目是基于B/S架构与WEB服务通信,使用XML数据作为通信数据,在添加新功能时,WEB端与客户端分别由不同的部门负责,所以在WEB端功能实现过程中,需要自己发起请求测试,于是便选择了使用Python编写...
    99+
    2023-01-31
    数据 Python Ht
  • 基于Vite2.x的Vue 3.x项目的搭建实现
    创建 Vue 3.x 项目 npm init @vitejs/app my-vue-app --template 引入 Router 4.x npm install...
    99+
    2024-04-02
  • 基于python 3 的selenium
    本文主要是运用selenium模块模拟登陆新浪微博 python webdriver环境搭建教程:http://blog.csdn.net/nanjunxiao/article/details/7957326 # -*- c...
    99+
    2023-01-31
    python selenium
  • 基于DataX的海量时序数据迁移实战:从MySQL到TDengine3.x
    背景 MySQL 数据库中,设备历史数据单表过亿,如何快速、低成本地迁移到 TDengine3.x 中? 从标题可以看出,我们使用的数据迁移/同步工具是 DataX ,数据源( Source )为传统...
    99+
    2023-08-31
    DataX TDengine3.x MySQL 亿级数据迁移 时序数据迁移
  • 3 Python的数据类型
    概述         在上一节,我们介绍了Python的基础语法,包括:编码格式、标识符、关键字、注释、多行、空行、缩进、引号、输入输出、import、运算符、条件控制、循环等内容。Python是一种动态类型的编程语言,这意味着当你创建一个...
    99+
    2023-08-31
    python 数据类型 列表 集合 元组 字典 字符串
  • python基于Pandas读写MySQL数据库
    目录1、read_sql_query 读取 mysql2、to_sql 写入数据库 要实现 pandas 对 mysql 的读写需要三个库 pandas ...
    99+
    2024-04-02
  • Python 数据分析的科学:基于证据的见解
    数据分析已成为当今商业和研究中至关重要的工具。Python 因其易用性、强大的库生态系统和广泛的社区支持,已成为数据科学家和分析师的首选语言。基于证据的见解是数据分析的核心,而 Python 提供了一套全面的工具来提取、清理、探索和建模数...
    99+
    2024-03-12
    引言
  • 基于Python的XML格式的文件示例代码详解
    XML文件是可拓展标记语言,是一种简单的数据存储语言,被设计用来传输和存储数据 在Python中XML的一些方法 读取文件和内容 #引用xml模块 from xml.etree ...
    99+
    2024-04-02
  • python与xml数据的交互详解
    目录一 什么是XML二 XML语法规则1. xml语法规则2. xml与html的区别三 python与xml的交互1. 获取标签对内的数据2. 获取标签属性值一 什么是XML py...
    99+
    2024-04-02
  • 基于Python利用Faker批量测试数据
    测试过程中,经常需要批量去造数据,方法有很多,最简单方便的应该是使用python 的一个三方库Faker。 脚本作用,批量生成10000条基本数据,写入本地的文件:test_data...
    99+
    2024-04-02
  • 基于Vue2.X中路由和钩子函数的示例分析
    小编给大家分享一下基于Vue2.X中路由和钩子函数的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!导航和钩子函数:导航:路由正在发生改变 关键字:路由 变钩子函数:在路由切换的不同...
    99+
    2024-04-02
  • 基于Python实现股票数据分析的可视化
    目录一、简介二、代码1、主文件2、数据库使用文件3、ui设计模块4、数据处理模块三、数据样例的展示四、效果展示一、简介 我们知道在购买股票的时候,可以使用历史数据来对当前的股票的走势...
    99+
    2024-04-02
  • python怎么应用于数据的基础统计分析
    小编给大家分享一下python怎么应用于数据的基础统计分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!python是什么意思Python是一种跨平台的、具有解释性、编译性、互动性和面向对象的脚本语言,其最初的设计是用于编...
    99+
    2023-06-14
  • 【Python&RS】基于Python批量下载哨兵二号数据
            学遥感的避免不了使用哨兵数据,毕竟10m的分辨率可以满足大部分的定量分析,同时也是最重要的一点,它免费!!!         但如果一幅一幅去下载影像实在是太慢了,特别是如果需要研究长时间序列的影像,那下载数据就成了最...
    99+
    2023-10-11
    python 开发语言 arcgis
  • 基于Python怎么用Faker批量测试数据
    这篇文章主要介绍了基于Python怎么用Faker批量测试数据的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇基于Python怎么用Faker批量测试数据文章都会有所收获,下面我们一起来看看吧。测试过程中,经常需...
    99+
    2023-06-29
  • Python中基于天气数据集XGBoost的示例分析
    这篇文章将为大家详细讲解有关Python中基于天气数据集XGBoost的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、XGBoostXGBoost并不是一种模型,而是一个可供用户轻松解决分类、...
    99+
    2023-06-26
  • 基于JDBC的MySQL数据库编程
    ✨博客主页: 荣 ✨系列专栏: MySQL ✨一句短话: 难在坚持,贵在坚持,成在坚持! 文章目录 一. JDBC概述二. JDBC前置工作1. 准备好MySQL驱动包2. 创建项目 三....
    99+
    2023-09-12
    数据库 mysql java
  • 数据库课设--基于Python+MySQL的餐厅点餐系统
    文章目录 一、系统需求分析二、系统设计1. 功能结构设计2、概念设计2.2.1 bill_food表E-R图2.2.2 bills表E-R图2.2.3 categories E-R图2.2.4...
    99+
    2023-09-09
    数据库 mysql
  • 基于Python实现一个简易的数据管理系统
    目录创建mysql数据表增删改查启动应用 为了方便的实现记录数据、修改数据没有精力去做一个完整的系统去管理数据。因此,在python的控制台直接实现一个简易的数据管理系统,包括数据的...
    99+
    2024-04-02
  • 基于Python实现自动化生成数据报表
    目录前言开发工具环境搭建主要代码前言 不要在用手敲生成Excel数据报表了,用Python自动生成Excel数据报表!废话不多说 让我们愉快地开始吧~ 开发工具 Python版本: ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作