点击标题下「微信」可快速关注

坚持的是分享,搬运的是知识,图的是大家的进步,没有收费的培训,没有虚度的吹水,喜欢就关注、转发(免费帮助更多伙伴)等来交流,想了解的知识请留言,给你带来更多价值,是我们期待的方向,有更多兴趣的欢迎切磋,我们微信订阅号,联系方式如下:

更多书籍,敬请期待

背景说明

我们清楚的知道自动化测试包含UI自动化、接口自动化、单元自动化,其中接口自动化测试可以说是性价比比较高的,我们今天不讲如何开展接口自动化测试,而是来看看接口测试框架的神秘。小怪带领着大家一起简单轻松的完成接口测试框架,只需要完成6次python(2.7版本)作业,就好了。这些课程是在内部经过实践的,0基础掌握的关键看你是否action起来,我会分为6次,逐步分享出来,想学的就往下看吧,本期是第3课。

1作业内容

题目2:获取xml文件中TestedParam和TestedObj标签的值


<?xml version="1.0" encoding="UTF-8" ?><!--测试配置按需扩展-->

<AutoTestConfig shelf="myshelf">                      <!--自动化测试配置-->

<TestedObject p="0.01"><!--被测对象性质 -->

<TestedName>ifr</TestedName><!--被测对象名称,会带入结果数据表-->

<TestedObj>HTTP</TestedObj><!--被测对象类型,会带入结果数据表-->

<TestedVersion>5.0</TestedVersion><!--被测对象版本,会带入结果数据表-->

<TestedFile></TestedFile><!--被测对象msc文件位置-->

<TestedParam>172.161.116.29:8081/</TestedParam>

<TestedLogLevel>2</TestedLogLevel><!--被测对象msc日志记录级别位置-->

<TestedLogDir>Result</TestedLogDir><!--被测对象msc日志位置 -->

<TestedType>发布版1.0</TestedType> <!--被测对象类型(如现网、灰度环境、测试环境等),会带入结果数据表-->

</TestedObject>

<TestedObject><!--被测对象性质 -->

<TestedName>ifr</TestedName><!--被测对象名称,会带入结果数据表-->

<TestedObj>HTTP</TestedObj><!--被测对象类型,会带入结果数据表-->

<TestedVersion>5.0</TestedVersion><!--被测对象版本,会带入结果数据表-->

<TestedFile></TestedFile><!--被测对象msc文件位置-->

<TestedParam>172.161.116.52:8080/</TestedParam>

<TestedLogLevel>2</TestedLogLevel><!--被测对象msc日志记录级别位置-->

<TestedLogDir>Result</TestedLogDir><!--被测对象msc日志位置 -->

<TestedType>发布版2.0</TestedType> <!--被测对象类型(如现网、灰度环境、测试环境等),会带入结果数据表-->

</TestedObject>

</AutoTestConfig>

2相关知识点

此外提供同事(沈军)的总结知识:

【设计思路】

Python有三种方法解析XML: SAX,DOM,以及ElementTree:

SAX是一种基于事件驱动的API

优点:SAX流式读取XML文件,比较快,占用内存少。

缺点:需要用户实现回调函数(handler)

DOM一次性读取整个文档将XML数据在内存中解析成一个树,通过对树的操作来操作XML

优点:使用DOM的好处是你不需要对状态进行追踪,因为每一个节点都知道谁是它的父节点,谁是子节点.

缺点:DOM需要将XML数据映射到内存中的树,一是比较慢,二是比较耗内存,使用起来也比较麻烦!

ElementTree就像一个轻量级的DOM,具有方便友好的API。代码可用性好,速度快,消耗内存少。

综上,本例选用ElementTree来实现

同事的分享 PPT(周莹)


原件获取地址:https://yunpan.cn/cv5RYGCyc9iFp  访问密码 687e

3参考例子一

代码较长,获取地址:https://yunpan.cn/cv5RYGCyc9iFp  访问密码 687e

4同事(李沁)的感悟

作业内容

这次作业要求获取xml文件中TestedParam和TestedObj标签的值。

本来觉得比较简单,没想到在读取中文名文件这里就花了一点时间。我以前写简单的脚本都是用英文名,所以竟然是第一次遇到这个坑。调试一番,最后是使用了encodefilename= os.getcwd() + "\\" + xmlfile.decode("utf-8").encode("gbk")获取当前目录,然后先将文件名进行uft-8解码再按照gbk编码。

后面就好说了,使用xml.dom这个包,很容易就得到想要的tag标签的内容。仍需要gbk编码一次。将查询到的内容保存在字典里,选择字典是因为字典本身和标签一样具有成对的特性,最后输出。

字符编码处理

