python自动化测试(4)-使用第三方python库技术实现

news2024/11/26 21:53:25

1   概述

关于测试的方法论,都是建立在之前的文章里面提到的观点:

  • 功能测试不建议做自动化
  • 接口测试性价比最高
  • 接口测试可以做自动化
  • 做好接口自动化,一定要有透过界面看到数据本质的能力

后面所谈到的 测试自动化 也将围绕着 接口自动化 来介绍。

2   可测试架构

目前互联网行业流行的“一服务,多客户端”的架构是一种 可测试性好 的架构,架构图如下:

如果你想学习自动化测试,我这边给你推荐一套视频,这个视频可以说是B站播放全网第一的自动化测试教程,同时在线人数到达1000人,并且还有笔记可以领取及各路大神技术交流:798478386 

【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)_哔哩哔哩_bilibili【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)共计200条视频,包括:1、接口自动化之为什么要做接口自动化、2、接口自动化之request全局观、3、接口自动化之接口实战等,UP主更多精彩视频,请关注UP账号。icon-default.png?t=N7T8https://www.bilibili.com/video/BV17p4y1B77x/?spm_id_from=333.337&vd_source=488d25e59e6c5b111f7a1a1a16ecbe9a

  1. 服务器和客户端采用Http(或者WebSocket)的方式进行通讯
  2. 数据交换的格式一般是Json(或者XML)
  3. 因为下游设备众多,所以服务端接口有很强的稳定性要求

3   自动化技术实现

基于如上特点,此系统的接口自动化测试简化表述,就是需要做如下事情:

  1. 使用脚本对接口进行Http请求
  2. 对返回值解析
  3. 按照设计文档进行判定
  4. 以项目的方式组织测试脚本形成自动化测试项目

当然,以上纯粹是从技术的角度来阐述问题,如果要和具体的项目结合起来 ,还需要设计不同的步骤和数据来满足不同的业务逻辑需求。

对于如上4个目的,有如下几个框架或者工具可以实现:

  1. requests

    一个Http请求库,号称是让Http的请求对人更友好,此框架也确实达到此目的了。

  2. json

    python提供的对json和python数据类型的转化库

  3. pyunit

    pyunit自动化框架提供了大量的assert断言方法来自动化进行数据逻辑判定

  4. 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)
>>> payload = {'key1': 'value1', 'key2': 'value2'}

>>> r = requests.post("http://httpbin.org/post", data=payload)
>>> print(r.text)
{
  ...
  "form": {
    "key2": "value2",
    "key1": "value1"
  },
  ...
}

6   综合示例

再结合一下pyunit的判断库,就可以根据如下流程,做一个最简单的接口自动化测试脚本:

  1. 根据文档准备好请求参数
  2. 对指定的http接口进行requests请求
  3. 对返回的字符串进行json解析
  4. 使用pyunit的assert函数进行判定
  5. 生成相应的测试报告,导出或者和信息系统对接

下面是对一个用户登录的接口进行测试,按照设计文档,此接口如果登录成功,则返回的字符格式是:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1188579.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

手写一个Webpack,带你了解构建流程

如果对前端八股文感兴趣,可以留意公重号:码农补给站,总有你要的干货。 前言 Webpack是一个强大的打包工具,拥有灵活、丰富的插件机制,网上关于如何使用Webpack及Webpack原理分析的技术文档层出不穷。最近自己也是发现…

人大金仓物理备份异机恢复

概述 KingbaseES V8支持使用RMAN物理备份在异机环境恢复,通过重新克隆方式完扩展主备集群。 原集群环境:演示用例,仅供参考 查看原集群备份和物理备份路径 异机恢复 前置条件 *获取原集群物理备份文件,包括全量备份、增量备份…

基于springboot的医护人员排班系统 全套代码 全套视频教程

基于springboot的医护人员排班系统,springboot vue mysql (毕业论文10411字以上,共27页,程序代码,MySQL数据库) 代码获取: 链接:https://pan.baidu.com/s/177HdCGtTvqiHP4O7qWAgxA?pwd0jlf 提取码:0jlf 【运行环境】 IDEA, JDK1.8, My…

后视镜为什么要检测反射率

后视镜反射率检测是评估后视镜质量的重要步骤,可以反映后视镜的反射效果是否满足设计要求。一般来说,后视镜的反射率越高,驾驶员观察车后的道路状况就越清晰,从而能够更好地判断与后方车辆的距离和速度差。 后视镜反射率检测的原理…

C++冒号的作用域

当同时定义了一个全局变量a和局部变量a: 结果输出了局部变量的10,因为程序遵循就近原则。 :: 代表全局作用域 如果想无视就近原则,打印全局变量的a,就在输出时把a的前面加两个冒号。 ::

【ChatGLM2-6B】小白入门及Docker下部署

【ChatGLM2-6B】小白入门及Docker下部署 一、简介1、ChatGLM2是什么2、组成部分3、相关地址 二、基于Docker安装部署1、前提2、CentOS7安装NVIDIA显卡驱动1)查看服务器版本及显卡信息2)相关依赖安装3)显卡驱动安装 2、 CentOS7安装NVIDIA-Doc…

