python自动化测试(4)-使用第三方python库技术实现
python自动化测试(4)-使用第三方python库技术实现
1 概述
关于测试的方法论,都是建立在之前的文章里面提到的观点:
- 功能测试不建议做自动化
- 接口测试性价比最高
- 接口测试可以做自动化
- 做好接口自动化,一定要有透过界面看到数据本质的能力
后面所谈到的 测试自动化 也将围绕着 接口自动化 来介绍。
2 可测试架构
目前互联网行业流行的“一服务,多客户端”的架构是一种 可测试性好 的架构,架构图如下:

- 服务器和客户端采用Http(或者WebSocket)的方式进行通讯
- 数据交换的格式一般是Json(或者XML)
- 因为下游设备众多,所以服务端接口有很强的稳定性要求
3 自动化技术实现
基于如上特点,此系统的接口自动化测试简化表述,就是需要做如下事情:
- 使用脚本对接口进行Http请求
- 对返回值解析
- 按照设计文档进行判定
- 以项目的方式组织测试脚本形成自动化测试项目
当然,以上纯粹是从技术的角度来阐述问题,如果要和具体的项目结合起来 ,还需要设计不同的步骤和数据来满足不同的业务逻辑需求。
对于如上4个目的,有如下几个框架或者工具可以实现:
- requests
-
一个Http请求库,号称是让Http的请求对人更友好,此框架也确实达到此目的了。
- json
-
python提供的对json和python数据类型的转化库
- pyunit
-
pyunit自动化框架提供了大量的assert断言方法来自动化进行数据逻辑判定
- pycharm
-
作为一个强大的IDE,其在项目组织方面的表现也同样是极其出色的
关于 pyunit 和 pycharm 在本系列文章的上一节里面已经进行了介绍,此处不再重复介绍,本文的重点则是python的两个和http通讯及数据解析相关的库:requests库 和 json库 。
4 json
4.1 基本介绍
中文官方主页:
http://www.json.org/json-zh.html
关于JSON的使用介绍,目前已经不言而喻。虽然在好多年前,曾经有XML和JSON在 数据编解码 领域平分秋色的说法,但是这么多年过去后,JSON的势头越来越好,而XML的声音则越来越小。
关于JSON的定义,引用官网的原文 [1]:
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使JSON成为理想的数据交换语言。
目前JSON显然已经成为了互联网上字符型数据交换的标准编解码的中坚力量,作为互联网的开发人员,是很有必要了解它,运用它的。
JSON作为一种字符串的编码和解码规划,是和语言无关的,JSON官网 [1] 上有各种语言的。各种语言(Java/Php/C#/C/C++/Python/R/Ruby等等)都有自己的实现方式,这些也都可以参考
4.2 python库
本文的主打语言是Python语言,所展开的内容也是和Python语言相关,在JSON官网 [1] 上提供了如下几种Python语言的JSON库:
- The Python Standard Library.
- simplejson.
- pyson.
- Yajl-Py.
- ultrajson.
- metamagic.json.
一般情况下,都使用第一个: The Python Standard Library(Python标准库)
官方文档地址:
https://docs.python.org/2/library/json.html
主要的功能就是:JSON编码和解码。
主要函数:
- 解码函数(装载):将字符流转化为json对象
- loads: 载入字符串变量
- load:载入文件流
- 编码函数(卸载):将json对象转化为字符流
- dumps:输出到字符串变量
- dump:输出到文件流
以上的几个接口容易混淆记忆,引处提供一个辨识技巧:后面带有s结尾(loads,dumps),都是对字符串变量 str 的处理。
一般情况下,loads,dumps使用得最多,因为大部分的程序运算都是内存运算,即主要是对字符串变量进行处理,以下是官网的示例。
字符串解码:
>>> import json
>>> json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]')
[u'foo', {u'bar': [u'baz', None, 1.0, 2]}]
>>> json.loads('"\\"foo\\bar"')
u'"foo\x08ar'
字符串编码:
>>> import json
>>> json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}])
'["foo", {"bar": ["baz", null, 1.0, 2]}]'
>>> print json.dumps("\"foo\bar")
"\"foo\bar"
>>> print json.dumps(u'\u1234')
"\u1234"
关于python标准数据类型和Json的数据类型之间转化的对应关系请见官网 [2]
[1] | (1, 2, 3) JSON官网 |
[2] | Python的Json编码解码数据对应表 |
5 requests
5.1 基本介绍
官方主页:
http://docs.python-requests.org/en/master/
requests库是一个专门封装的,对用户极其友好的一个Http请求库,其目的就是为了让python下面的Http请求变得更简单,而且它确实也达到它的目的了。
安装方法:
pip install requests
5.2 使用示例
目前的一般的Web应用程序都是基于get或者post请求,对于这两种Http请求,requests库都提供了十分优雅的解决方案。
最基本的get请求
# coding:utf-8
import requests __author__ = 'harmo' def get_demo():
"""
requests 的get方法演示,不带参数
by:Harmo
:return:
"""
url = 'http://www.baidu.com'
res = requests.get(url)
print res.url
print res.status_code if __name__ == '__main__':
get_demo()
运行结果:
http://www.baidu.com/
200
带参数的get请求:
>>> payload = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.get('http://httpbin.org/get', params=payload)
带参数的post请求:
>>> payload = {'key1': 'value1', 'key2': 'value2'} >>> r = requests.post("http://httpbin.org/post", data=payload)
>>> print(r.text)
{
...
"form": {
"key2": "value2",
"key1": "value1"
},
...
}
6 综合示例
再结合一下pyunit的判断库,就可以根据如下流程,做一个最简单的接口自动化测试脚本:
- 根据文档准备好请求参数
- 对指定的http接口进行requests请求
- 对返回的字符串进行json解析
- 使用pyunit的assert函数进行判定
- 生成相应的测试报告,导出或者和信息系统对接
下面是对一个用户登录的接口进行测试,按照设计文档,此接口如果登录成功,则返回的字符格式是:
{
"code":200,
"msg":"",
"data":{
"token": "382998dafa5143fd8a38c535be0d1502"
}
}
如果登录失败,则返回如下值:
{"code":403,"msg":"forbidden","data":""}
则相应的测试脚本代码为
def test_admin_user_login(self):
"""
测试用户登录
by:Harmo
:return:
""" url = "%s%s" % (self.base_url, '/task/admin-user-login/') params = dict(
user='admin',
password='', ) res = requests.post(url, data=params)
print res.text res_dict = json.loads(res.text)
self.assertEqual(res_dict['code'], 200)
运行结果:
通过上面运行结果的提示,我们可以看出,指定的数据输入经过服务端接口后,并没有返回我们期望的值。这个时候,我们就可以排查是不是服务端的接口出问题了,或者是谁修改了测试数据,导致结果不符合预期。
7 小结
本小部分的内容,主要是讲如何利用 requests库 和 json库 来轻松构建Http接口自动化测试的项目。基本上如果掌握了如上技能,测试开发人员就具备了自动化脚本开发的能力了,后面主就是结合具体的项目需求来进行逻辑设计和数据准备了。
只需要这一步,你就迈入了自动化测试之门了,恭喜。
聚沙成塔,无数的上文提到的接口自动化测试脚本,就可以汇集成一个自动化化测试项目,而此自动化测试项目则是 持续集成,快速迭代必备条件,最后作为测试人员也能成为整个项目推进中很重要的一环了。
作者: | Harmo哈莫 |
---|---|
作者介绍: | https://zhengwh.github.io |
技术博客: | http://www.cnblogs.com/beer |
Email: | dreamzsm@gmail.com |
QQ: | 1295351490 |
时间: | 2016-02 |
版权声明: | 欢迎以学习交流为目的读者随意转载,但是请 【注明出处】 |
支持本文: | 如果文章对您有启发,可以点击博客右下角的按钮进行 【推荐】 |
python自动化测试(4)-使用第三方python库技术实现的更多相关文章
- Python中导入第三方声源库Acoular的逻辑解释以及Acoular的下载
[声明]欢迎转载,但请保留文章原始出处→_→ 秦学苦练:http://www.cnblogs.com/Qinstudy/ 文章来源:http://www.cnblogs.com/Qinstudy/p/ ...
- Python用pip安装第三方库时换源下载
pip默认是从Python官网下载第三方库,从国外下载当然不如从国内下载来得快 豆瓣:https://pypi.doubanio.com/simple 还有其它源,阿里云等等,一个就够用了 用pip安 ...
- Python自动化测试常用库
基本库: sys 程序和Python解析器的交互 os 启动新进程:操作文件和目录 re 正则表达式,字符串匹配 string 基本字符串操作 inspect 提供自省和反射功能 importlib ...
- python 操作excle 之第三方库 openpyxl学习
目录 python 操作excle 之第三方库 openpyxl学习 安装 pip install openpyxl 英文文档链接 : 点击这里~ 1,定位excel 2,读取excle中的内容 3, ...
- python文件打开模式&time&python第三方库
r:以只读方式打开文件.文件的指针将会放在文件的开头.这是默认模式. w:打开一个文件只用于写入.如果该文件已存在则将其覆盖.如果该文件不存在,创建新文件. a:打开一个文件用于追加.如果该文件已存在 ...
- Python之安装第三方扩展库
PyPI 地址:https://pypi.python.org/pypi 如果你知道你要找的库的名字,那么只需要在右上角搜索栏查找即可. 1.pip安装扩展库 (1)安装最新版本的扩展库: cmd&g ...
- python自动化测试(3)- 自动化框架及工具
python自动化测试(3) 自动化框架及工具 1 概述 手续的关于测试的方法论,都是建立在之前的文章里面提到的观点: 功能测试不建议做自动化 接口测试性价比最高 接口测试可以做自动化 后面所谈到 ...
- 学习Python要知道哪些重要的库和工具
本文转自:https://github.com/jobbole/awesome-python-cn 环境管理 管理 Python 版本和环境的工具 p:非常简单的交互式 python 版本管理工具. ...
- selenium + python 自动化测试环境搭建
selenium + python 自动化测试 —— 环境搭建 关于 selenium Selenium 是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操 ...
随机推荐
- 【HTML5】 web上的音频
<!-- audio通过属性的设置可以控制音频播放的行为: 表6-2 audio元素的属性 ——————————————————————————————————————————————————— ...
- swift 单独部署,开发
部署环境 virtualBox Ubuntu 14.04 desktop OpenStack Swift (kilo) 说明 此文档为基于官方修改的只针对Ubuntu 14.04,完整的参阅官方文档 ...
- vim 基本使用
vim 下基本命令 重新加载 .vimrc source ~/.vimrc 列出当前缓冲区的所有文档 ls 然后使用 b+编号 移至该文档 选中多行 v + shift 然后 j k 上下移动 缩进单 ...
- 进击的Python【第六章】:Python的高级应用(三)面向对象编程
Python的高级应用(三)面向对象编程 本章学习要点: 面向对象编程介绍 面向对象与面向过程编程的区别 为什么要用面向对象编程思想 面向对象的相关概念 一.面向对象编程介绍 面向对象程序设计(英语: ...
- 【转】SSL协议、SET协议、HTTPS简介
一.SSL协议简介 SSL是Secure Socket Layer的缩写,中文名为安全套接层协议层.使用该协议后,您提交的所有数据会首先加密后,再提交到网易邮箱,从而可以有效防止黑客盗取您的用户名.密 ...
- windows 常用命令整合--脚本工具
到年终了,手里活不多了,平时就想着将平时一些常用的命令整合一下,于是下面的一个小小脚本就出来了... 好了,直接上菜:(http://files.cnblogs.com/files/hsuchan/c ...
- asp.net中用cookie记住密码上次不用登陆
------最佳解决方案--------------------写入CookieResponse.Cookies["UserName"].Value = "用户名&quo ...
- 使用canal分析binlog(二) canal源码分析
在能够跑通example后有几个疑问 1. canal的server端对于已经读取的binlog,client已经ack的position,是否持久化,保存在哪里 2. 即使不启动zookeeper, ...
- 不使用return false阻止event默认行为
当我们点击一个a标签时,如果这个标签的href指向了另一个地址,那么浏览器会默认跳转到此地址.在页面中,有时我们需要触发点击事件,但是又不想触发默认行为,就需要阻止event的默认行为了. 常规做法 ...
- Artifact Project3:war exploded: Error during artifact deployment. See server log for details.
第一次建Struts2 idea遇到了这个问题,很莫名其妙,搞了几天没解决,几乎要放弃idea了.最后解决的时候也很突然.回想解决的过程,大致如下. 第一种情况:File->Project St ...