找到一篇很好的PYTHON-进阶-编码处理小结很好地说明了关于Python处理字符编码的问题。作者对于整个项目,提出的建议是规范统一编码,对于具体的一个文件内的处理顺序,他提出的原则如下,我觉得挺好的。

1. Decode early

2. Unicode everywhere

3. Encode later

关于本次作业,在头部定义#coding=utf-8后,在这个py文件内部,编码是utf-8的。而控制台默认编码是gbk。如果直接使用xmlfile在控制台输出是浣滀笟2.xml所以需要先用utf-8解码,再用gbk编码告诉控制台,完整语句如下:

realfilename= os.getcwd() + "\\" +xmlfile.decode("utf-8").encode("gbk")
在写作业小结时,我又发现了新的情况。如果目录不含中文,那么第二步gbk编码可以不需要,也能输出正确结果。os.getcwd()的部分不应该影响后面的编码的,这里又不是很理解了。

以及,在与周莹探讨这个问题时,发现如果将文件保存编码修改为GB2312,在头处声明为 #coding=gbk(声明为utf-8也一样),就可以在直接使用 xmlfile = “作业2.xml”了。即编译器进行编译运行时,是根据文件保存时的编码来的,而不是头部声明。(Eclipse保存文件时会根据声明来保存为不同编码的文件,Notepad++默认保存为UTF-8格式)

不同的字符编码

ASCII编码(美国信息交换标准代码)

1967年提出,使用一个字节(8位),从00000000到11111111表示256个字母或符号。实际定义使用的是128个,其中33个不可显示(多数是废除使用的控制字元),95个可以显示。这95个包括在键盘上直接能按出来的大小写英文字母、数字、符号。

非ASCII编码

某些欧洲国家使用一些奇特的编码体系,将ASCII编码没有定义那些位置拿来定义成é之类的字母,仍然使用一个字节来表示。
亚洲国家字太多了,一个字节无论如何也放不下,就有一些其他编码方式。我们熟悉的汉字编码,比如GBK、GB2312都算这类。

Unicode字符集(万国码)

Unicode本身不是一种编码,而是一个大集合,把所有的字母符号都纳入其中。Unicode只规定了每个字符对应的编码号,但并没有给出存储方法(所以百花齐放了)。比如在word里输入674E,按键盘的Alt+X,就可以变成李。这是因为在word里,是采用Unicode(十六进制),就是UTF-16来存储的。点开符号也看得到如下的列表。
UTF-8编码

UTF-8是Unicode的实现方式之一,类似的UTF-16(一个字符采用两个字节或四个字节表示)、UTF-32(一个字符采用四个字节表示)都是对Unicode字符集的实现方式。UTF-8使用最为广泛。UTF-8是变长编码方式,可以根据需要使用一到四个字节表示一个字符。

UTF-8的编码规则很简单,只有二条:

1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。

2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。

ANSI编码

在Windows自动notepad记事本保存时可以选择ANSI编码。这其实是Windows给中文用户提供的一种默认混合编码,对于英文文件是ASCII编码,对于简体中文文件是GB2312编码(只针对Windows简体中文版,如果是繁体中文版会采用Big5码)。

大端和小端存储方式

上面保存选择编码的页面也看到了Unicode big endian(对应另一种就是小端)。大端和小端就是在需要两个字节存储一个字符时(比如UTF-16),按照本身样子存就是大端,两个字节倒过来就是小端。比如674E是UTF-16的李字,67 4E 的存法是大端,4E 67 是小端。
对此Unicode规定在文件头要加入表示编码顺序的字符,就是FE FF两个字节,FE FF是大端,FF FE是小端。

到此,我们第2次作业,需要的知识点和参考的样例全部奉献出来了,action起来!

推荐的文章

历史精彩分享,目录清单

初探接口测试框架--python系列1

初探接口测试框架--python系列2

Fiddler录制jmeter脚本,干货分享

jmeter随笔(12)--定制json响应结果断言

jmeter接口自动化,你敢想,我敢玩

接口测试实战--SoapUI Pro5.1.2

测试路上,聊聊思路,谈谈手段

移动性能测试工具iTest4.1

↓↓↓ 点击"阅读原文" 【查看更多信息】