Nginx常用配置与命令,nginx代理转发配置

Nginx特点 高并发、高性能; 模块化架构使得它的扩展性非常好; 异步非阻塞的事件驱动模型这点和 Node.js 相似; 相对于其它服务器来说它可以连续几个月甚至更长而不需要重启服务器使得它具有高可靠性; 热部署、平滑升级; 完全开源,生态繁荣; Nginx作用 Nginx 的最重要的…

JAVA IDEA 下载

超简单步骤一: IntelliJ IDEA 官方下载链接 点击以上链接进入下图,点击下载 继续点下载,然后等待下载完后打开安装包即可 步骤二: 打开下好的安装包,点击Browse...我们把它下载到自己喜欢的地方(主要是别占…

信息系统项目管理师第四版:第5章 信息系统工程

请点击↑关注、收藏,本博客免费为你获取精彩知识分享!有惊喜哟!! 信息系统工程是用系统工程的原理、方法来指导信息系统建设与管理的一门工程技术学科,它是信息科学、管理科学、系统科学、计算机科学与通信技术相结合…

简析电能管理系统在某煤矿的应用

叶根胜 安科瑞电气股份有限公司 上海嘉定 201801 摘要:针对传统的煤矿电能管理主要是由专人人工抄表,存在抄收数据繁琐,统计困难,煤矿用电分析等方面数据缺乏,电量峰谷比不合理等问题。某煤矿应用电能管理系统&#…

11月9日星期四今日早报简报微语报早读

11月9日星期四,农历九月廿六,早报微语早读。 1、中国数字经济规模十年增至50.2万亿元,网民规模增至10.79亿; 2、世界互联网发展指数排名发布:中国位居第二; 3、中国—拉美开发性金融合作机制扩容&#x…

【修车案例】一波形一案例(10)

故障车型: 2005 teana 2.0日产 维修厂: 建兴汽车保养厂示波器诊断: 通道A – ABS霍尔传感器信号测量故障分析: 诊断计算机报错左后轮胎轮速异常, 速度与其他车轮差较大。 通过示波器量测ABS信号, 2线式霍尔传感器, 信道A正极接信号线, 负极接地线, 干扰较严重就不建议从蓄电池…

图解三傻排序 选择排序、冒泡排序、插入排序

&#xff08;1&#xff09;选择排序 // 交换 void swap(int arr[], int i, int j) {int tmp arr[i];arr[i] arr[j];arr[j] tmp; }// 选择排序 void selectionSort(int arr[],int len) {if (len < 2) return;for (int minIndex, i 0; i < len - 1; i) {minIndex i;f…

彻底改变您的用户体验设计:您需要了解的 5 个工具包和指南

问题 进行设计冲刺、设计思维工作坊期间&#xff0c;如何找到好用的UX工具&#xff1f; 市面上有很多优秀的UX书籍&#xff0c;但也有越来越多的在线 用户体验设计 工具包和方法指南详细介绍了大量的UX工具和方法&#xff0c;包括这些方法是什么、为什么要用、何时用还有怎么…

这8大优势你都不知道,你敢说你精通单元测试?

一、什么是单元测试 在计算机编程中&#xff0c;单元测试是一种软件测试方法&#xff0c;通过该方法可以测试源代码的各个单元以确定它们是否适合使用。单元是最小的可测试软件组件&#xff0c; 它通常执行单个内聚功能。单元测试就是是指对这个最小可测试组件——即单元进行检…

SAP 开发查找增强程序

参考文章https://blog.csdn.net/SAPmatinal/article/details/129987722?ops_request_misc%257B%2522request%255Fid%2522%253A%2522169949816116800225559526%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id16994981611680022555…

为什么冰酒会被视为珍品?

在某些年份&#xff0c;珍贵稀有的葡萄酒让酿酒师有了冒险的意愿&#xff0c;葡萄比平时在藤上停留更长时间&#xff0c;需要等待至少-7℃的温度&#xff0c;酿酒师需要与自然玩游戏&#xff0c;可以持续到1月&#xff0c;在罕见的情况下可以持续到2月。对于酿酒师来说&#xf…

雷电防护在线检测(监测)平台应用方案

雷电防护在线检测&#xff08;监测&#xff09;平台是一种利用云计算、物联网、传感器、智能算法等技术&#xff0c;对雷电防护设施进行实时监测、预警、分析和管理的系统。该系统可以有效提高防雷安全水平&#xff0c;降低雷电灾害风险&#xff0c;为各行各业提供全面的雷电防…

RT-Thread 12. BSP根目录下SConscript分析

(1)menuconfig 命令通过读取工程的各个Kconfig 文件&#xff0c;生成配置界面供用户配置内核&#xff0c;最后所有配置相关的宏定义都会自动保存到 BSP 目录里的rtconfig.h 文件中&#xff0c;每一个 BSP 都有一个 rtconfig.h 文件&#xff0c;也就是这个 BSP 的配置信息。 (2)…