2016.02.19-2016.02.21回顾

本文记录了解决网页分页控件动态生成问题的过程,包括尝试使用django-pure-pagination开源插件进行后端分页逻辑重构的经历,以及在实现过程中遇到的具体问题与解决方案。

1、改了一晚上js代码,19号早上一来佐神告诉我,还是不行,页面链接仍然是动态生成的,我开始尝试从后端用服务器语言重新写分页控件的逻辑,自己研究了一会,觉得其实没有佐神所说的那样简单,于是把目光锁定在一个开源django分页控件上,来自github,叫django-pure-pagination

2、上午和下午都花了一些时间去做网站分析,这部分时间还是花的太多了,但我记得当时是因为太困了,没办法思考,所以以消遣的目的看的,那就尚可,但是仍然需要提醒自己,查统计数据要非常有针对性,比如我采取了一个策略,我通过查统计数据,看我的策略是否有效,形成一种反馈,改进或者改变策略

3、继续地学习了一些PHP的知识,关于文件方面的操作,大概涉及到的函数是fopen(),readfile(),fread(),feof(),filesize(),fgets(),fgetc()

4、晚上回去又是一晚上弄django-pure-pagination这个东西,总算弄好的了,但是其中有一个小瑕疵我没找到原因,就是我后端生成分页控件后,用相同的样式去套分页控件,生成的样式页码与页码之间居然会留多一些空白,我没清楚是什么原因,我最后只好按照他留多的空白,去掉了页码的margin然后看起来就和以前一样了,还去掉了上下外边距0,好像没什么异样

5、周六一上午就去做保养,晚上去中渝广场吃了个饭,回来又去看电影,其余时间都是在弄上传视频和视频水印相关的,那个电脑真是太慢了,完全影响我的效率,根本就不能多任务,运行一个大的任务就没办法干其他事情了,周六睡得太暗了,以后要睡早一些!周六下午还算了一个账,把美国的账单差不多算出来了!

6、周日上午还是继续弄视频,联系了卷少,但是好像卷少不给力啊,都没回我,中午聚餐回来就2点过了,随便弄了一下,电脑实在太慢了,就睡觉了,起来吃完晚饭,写好宣传语发布出去,分析了下网站来源数据,发布了外链就睡觉了!

总结:那个电脑不行啊,而且有些自动化运维的脚本要全部搬到服务器上去,要不然这么贵租个服务器是来干什么的呢?大任务那个电脑根本就不能做,或者后面要把自己的那台电脑搬过来!我周末主要就是被那台烂电脑把节奏给打乱了,节奏不能乱,而且这个总结,还是要按天来总结,隔3天很多都遗忘了!随时回顾!节奏不能乱!按天总结!积极使用备忘录!处理好事情的优先级!