初探接口测试框架--python系列3的更多相关文章

  1. 初探接口测试框架--python系列7

    点击标题下「蓝色微信名」可快速关注 坚持的是分享,搬运的是知识,图的是大家的进步,没有收费的培训,没有虚度的吹水,喜欢就关注.转发(免费帮助更多伙伴)等来交流,想了解的知识请留言,给你带来更多价值,是 ...

  2. 初探接口测试框架--python系列2

    点击标题下「蓝色微信名」可快速关注 坚持的是分享,搬运的是知识,图的是大家的进步,没有收费的培训,没有虚度的吹水,喜欢就关注.转发(免费帮助更多伙伴)等来交流,想了解的知识请留言,给你带来更多价值,是 ...

  3. 初探接口测试框架--python系列4

    点击标题下「蓝色微信名」可快速关注 坚持的是分享,搬运的是知识,图的是大家的进步,没有收费的培训,没有虚度的吹水,喜欢就关注.转发(免费帮助更多伙伴)等来交流,想了解的知识请留言,给你带来更多价值,是 ...

  4. 初探接口测试框架--python系列5

    点击标题下「蓝色微信名」可快速关注 坚持的是分享,搬运的是知识,图的是大家的进步,没有收费的培训,没有虚度的吹水,喜欢就关注.转发(免费帮助更多伙伴)等来交流,想了解的知识请留言,给你带来更多价值,是 ...

  5. 初探接口测试框架--python系列6

    点击标题下「蓝色微信名」可快速关注 坚持的是分享,搬运的是知识,图的是大家的进步,没有收费的培训,没有虚度的吹水,喜欢就关注.转发(免费帮助更多伙伴)等来交流,想了解的知识请留言,给你带来更多价值,是 ...

  6. 初探接口测试框架--python系列1

    点击标题下「蓝色微信名」可快速关注 坚持的是分享,搬运的是知识,图的是大家的进步,没有收费的培训,没有虚度的吹水,喜欢就关注.转发(免费帮助更多伙伴)等来交流,想了解的知识请留言,给你带来更多价值,是 ...

  7. http接口测试框架-python

    简单分解一下 接口测试框架设计: 主入口 -> 遍历接口/用例 -> 发送请求+接收响应 ->结果的对比 -> 生成报告 ->发送email 分成几大类:主入口的py文件 ...

  8. Macaca 自动化框架 [Python 系列]

    介绍 Macaca是一套完整的自动化测试解决方案,基于node.js开发.由阿里巴巴公司开源: 地址:http://macacajs.github.io/macaca/ 特点: 同时支持PC端和移动端 ...

  9. 【转】基于Python的接口测试框架实例

    下面小编就为大家带来一篇基于Python的接口测试框架实例.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧   背景 最近公司在做消息推送,那么自然就会产生很多接口,测试 ...

随机推荐

  1. 清理SQL Server日志释放文件空间的终极方法

    清理SQL Server日志释放文件空间的终极方法  转自:http://www.cnblogs.com/dudu/archive/2013/04/10/3011416.html [问题场景]有一个数 ...

  2. Chrome离线下载地址

    每当chrome有更新之后,都有不少用户想要下载离线版的安装文件,但苦于找不到下载地址而发愁,其实这个问题很简单,下面我来分享一下方法(仅针对Windows操作系统): 对于稳定版(正式版)Chrom ...

  3. ifconfig报错:SIOCSIFFLAGS: Operation not permitted

    # insmod mt7601Usta.ko rtusb init rt2870 --->usbcore: registered new interface driver rt2870 # iw ...

  4. 纯js上传控件——fineuploader

    fineuploader是一款基于ajax实现文件上传的插件,具有以下有点: A:支持文件上传进度显示. B:文件拖拽浏览器上传方式 C:Ajax页面无刷新. D:多文件上传. F:跨浏览器. E:跨 ...

  5. SqlServer——阻止保存要求重新创建表的更改

    场景: 修改已有数据的列宽时,提示“阻止保存要求重新创建表的更改”. 解决: 工具-〉选项-〉左侧有个 设计器-〉表设计器和数据库设计器 -> 阻止保存要求重新创建表的更改(右侧) 把钩去掉即可 ...

  6. ARM Linux从Bootloader、kernel到filesystem启动流程

    转自:http://www.veryarm.com/1491.html ARM Linux启动流程大致为:bootloader ---->kernel---->root filesyste ...

  7. 在 Perl 中使用 Getopt::Long 模块来接收用户命令行参数

    我们在linux常常用到一个程序需要加入参数,现在了解一下 perl 中的有关控制参数的模块 Getopt::Long ,比直接使用 @ARGV 的数组强大多了.我想大家知道在 Linux 中有的参数 ...

  8. Dictionary 的使用

    1. 定义字典变量,并初始化 // 元素值字典 Dictionary<string, string> dic = new Dictionary<string, string>( ...

  9. 尽量采用as操作符而不是旧式C风格做强制类型转换

    http://www.cnblogs.com/JiangSoney/archive/2009/08/07/1541488.html MSDN: https://msdn.microsoft.com/z ...

  10. JavaScript中Eval()函数的使用

    Eval()常用的几种形式 1.我们预先不知道要执行什么语句,只有当条件和参数给时才知道执行什么语句,这时候eval就派上用场了. function output(a, b) { var tmpa, ...