- 功能测试不建议做自动化
- 接口测试性价比最高
- 接口测试可以做自动化
- 做好接口自动化,一定要有透过界面看到数据本质的能力
2 可测试架构目前互联网行业流行的“一服务,多客户端”的架构是一种 可测试性好 的架构,架构图如下:
- 服务器和客户端采用Http(或者WebSocket)的方式进行通讯
- 数据交换的格式一般是Json(或者XML)
- 因为下游设备众多,所以服务端接口有很强的稳定性要求
- 使用脚本对接口进行Http请求
- 对返回值解析
- 按照设计文档进行判定
- 以项目的方式组织测试脚本形成自动化测试项目
对于如上4个目的,有如下几个框架或者工具可以实现:
- requests一个Http请求库,号称是让Http的请求对人更友好,此框架也确实达到此目的了。
- jsonpython提供的对json和python数据类型的转化库
- pyunitpyunit自动化框架提供了大量的assert断言方法来自动化进行数据逻辑判定
- pycharm作为一个强大的IDE,其在项目组织方面的表现也同样是极其出色的
4 json4.1 基本介绍中文官方主页:
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.
官方文档地址:
1 | https://docs.python.org/2/library/json.html |
主要的功能就是:JSON编码和解码。
主要函数:
以上的几个接口容易混淆记忆,引处提供一个辨识技巧:后面带有s结尾(loads,dumps),都是对字符串变量 str的处理。
- 解码函数(装载):将字符流转化为json对象
- loads: 载入字符串变量
- load:载入文件流
- 编码函数(卸载):将json对象转化为字符流
- dumps:输出到字符串变量
- dump:输出到文件流
一般情况下,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
'
字符串编码:
[url=][/url]
>>>
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
"
[url=][/url]关于python标准数据类型和Json的数据类型之间转化的对应关系请见官网 [2]
[1] | (1, 2, 3) JSON官网 |
[2] | Python的Json编码解码数据对应表 |
5 requests5.1 基本介绍官方主页:
1 | http://docs.python-requests.org/en/master/ |
requests库是一个专门封装的,对用户极其友好的一个Http请求库,其目的就是为了让python下面的Http请求变得更简单,而且它确实也达到它的目的了。
安装方法:
1 | pip install requests |
5.2 使用示例目前的一般的Web应用程序都是基于get或者post请求,对于这两种Http请求,requests库都提供了十分优雅的解决方案。
最基本的get请求
[url=][/url]
#
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()
[url=][/url]运行结果:
1 2 | http://www.baidu.com/ 200 |
带参数的get请求:
>>> payload = {
'
key1
'
: '
value1
'
, '
key2
'
: '
value2
'
}
>>> r = requests.get('
http://httpbin.org/get
'
, params=payload)带参数的post请求:
[url=][/url]
>>> payload = {
'
key1
'
: '
value1
'
, '
key2
'
: '
value2
'
}
>>> r = requests.post("
http://httpbin.org/post
"
, data=payload)
>>> print
(r.text){ ...
"
form
"
: {
"
key2
"
: "
value2
"
,
"
key1
"
: "
value1
"
}, ...}
[url=][/url]6 综合示例再结合一下pyunit的判断库,就可以根据如下流程,做一个最简单的接口自动化测试脚本:
- 根据文档准备好请求参数
- 对指定的http接口进行requests请求
- 对返回的字符串进行json解析
- 使用pyunit的assert函数进行判定
- 生成相应的测试报告,导出或者和信息系统对接
[url=][/url]
{
"
code
"
:200,
"
msg
"
:""
,
"
data
"
:{
"
token
"
: "
382998dafa5143fd8a38c535be0d1502
"
}}
[url=][/url]如果登录失败,则返回如下值:
1 | {"code":403,"msg":"forbidden","data":""} |
则相应的测试脚本代码为
[url=][/url]
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)[url=][/url]运行结果:
通过上面运行结果的提示,我们可以看出,指定的数据输入经过服务端接口后,并没有返回我们期望的值。这个时候,我们就可以排查是不是服务端的接口出问题了,或者是谁修改了测试数据,导致结果不符合预期。
7 小结本小部分的内容,主要是讲如何利用 requests库 和 json库 来轻松构建Http接口自动化测试的项目。基本上如果掌握了如上技能,测试开发人员就具备了自动化脚本开发的能力了,后面主就是结合具体的项目需求来进行逻辑设计和数据准备了。
只需要这一步,你就迈入了自动化测试之门了,恭喜。
聚沙成塔,无数的上文提到的接口自动化测试脚本,就可以汇集成一个自动化化测试项目,而此自动化测试项目则是 持续集成,快速迭代必备条件,最后作为测试人员也能成为整个项目推进中很重要的一环了.
更多Python学习技术可关注:itheimaGZ获取.