背景:
要写论文,我选择的题目是“基于python的应用研究与开发”,我打算把公司的hrun-接口录制平台,从设计,到技术分析,到代码实现,进行系统的总结下。
(继续完善中。。。)
hrun接口录制平台涉及的技术:
- python基础(必须的,例如:ini配置文件操作、yaml文件读写、内置函数的使用等、多线程等)
- django3.0(原生django基础,例如:settings配置、model层,view层以及路由的编写、uwsgi配置、静态文件配置等)
- rest_framework(django的前后端架构分离框架,需要掌握:CBV(基于类的视图)、认证、权限、节流、版本、解析器、序列化、分页、视图、路由、渲染、日志等)
- httprunner(包括:用例运行、用例集运行、生成报告)
- 前端(语言:css、js、html;框架:vue)
基于Python的接口录制平台的研究与开发
第一章 绪论
1.1 研究背景
现在大多数的从业测试工作的人员,做接口自动化的过程中,由于手动添加编写接口较为繁琐,于是诞生了许多接口自动化框架,为了让不会代码的人,也能使用自动化框架进行接口自动化测试,于是调研了几个框架,最终从中选出HttpRunner接口自动化框架。
此外,为了搭建自动化测试平台,后端代码语言选用python,前端框架选用vue
1.2 研究意义
HttpRunner [1-2] 是一款面向 HTTP(S) 协议的通用测试框架,只需编写维护一份 YAML/JSON 脚本,即可实现自动化测试、性能测试、线上监控、持续集成等多种测试需求。使用次框架做接口自动化,充分复用优秀的开源项目,不追求重复造轮子,而是将强大的轮子组装成战车,因此其最大的意义在于能够很大程度上提高测试工作效率。
1.3 研究内容
a.HttpRunner源码分析
b.HttpRunner 功能包括:单接口运行、测试用例运行、测试套运行
c.Python的web开发框架django源码分析及功能
d.django前后端分离框架rest_frameeork的源码及功能
e.使用vue前端框架实现前端页面
第二章 开发技术介绍
2.1 python语言
a.python语言简介
Python是服务端解释器的、开源的、非编译语言。它能用于自身或其他框架,如Django。
用途:网页开发、视频游戏开发、桌面GUI、软件开发。
优点:(1)易于学习,Python广泛认同为最容易学习的编程语言;(2)有大量的库和函数是的制作东西极为容易;(3)Python也许会成为物联网最受欢迎的语言。如树莓派这样的新平台都是基于Python。
缺点:(1)速度较慢,作为解释型语言,比编译语言慢很多;(2)Python在移动计算方面很弱,很少有智能机应用由Python开发;(3)Python是动态型,它需要更多测试以及错误仅在运行时提示。
b.安装python
去官网(www.python.org)下载需要的python(这里采用python3.7),进行安装.
c.Python语言基础
写平台需要掌握python语言基础,比如:循环语句,字符串、列表、元组、字典等的操作,函数、类等的封装和继承等操作、以及python带的和需要安装的包的使用,如:os、time、yaml、json等等
2.2 django3.0
a.django简介[01]
Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式,即模型M,视图V和模版T。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS(内容管理系统)软件。并于2005年7月在BSD许可证下发布。这套框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的。2019年12月2日,Django 3. 0发布
b.django安装
linux上安装:easy_install django
pip命令安装:sudo pip3 install Django==3.0.6 -i https://pypi.tuna.tsinghua.edu.cn/simple
c.django基础:
写接口录制平台需要熟练掌握django基础知识:包括如下:
路由及分布式路由的配置、请求及响应、静态文件配置、模型层及ORM框架原理、通过ORM方式操作数据库,关系映射、cookie和session处理、中间件的使用及原理、项目部署uwsgi
2.3 rest_framework前后端分离框架
a.rest_framework简介
在前后端不分离的应用模式中,前端页面看到的效果都是由后端控制,由后端渲染页面或重定向,也就是后端需要控制前端的展示,前端与后端的耦合度很高。rest_framework就是为实现前后端分离而诞生的框架。
在前后端分离的应用模式中,后端仅返回前端所需的数据,不再渲染HTML页面,不再控制前端的效果。至于前端用户看到什么效果,从后端请求的数据如何加载到前端中,都由前端自己决定,网页有网页的处理方式,App有App的处理方式,但无论哪种前端,所需的数据基本相同,后端仅需开发一套逻辑对外提供数据即可。
在前后端分离的应用模式中 ,前端与后端的耦合度相对较低。
在前后端分离的应用模式中,我们通常将后端开发的每个视图都称为一个接口,或者API,前端通过访问接口来对数据进行增删改查。
b.rest_framework安装
直接命令:pip install djangorestframework
c.rest_framework基础:
写接口录制平台需要熟练掌握rest_framework基础知识:包括如下:
FBV模型和CBV模型的原理和区别、restful接口规范、CBV模型请求的生命周期、接口认证、权限、访问频率控制、版本控制、解析器、序列化、分页、视图、路由、渲染等功能的原理及使用
2.4 httprunner接口自动化框架
a.httprunner接口自动化框架简介
HttpRunner [1-2] 是一款面向 HTTP(S) 协议的通用测试框架,只需编写维护一份 YAML/JSON 脚本,即可实现自动化测试、性能测试、线上监控、持续集成等多种测试需求。
其核心特性主要包括:
1.继承 Requests 的全部特性,轻松实现 HTTP(S) 的各种测试需求
2.测试用例与代码分离,采用YAML/JSON的形式描述测试场景,保 障测试用例具备可维护性
3.测试用例支持分层机制,充分实现测试用例的复用
4.测试用例支持参数化和数据驱动机制
5.使用 skip 机制实现对测试用例的分组执行控制
6.支持热加载机制,在文本测试用例中轻松实现复杂的动态计算逻辑
7.基于 HAR 实现接口录制和用例生成功能(har2case)
8.结合 Locust 框架,无需额外的工作即可实现分布式性能测试
9.执行方式采用 CLI 调用,可与 Jenkins 等持续集成工具完结合
10.测试结果统计报告简洁清晰,附带详尽统计信息和日志记录
11.具有可扩展性,便于扩展实现 Web 平台化(HttpRunnerManager)
b.httprunner接口自动化框架安装
命令安装:pip install httprunner
验证安装:hrun -V 或 har2case -V
c.httprunner接口自动化框架基础知识
1.JSON格式检测
作用:检测JSON格式的正确性
关键字:validate
格式:hrun --validate test.json
说明:其中test.json为json格式的文件名,并且可一次性指定多个文件
2.JSON格式美化
作用:美化JSON的格式,使得测试脚本便于维护和阅读
关键字:prettify
格式:hrun --prettify test.json
说明:其中test.json为json格式的文件名,并且可一次性指定多个文件
3.参数提取
作用:在test中,提取http响应结果中的参数
关键字:extract
格式:
说明:可提取一个或多个参数,其中响应实体可以用content进行提 取,不同层级之间用点号(.)隔开
4.参数引用
作用:将上一个test中提取到的参数在后续的test中进行引用
关键字:$
格式:“token”:"$_token"
说明:其中_token就是提取到的或者定义的参数
5.变量的声明
作用:用于定义变量
关键字:variables
格式:
6.如何调用函数
作用:有时候需要调用函数用来对数据进行参数化
格式:KaTeX parse error: Expected '}', got 'EOF' at end of input: {func(var)}
说明:其中func为函数名,var为函数参数
7.数据驱动:
三种数据源:直接在JSON或YAML中定义.调用.csv文件.调用函数
第一种方式:直接在JSON或YAML文件中引用
第二种方式:调用.csv文件
说明:调用.csv文件必须使用parameterize关键字或P关键字
第三种方式:调用自定义函数生成参数列表
需要在debugtalk.py中自定义函数
然后再引用函数
2.5 前端语言及vue框架
a.Html 简介[2]
HTML的全称为超文本标记语言,是一种标记语言。它包括一系列标签.通过这些标签可以将网络上的文档格式统一,使分散的Internet资源连接为一个逻辑整体。HTML文本是由HTML命令组成的描述性文本,HTML命令可以说明文字,图形、动画、声音、表格、链接等。
超文本是一种组织信息的方式,它通过超级链接方法将文本中的文字、图表与其他信息媒体相关联。这些相互关联的信息媒体可能在同一文本中,也可能是其他文件,或是地理位置相距遥远的某台计算机上的文件。这种组织信息方式将分布在不同位置的信息资源用随机方式进行连接,为人们查找,检索信息提供方便
b.Css 简介[3]
层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言。CSS不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。
CSS 能够对网页中元素位置的排版进行像素级精确控制,支持几乎所有的字体字号样式,拥有对网页对象和模型样式编辑的能力。
c.JavaScript简介[4]
JavaScript(简称“JS”) 是一种具有函数优先的轻量级,解释型或即时编译型的编程语言。虽然它是作为开发Web页面的脚本语言而出名,但是它也被用到了很多非浏览器环境中,JavaScript 基于原型编程、多范式的动态脚本语言,并且支持面向对象、命令式、声明式、函数式编程范式。 [1]
JavaScript在1995年由Netscape公司的Brendan Eich,在网景导航者浏览器上首次设计实现而成。因为Netscape与Sun合作,Netscape管理层希望它外观看起来像Java,因此取名为JavaScript。但实际上它的语法风格与Self及Scheme较为接近。 [2]
JavaScript的标准是ECMAScript 。截至 2012 年,所有浏览器都完整的支持ECMAScript 5.1,旧版本的浏览器至少支持ECMAScript 3 标准。2015年6月17日,ECMA国际组织发布了ECMAScript的第六版,该版本正式名称为 ECMAScript 2015,但通常被称为ECMAScript 6 或者ES2015。
d.Vue简介[5]
Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式JavaScript框架。 与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用(SPA)提供驱动。
第三章 系统设计
3.1 功能模块设计
a.测试数据
i.har文件上传
ii.har文件展示列表
iii.har文件生成用例
iv.har文件删除
v.har文件按条件搜索
b.用例管理
i.按用例名搜索用例
ii.运行测试用例
iii.修改测试用例
iv.删除测试用例
c.测试步骤
i.按名称搜索测试步骤
ii.单接口运行
iii.批量更新headers
iv.测试步骤修改
v.测试步骤删除
d.用例集管理
i.按名称搜索测试步骤
ii.运行测试用例集
iii.修改测试用例集
iv.删除测试用例集
e.测试报告
i.测试报告展示列表
3.2 数据库设计
a.users_userprofile用户表
Field Type Null Key | Default Extra 描述
id int NO PRI | NULL auto_increment
last_login datetime(6) YES | NULL | 上次登录时间
is_superuser tinyint(1) NO | NULL | 是否超级用户
is_staff tinyint(1) NO | NULL |
date_joined datetime(6) NO | NULL | 加入日期
username varchar(150) YES UNI | NULL | 用户名
password varchar(128) NO | NULL | 密码
is_active tinyint(1) NO | NULL | 是否有效
first_name varchar(30) YES | NULL |
last_name varchar(150) YES | NULL |
birthday date YES | NULL | 生日
gender int YES | NULL |
mobile varchar(11) NO | NULL | 手机
email varchar(32) YES | NULL | 邮箱
create_time datetime(6) NO | NULL | 创建日期
update_time datetime(6) YES | NULL | 更新日期
b.Har_path har文件表
Field Type Null Key | Default Extra 描述
id int NO PRI | NULL autoincrement
file varchar(255) NO | NULL | 文件地址
name varchar(64) NO | NULL | 文件名
createtime datetime(6) NO | NULL | 创建时间
userid int NO MUL | NULL | 用户id
updatetime datetime(6) YES | NULL | 更新时间
c.case_config 用例配置表
Field Type Null Key | Default Extra 描述
id int NO PRI | NULL auto_increment
name varchar(32) NO | NULL | 用例名
output longtext YES | NULL |
variables longtext NO | NULL | 校验数据
teardown_hooks longtext YES | NULL | 后置处理器参数
create_time datetime(6) NO | NULL | 创建日期
user_id int NO MUL | NULL | 用户id
update_time datetime(6) YES | NULL | 更新日期
d.Case_step 测试步骤表
e.Case_suite 测试套表
第四章 系统实现
4.1 **功能实现
4.2 **功能实现
第五章总结
参考文献
专著
[01]主要责任者 科普中国.文献名 百度百科 django
[02]主要责任者 科普中国.文献名 百度百科 html
[03]主要责任者 科普中国.文献名 百度百科 css
[04]主要责任者 科普中国.文献名 百度百科 JavaScript
[05]主要责任者 科普中国.文献名 百度百科 Vue