关于测试的方法论,都是创建在以前的文章里面提到的观点:javascript
后面所谈到的 测试自动化 也将围绕着 接口自动化 来介绍。html
目前互联网行业流行的“一服务,多客户端”的架构是一种 可测试性好 的架构,架构图以下:java
基于如上特色,此系统的接口自动化测试简化表述,就是须要作以下事情:python
固然,以上纯粹是从技术的角度来阐述问题,若是要和具体的项目结合起来 ,还须要设计不一样的步骤和数据来知足不一样的业务逻辑需求。git
对于如上4个目的,有以下几个框架或者工具能够实现:github
一个Http请求库,号称是让Http的请求对人更友好,此框架也确实达到此目的了。json
python提供的对json和python数据类型的转化库bash
pyunit自动化框架提供了大量的assert断言方法来自动化进行数据逻辑断定服务器
做为一个强大的IDE,其在项目组织方面的表现也一样是极其出色的架构
关于 pyunit 和 pycharm 在本系列文章的上一节里面已经进行了介绍,此处再也不重复介绍,本文的重点则是python的两个和http通信及数据解析相关的库:requests库 和 json库 。
中文官方主页:
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等等)都有本身的实现方式,这些也均可以参考
本文的主打语言是Python语言,所展开的内容也是和Python语言相关,在JSON官网 [1] 上提供了以下几种Python语言的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编码解码数据对应表 |
官方主页:
http://docs.python-requests.org/en/master/
requests库是一个专门封装的,对用户极其友好的一个Http请求库,其目的就是为了让python下面的Http请求变得更简单,并且它确实也达到它的目的了。
安装方法:
pip install requests
目前的通常的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" }, ... }
再结合一下pyunit的判断库,就能够根据以下流程,作一个最简单的接口自动化测试脚本:
下面是对一个用户登陆的接口进行测试,按照设计文档,此接口若是登陆成功,则返回的字符格式是:
{ "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='222222', ) res = requests.post(url, data=params) print res.text res_dict = json.loads(res.text) self.assertEqual(res_dict['code'], 200)
运行结果:
经过上面运行结果的提示,咱们能够看出,指定的数据输入通过服务端接口后,并无返回咱们指望的值。这个时候,咱们就能够排查是否是服务端的接口出问题了,或者是谁修改了测试数据,致使结果不符合预期。
本小部分的内容,主要是讲如何利用 requests库 和 json库 来轻松构建Http接口自动化测试的项目。基本上若是掌握了如上技能,测试开发人员就具有了自动化脚本开发的能力了,后面主就是结合具体的项目需求来进行逻辑设计和数据准备了。
只须要这一步,你就迈入了自动化测试之门了,恭喜。
积少成多,无数的上文提到的接口自动化测试脚本,就能够聚集成一个自动化化测试项目,而此自动化测试项目则是 持续集成,快速迭代必备条件,最后做为测试人员也能成为整个项目推动中很重要的一环了。
做者: | Harmo哈莫 |
---|---|
做者介绍: | https://zhengwh.github.io |
技术博客: | http://www.cnblogs.com/beer |
Email: | dreamzsm@gmail.com |
QQ: | 1295351490 |
时间: | 2016-02 |
版权声明: | 欢迎以学习交流为目的读者随意转载,可是请 【注明出处】 |
支持本文: | 若是文章对您有启发,能够点击博客右下角的按钮进行 【推荐】 |