好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

python自动化测试总结篇【4】

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://HdhCmsTestjson.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://HdhCmsTestbaidu测试数据'
????res?=?requests.get(url)
????print?res.url
????print?res.status_code


if?__name__?==?'__main__':
????get_demo()

运行结果:

http://HdhCmsTestbaidu测试数据/
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='222222',

????)

????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接口自动化测试的项目。基本上如果掌握了如上技能,测试开发人员就具备了自动化脚本开发的能力了,后面主就是结合具体的项目需求来进行逻辑设计和数据准备了。

只需要这一步,你就迈入了自动化测试之门了,恭喜。

聚沙成塔,无数的上文提到的接口自动化测试脚本,就可以汇集成一个自动化化测试项目,而此自动化测试项目则是 持续集成,快速迭代必备条件,最后作为测试人员也能成为整个项目推进中很重要的一环了。

在这段时间,整理资料已经成了我的习惯!下面是我收集和整理的资源

对于学习软件测试的的朋友来说应该是最全面的备战仓库了,有很多朋友靠着这些内容进行复习,拿到了BATJ等大厂的offer,这个仓库也已经帮助了很多的软件测试的学习者,希望也能帮助到你!

乾坤未定,你我皆是黑马

关注微信公众号:【程序员二黑】 即可免费获取这份仓库资源啦!

查看更多关于python自动化测试总结篇【4】的详细内容...

  阅读:34次