<think>首先,用户的问题是关于使用Python基于指定的XML消息模板编写测试用例。消息模板是给定的XML字符串:`<?xml version="1.0" encoding="UTF-8"?><rpc message-id="801" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"><ntpClkDateTime xmlns="http://www.huawei.com/netconf/vrp/huawei-tm"><dateTime>2016-02-22T12:14:59Z</dateTime></ntpClkDateTime></rpc>`。 用户提供了三个引用: - 引用[1]:关于解决Python读取XML文件中文乱码问题。 - 引用[2]:关于使用Python生成XML。 - 引用[3]:关于删除XML文件头。 但用户说这些仅供参考,我应该关注用户上一次的问题和我的回答。回顾对话历史: - 最初的系统指令是关于格式化的要求:数学表达式使用$...$或$$...$$,中文回答,生成相关问题等。 - 然后有一个示例关于快速排序。 - 用户现在的查询是关于XML测试用例的。 用户的上一次消息是:"我想使用Python基于给定的XML消息模板编写测试用例",并提供了XML模板。 我的任务是回答这个问题,基于指令: - 回答结构清晰,帮助用户逐步解决问题。 - 保证回答真实可靠。 - 使用中文回答。 - 在回答中引用的段落末尾自然地添加引用标识。 - 生成相关问题。 系统指令还指定了格式:行内数学表达式用$...$,但这里没有数学内容,所以可能不需要。独立公式也不需要。 步骤: 1. **理解需求**:用户想基于给定的XML模板编写测试用例。模板是一个XML字符串,代表一个NETCONF RPC消息。 2. **关键元素**:XML模板中有命名空间、消息ID、日期时间等。测试用例可能涉及修改这些元素来测试不同的场景。 3. **使用Python生成XML**:基于引用[2],可以使用xml.etree.ElementTree库来生成和操作XML。 4. **可能的测试用例**:测试用例可以包括发送不同的日期时间值、测试无效输入、测试边界值等。 5. **结构化回答**: - 解释XML模板的含义。 - 展示如何使用Python生成XML。 - 提供编写测试用例的示例代码。 - 建议测试用例场景。 6. **引用处理**:如果有引用到提供的内容,在末尾添加引用标识。例如,如果提到乱码问题或生成XML,可以引用[1]或[2]。 7. **生成相关问题**:在回答结束后,添加"§§相关问题§§"部分,列出相关问题。 回答结构: - 引言:确认需求。 - 逐步指导: - 解析XML模板。 - 修改XML元素。 - 生成测试用例。 - 代码示例。 - 测试用例示例。 - 结束语。 - 相关问题。 代码示例:使用xml.etree.ElementTree来解析和构建XML。用户提到了encoding="UTF-8",所以不需要担心乱码问题,但可以注意编码。 用户提供的XML模板:`<?xml version="1.0" encoding="UTF-8"?><rpc message-id="801" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"><ntpClkDateTime xmlns="http://www.huawei.com/netconf/vrp/huawei-tm"><dateTime>2016-02-22T12:14:59Z</dateTime></ntpClkDateTime></rpc>` 在Python中,我们可以: 1. 解析这个XML字符串。 2. 修改元素如message-id或dateTime。 3. 生成新的XML字符串。 4. 编写函数来生成不同测试用例。 测试用例想法: - 有效日期时间。 - 无效日期时间(如格式错误)。 - 边界值(如最小/最大日期)。 - 空值或缺失元素。 最后,生成相关问题。 </think>### 使用Python基于XML消息模板编写测试用例 基于您提供的XML消息模板(NETCONF RPC消息),我将一步步指导您如何使用Python编写测试用例。XML模板如下: `<?xml version="1.0" encoding="UTF-8"?><rpc message-id="801" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"><ntpClkDateTime xmlns="http://www.huawei.com/netconf/vrp/huawei-tm"><dateTime>2016-02-22T12:14:59Z</dateTime></ntpClkDateTime></rpc>` 此模板描述了一个网络配置协议(NETCONF)的RPC消息,包含命名空间、消息ID和日期时间元素。编写测试用例的关键是动态修改XML元素(如`message-id`或`dateTime`),模拟不同场景(如有效值、边界值或错误输入)。以下是详细步骤和代码实现。 --- ### 步骤1: 理解XML模板结构 - **根元素**:`<rpc>`,带有属性`message-id`和命名空间`xmlns`。 - **子元素**:`<ntpClkDateTime>`,包含自己的命名空间。 - **数据元素**:`<dateTime>`,存储日期时间值(格式为ISO 8601)。 - 测试用例应覆盖: - 修改`message-id`测试消息标识符唯一性。 - 修改`dateTime`测试日期时间有效性(如无效格式、边界值)。 - 添加或删除元素测试协议兼容性。 --- ### 步骤2: 使用Python生成和修改XML 推荐使用Python内置库`xml.etree.ElementTree`(简称ET)处理XML。它支持解析、修改和生成XML字符串,避免乱码问题(注意encoding="UTF-8")[^1]。以下是基础代码框架: ```python import xml.etree.ElementTree as ET from io import BytesIO # 定义XML模板字符串 xml_template = '''<?xml version="1.0" encoding="UTF-8"?> <rpc message-id="801" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> <ntpClkDateTime xmlns="http://www.huawei.com/netconf/vrp/huawei-tm"> <dateTime>2016-02-22T12:14:59Z</dateTime> </ntpClkDateTime> </rpc>''' # 解析XML字符串为ElementTree对象 root = ET.fromstring(xml_template) # 示例:修改message-id属性 root.set('message-id', '802') # 将message-id从801改为802 # 示例:修改dateTime元素文本 datetime_elem = root.find('.//{http://www.huawei.com/netconf/vrp/huawei-tm}dateTime') if datetime_elem is not None: datetime_elem.text = '2023-01-01T00:00:00Z' # 更新日期时间 # 生成新的XML字符串(确保编码为UTF-8) buffer = BytesIO() tree = ET.ElementTree(root) tree.write(buffer, encoding='utf-8', xml_declaration=True) new_xml = buffer.getvalue().decode('utf-8') print(new_xml) # 输出修改后的XML ``` **代码说明**: - `ET.fromstring()` 解析XML字符串。 - `root.set()` 修改属性(如`message-id`)。 - `root.find()` 使用XPath查找元素(注意命名空间需完整)。 - `tree.write()` 生成XML字符串,`xml_declaration=True` 保留声明头[^2]。 - 输出示例(修改后): `<?xml version="1.0" encoding="UTF-8"?><rpc message-id="802" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"><ntpClkDateTime xmlns="http://www.huawei.com/netconf/vrp/huawei-tm"><dateTime>2023-01-01T00:00:00Z</dateTime></ntpClkDateTime></rpc>` --- ### 步骤3: 编写测试用例函数 定义一个函数生成测试用例XML,支持参数化输入(如消息ID、日期时间)。测试用例应覆盖多种场景: ```python def generate_test_case(message_id, datetime_value): """ 生成基于模板的XML测试用例。 参数: message_id (str): 消息ID,如"802" datetime_value (str): 日期时间值,如"2023-01-01T00:00:00Z" 返回: str: 生成的XML字符串 """ # 解析模板 root = ET.fromstring(xml_template) # 修改属性 root.set('message-id', message_id) # 修改dateTime元素 ns = {'huawei': 'http://www.huawei.com/netconf/vrp/huawei-tm'} # 定义命名空间映射 datetime_elem = root.find('.//huawei:dateTime', namespaces=ns) if datetime_elem is not None: datetime_elem.text = datetime_value # 生成XML buffer = BytesIO() tree = ET.ElementTree(root) tree.write(buffer, encoding='utf-8', xml_declaration=True) return buffer.getvalue().decode('utf-8') # 测试用例示例 test_cases = [ {"message_id": "803", "datetime_value": "2023-12-31T23:59:59Z"}, # 场景1: 上限边界值 {"message_id": "804", "datetime_value": "1970-01-01T00:00:00Z"}, # 场景2: 下限边界值 {"message_id": "805", "datetime_value": "invalid-date"}, # 场景3: 无效格式 {"message_id": "806", "datetime_value": ""} # 场景4: 空值 ] # 输出所有测试用例XML for i, params in enumerate(test_cases, 1): xml_output = generate_test_case(params["message_id"], params["datetime_value"]) print(f"测试用例 {i}:\n{xml_output}\n") ``` **测试场景解释**: - **边界值测试**:检查日期时间在有效范围(如1970-01-01到2038-01-19)是否正确处理。 - **错误输入测试**:模拟无效格式或空值,验证系统错误处理。 - **消息ID唯一性**:测试ID重复或超长时系统的行为。 - 输出可直接用于发送到NETCONF服务器或解析验证。 --- ### 注意事项 1. **命名空间处理**:XML包含多个命名空间(如`urn:ietf:params:xml:ns:netconf:base:1.0`),在查找元素时需使用完整命名空间或定义映射(如上例中的`ns`)。 2. **编码问题**:确保输入输出使用UTF-8编码,避免中文乱码[^1]。如果文件操作,添加`# -*- coding:utf-8 -*-`头。 3. **XML完整性**:修改后保留`xml_declaration`确保声明头完整[^2]。若要去除声明头(非推荐),可参考字符串处理[^3],但可能影响协议兼容性。 4. **扩展建议**:结合单元测试框架(如`unittest`或`pytest`)自动化测试,验证XML响应是否符合预期。 如需进一步优化(如添加元素或处理更大模板),请提供更多细节。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值