HTTP接口自动化测试方法研究

  杨清玉,李金丽,陈吉兰,李志伟

  (中标软件有限公司 操作系统测试认证中心,北京 100190)

摘要:研究了HTTP接口自动化测试方法,采用Python语言开发代码,使用Request调用HTTP接口。提出了一种分层结构的自动化测试框架,将接口调用、测试用例和测试数据的代码分层开发,生成基于HTML的测试报告。提出了两种解决CSRF Token验证问题的方案。该方法开发出的自动化测试脚本具有结构清晰、易维护等优点,能够有效提高测试效率,降低测试成本。

  关键词:HTTP接口;Python;Request;自动化测试

0引言

 Web业务日趋复杂,系统愈加庞大,版本的发布周期变短,使得Web产品测试的难度极大地提高,工作量也大幅增加[1]。Web产品的测试中非技术性、重复性的测试工作占总的测试工作量比例比较大,因而需要大量的资源来保障Web产品的质量[2 3]。在开发Web产品时,开发过程中一般采用了分层的软件体系结构,Web页面通过HTTP协议向接口发送请求,后端处理请求返回结果。由于业务逻辑比较复杂,有着大量的接口,如果使用自动化测试代替手工测试,可以有效提高测试效率,降低测试成本。

1HTTP协议

  超文本传输协议(Hyper Text Transfer Protocol, HTTP)是互联网上应用最为广泛的一种网络协议。HTTP是基于请求和响应模式的无状态应用层协议。其客户/服务器模式的信息交换过程如图1所示。信息交换过程分四个部分:建立连接、发送请求信息、发送响应信息和关闭连接[4]。

图像 001.png

  绝大多数的Web开发都是构建在HTTP协议之上的Web应用。本文所进行的自动化测试的对象为中标软件有限公司的微云操作系统产品,该产品的Web接口为HTTP协议的接口。针对该接口的自动化测试,笔者采用Python语言进行代码的开发,使用Request进行HTTP接口的调用。使用Eclipse并安装PyDev插件作为集成开发环境,在自动化测试框架下开发自动化测试代码。

2Python和Request

  Python是一个通用目的的编程语言,已经有很多年的发展历程。这个稳定而成熟的语言是非常高层的、动态的、面向对象的和跨平台的。Python可以在所有主流的硬件平台和操作系统上运行。它继承了传统编译语言的强大性和通用性,同时也借鉴了简单脚本和解释语言的易用性,语法简捷清晰、可读性强、便于维护,并且具有一致性和规律性、丰富的标准库,以及许多可以很容易在Python中使用的第三方模块。Python还可以被当做最适合入门程序员掌握的优秀语言,因为它免费、面向对象、扩展性强,同时执行严格的编码标准[5]。

  Request对象的作用是与客户端交互,收集客户端的Form、Cookies、超链接,或者收集服务器端的环境变量。Request对象是从客户端向服务器发出请求,包括用户提交的信息以及客户端的一些信息。客户端可通过HTML表单或在网页地址后面提供参数的方法提交数据,然后通过Request对象的相关方法来获取这些数据。Request的各种方法主要用来处理客户端浏览器提交的请求中的各项参数和选项。

3自动化测试框架介绍

  3.1自动化测试框架设计思想

  本文设计的自动化测试框架采用分层结构,依据模块化、可复用、低冗余等原则,将代码根据不同的功能分为若干个独立的模块,这里将一类模块称为一层。每一层都完成自己特定的任务,各层之间根据需要去进行调用。分层思想最先是在软件开发过程中提出来的。当代码量小的时候,采用这种模式会增加工作量;但是当代码量变大时,采用这种模式可以使设计思路清晰,代码冗余度变低,可扩展性更好,代码维护更加方便,程序运行效率更高。

  3.2自动化测试框架实现

  自动化测试框架是由一个或多个自动化测试基础模块、自动化测试管理模块、自动化测试统计模块等组成的工具集合。本文的自动化测试框架如图2所示,分为测试环境配置层、接口操作层、测试数据层、测试用例层、测试用例管理层等。每一层都实现自己特定的功能,并提供接口给其他层调用。

图像 002.png

  Config层:测试环境配置层,存储测试环境相关设置参数。比如待测环境的IP、主机名、登录用户名、密码等。

  TestAPI层:接口操作层,对HTTP接口的调用进行封装。比如获取列表信息、添加、删除、修改等。

  TestData层:测试数据层,用于管理测试用例所需要用到的测试数据。Data文件的名称需要与对应的Test Case名称一致,以便数据解析。

用户喜欢...

使用 Micro Python 快速开发基于实时微控制器的应用程序

