黑马程序员技术交流社区

标题: 使用第三方python库技术实现python自动化测试 [打印本页]

作者: 小江哥    时间: 2019-5-22 10:53
标题: 使用第三方python库技术实现python自动化测试
1   概述关于测试的方法论,都是建立在之前的文章里面提到的观点:
后面所谈到的 测试自动化 也将围绕着 接口自动化 来介绍。
2   可测试架构目前互联网行业流行的“一服务,多客户端”的架构是一种 可测试性好 的架构,架构图如下:
3   自动化技术实现基于如上特点,此系统的接口自动化测试简化表述,就是需要做如下事情:
当然,以上纯粹是从技术的角度来阐述问题,如果要和具体的项目结合起来 ,还需要设计不同的步骤和数据来满足不同的业务逻辑需求。
对于如上4个目的,有如下几个框架或者工具可以实现:
关于 pyunitpycharm 在本系列文章的上一节里面已经进行了介绍,此处不再重复介绍,本文的重点则是python的两个和http通讯及数据解析相关的库:requests库json库

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(Python标准库)
官方文档地址:
1
https://docs.python.org/2/library/json.html




主要的功能就是:JSON编码和解码。
主要函数:
以上的几个接口容易混淆记忆,引处提供一个辨识技巧:后面带有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'
字符串编码:
[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-8import 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_codeif __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的判断库,就可以根据如下流程,做一个最简单的接口自动化测试脚本:
下面是对一个用户登录的接口进行测试,按照设计文档,此接口如果登录成功,则返回的字符格式是:
[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接口自动化测试的项目。基本上如果掌握了如上技能,测试开发人员就具备了自动化脚本开发的能力了,后面主就是结合具体的项目需求来进行逻辑设计和数据准备了。
只需要这一步,你就迈入了自动化测试之门了,恭喜。
聚沙成塔,无数的上文提到的接口自动化测试脚本,就可以汇集成一个自动化化测试项目,而此自动化测试项目则是 持续集成,快速迭代必备条件,最后作为测试人员也能成为整个项目推进中很重要的一环了





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2