实时嵌入式系统变得非常复杂,不仅要深入了解复杂的 32 位微控制器,还要了解传感器、算法、因特网协议以及各种不同的终端用户应用。随着开发周期缩短和功能增多,开发团队需要设法加...


盘点·GitHub最著名的20个Python机器学习项目

开源是技术创新和快速发展的核心。这篇文章向你展示Python机器学习开源项目以及在分析过程中发现的非常有趣的见解和趋势。 我们分析了GitHub上的前20名Python机器学习项目,发现scikit-Lear...


Python基础语法-常量与变量

Python是一门强类型的动态语言。 字面常量,变量没有类型,变量只是在特定的时间指向特定的对象而已,变量所指向的对象是有类型的。 变量:变量在赋值时被创建,它可以是任何对象的引...


英国伯明翰大学团队使用Theano,Python,PYNQ和Zynq开发定点Deep Recurrent神经网络

可编程逻辑(PLD)是由一种通用的集成电路产生的,逻辑功能按照用户对器件编程来确定,用户可以自行编程把数字系统集成在PLD中。经过多年的发展,可编程逻辑器件由70年代的可编程逻辑阵...


【活动】《MicroPython入门指南》正式出版了,进微信群一起交流!

第一本专门介绍MicroPython的中文图书《MicroPython入门指南》由电子工业出版社正式出版了。 《MicroPython入门指南》 作者:邵子扬 MicroPython是近年开源社区中最热门的项目之一,它功能强大,使...


Python Web 开发框架 Django 2.0 发布

流行 Python Web 开发框架 Django 释出了 2.0 版本。主要变化包括:停止支持 Python 2 系列,Django 1.11.x 是支持 Python 2.7 的最后版本,Django 2.0 支持 Python 3.4、3.5 和 3.6,其中 Python 3.4 将于 2019 年 3...


机器学习:朴素贝叶斯--python

今天介绍机器学习中一种基于概率的常见的分类方法,朴素贝叶斯,之前介绍的KNN, decision tree 等方法是一种 hard decision,因为这些分类器的输出只有0 或者 1,朴素贝叶斯方法输出的是某一类...


机器学习:决策树--python

今天,我们介绍机器学习里比较常用的一种分类算法,决策树。决策树是对人类认知识别的一种模拟,给你一堆看似杂乱无章的数据,如何用尽可能少的特征,对这些数据进行有效的分类。...


PYNQ 用Python运行FPGA

PYNQ介绍 PYNQ全称为Python Productivity for Zynq,即在原有Zynq架构的基础上,添加了对python的支持。Zynq是赛灵思公司推出的行业第一个可扩展处理平台系列,在芯片中集成了ARM处理器和FPGA可编程逻...


使用CircuitPython开发板简化基于ARM®Cortex®-M0 +的物联网嵌入式设计

许多嵌入式应用使用先进的MCU,但只需要基本的硬件控制功能,而不需要高级嵌入式设计的硬实时要求。开发商和制造商经常沉浸在硬件设计,C / C ++编程和实时操作系统的细节中。幸运的是,...


python的位置参数、默认参数、关键字参数、可变参数区别

一、位置参数 调用函数时根据函数定义的参数位置来传递参数。 #!/usr/bin/env python # coding=utf-8 def print_hello(name, sex): sex_dict = {1: u'先生', 2: u'女士'} print 'hello %s %s, welcome to python world!' %(name, sex...


机器学习工具:Python 和 Numpy入门

写在前头 我们一般都是从C语言开始学起的,后来发现C语言不能满足我们快速开发的需求,因为它的API使用起来不很方便,还有就是有些功能亟待扩展,这时候我们很多人选择了C++或Java,C...


Python并行处理

原文:Parallel Processing in Python  作者:Frank Hofmann  翻译:Diwei 简介 当你在机器上启动某个程序时,它只是在自己的“bubble”里面运行,这个气泡的作用就是用来将同一时刻运行的所有程序进...


使用CircuitPython开发板简化基于ARM®Cortex®-M0 +的物联网嵌入式设计

许多嵌入式应用使用高级MCU,但只需要基本的硬件控制功能,而不需要高级嵌入式设计的硬实时要求。开发商和制造商经常沉浸在硬件设计,C / C ++编程和实时操作系统的细节中。幸运的是,有...


Python开发者必备6个基本库

原文:6 essential libraries for every Python developer  作者:Serdar Yegulalp  翻译:Peter 译者注:无论你是想快速入手Python还是想为Python应用程序构建本地UI,亦或者对Python代码进行优化,本文列举的...


Python正则表达式的七个使用范例

作为一个概念而言,正则表达式对于Python来说并不是独有的。但是,Python中的正则表达式在实际使用过程中还是有一些细小的差别。 本文是一系列关于Python正则表达式文章的其中一部分。在...