接口对象封装
接口对象封装
学习目标
- 理解接口对象封装的目的
- 能够实现接口对象的封装
核心思想
- 引入Unittest后代码存在的问题?
- 代码冗余
- 代码耦合度高
- 代码维护成本高
案例一
练习 : ihrm系统登录接口对象封装
需求:
- 封装登录接口API对象
- 测试脚本中调用登录接口API对象
- 使用UnitTest框架管理测试脚本
思考
- 为什么要封装接口对象?
- 封装接口对象的实现?
接口自动化测试框架
学习目标
- 能够实现接口自动化测试框架
- 完成IHRM系统接口测试
接口测试框架思想
接口自动化框架设计思路
接口自动化框架开发
搭建基础框架
- 定义项目目录结构 :
安装依赖包 :
安装requests包
安装parameterized包
安装PyMySQL包
安装htmlTestReport包
封装数据库操作工具类
提示:为减少代码冗余,提高测试效率,将数据库相关操作封装成工具类
数据库工具类要求 :
- 实现的功能:
- 获取数据库连接对象方法
- get_conn()
- 关闭数据库连接对象
- close_conn()
- 查询一条记录
- get_one()
- 更新数据库
- uid_db()
- 获取数据库连接对象方法
- 实现的功能:
用例基础代码
测试脚本层:
- 使用UnitTest管理测试脚本
- 登录模块:test_login.py
- 员工模块:test_employee.py
- 实现要求:
- 1、完成测试脚本的业务实现
- 2、通过fixture进行测试数据构造和清理
- 使用UnitTest管理测试脚本
接口对象层 :
- 按功能模块封装接口对象
- 登录模块:login.py
- 员工模块:employee.py
- 实现要求:
- 1、API对象封装,使用通用参数
- 2、抽离管理域名等共性信息
- 按功能模块封装接口对象
测试数据参数化
生成测试报告
总结
- 请描述接口测试框架的架构
- 接口测试框架的设计核心步骤
- 请描述如何实现接口自动化测试框架的封装?
全量字段校验
学习目标
- 掌握如何对接口响应数据进行全量字段校验
全量字段校验
学习目标
- 理解全量字段校验的目标
接口校验思考
- 问题一:接口响应校验哪些字段?
- 答:客户端或其他服务使用的字段
- 问题二:需要校验字段的哪些内容?
- 答:字段名/字段值或字段类型
JSON Schema介绍
学习目标
- 掌握JSON Schema关键字
- 根据JSON数据的要求定义JSON Schema
JSON Schema介绍
- Json Schema: 用来定义json数据约束的一个标准
入门案例
- 待校验的数据 :
1 | { |
校验规则描述 :
整个JSON数据是一个对象
包含success、code、message字段,并且是必须存在的字段
success字段为布尔类型
code为整数
message为字符串
JSON Schema :
- 注意:待校验JSON对象的所有字段分别都通过对应的JSONSchema的校验检测,这个对象才算是通过校验!
1 | { |
json schema在线校验工具
JSON Schema重点关键字
关键字详解-type
- type:用于限定待校验JSON元素所属的数据类型
案例
JSON Schema关键字-type
需求:
已知JSON数据
要求定义每个一级字段的数据类型
1 | { |
- 定义JSON Schema :
1 | { |
关键字详解-properties
- properties:定义待校验的JSON对象中包含的字段
- 说明:
- 该关键字的值是一个对象
- 当type取值为object时使用
- 用于指定JSON对象中的各种不同key应该满足的校验逻辑
- 说明:
案例
- 需求:
- 已知JSON数据
- 要求定义JSON对象中包含的所有字段及数据类型
1 | { |
- JSON Schema :
1 | { |
关键字详解-required
required:定义待校验的JSON对象中,必须存在的key
说明:
- 用于限制JSON对象中必须包含哪些key
- 该关键字的值是一个数组,而数组中的元素必须是字符串,而且必须是唯一的
案例
- 需求:
- 已知JSON数据
- 要求JSON对象中必须包含success、code、message字段
1 | { |
- JSON Schema :
1 | { |
关键字详解-const
- const:用于校验JSON元素必须等于指定的内容
- 说明:
- 如果待校验的JSON元素的值和该关键字指定的值相同,则通过校验。否则,无法通过校验
- 该关键字的值可以是任何值,包括null
案例
- 需求:
已知JSON数据
校验code字段的值必须等于10000
1 | { |
- JSON Schema :
1 | { |
关键字详解-pattern
- pattern:正则表达式
- 说明:
- 正则表达式:字符串的匹配模式
- 包含指定字符串:pattern = “指定字符串”
案例
- 需求:
已知JSON数据
校验message字段的值必须包含‘操作成功’
校验手机号必须是11为数字
1 | { |
- JSON Schema :
1 | { |
综合案例
- 校验规则描述 :
- 需求:
- 整个JSON数据是一个对象
- 包含success、code、message、data字段,并且是必须存在的字段
- success字段为布尔类型
- code为整数
- message为以“登录成功”结尾的字符串
- data为对象,必须包含name、age字段
- data中的name字段必须等于lily
- data中的age必须是20
- 需求:
1 | { |
- JSON Schema :
1 | { |
思考
- JSON Schema重点关键字有哪些?
- 如何根据JSON数据的规范要求定义JSON Schema?
python实现JSON数据校验
学习目标
- 掌握如何使用jsonschema校验JSON数据
jsonschema介绍和安装
- jsonschema:是Python语言中实现对JSON Schema校验的模块
pip install jsonschema
jsonschema使用方式
jsonschema.validate(instance, schema)
- instance:要验证的JSON数据
- schema:用于校验JSON数据的验证规则
- 说明:
- 该函数首先验证所提供的schema本身是否有效,然后再验证json数据
- 如果schema模式本身是无效的,则抛出 jsonschema.exceptions.SchemaError 异常
- 如果JSON数据校验不通过,则抛出 jsonschema.exceptions.ValidationError 异常
jsonschema使用案例
- 需求:测试ihrm登录接口-登录成功
- 要求:全量校验接口返回结果(data字段为字符串,其他字段进行值匹配)
1 | import jsonschema, requests, unittest |
总结
- 掌握如何对接口响应数据进行全量字段校验
持续集成
学习目标
- 掌握使用Git管理代码
- 掌握Jenkins安装配置
- 能够使用Jenkins集成自动化代码
持续集成
学习目标
- 了解互联网软件发布流程
- 清楚自动化测试在CI中要解决的问题
软甲发布流程
持续集成目的
- 快速迭代 保持高质量
- 持续集成(Continuous integration)
- 开发人员提交新代码后,立刻构建,部署到「测试环境」,执行测试并反馈
- 持续交付(Continuous delivery)
- 在持续集成的基础上,将集成后的代码部署到「类生产环境」
- 持续部署(continuous deployment)
- 在持续交付的基础上,自动部署到生产环境
如何契合CI流程
- 目的:通过持续测试验证代码质量是否符合交付标准
- 需解决的问题:
- 自动化测试case执行不靠人工
- 1)代码更新自动触发case执行
- 2)每日定时自动触发case执行
- 第一时间发布自动化测试结果
- 自动化测试case执行不靠人工
思考
- 持续集成的流程和目的?
- 自动化测试在持续集成中要解决什么问题?
Git与Git代码托管平台
学习目标
- 掌握Git管理代码的常见操作
Git介绍
- 思考
- 场景1:
- 小A实现的自动化代码,需求变更后删除了该代码。之后又要加入该需求,怎么办?
- 场景2:
- 自动化项目有多名测试人员协同开发脚本,怎么保证项目代码统一?
- Git 分布式版本控制系统,实现版本控制 + 多人协同
- 自动化项目有多名测试人员协同开发脚本,怎么保证项目代码统一?
- 场景1:
Git代码托管平台
- 常见的代码托管平台:
- Github
- 国外的基于git实现在线代码托管的仓库(企业版收费)
- 官网:https://github.com/
- Gitee
- 码云,是开源中国免费提供(企业版收费)
- 官网:https://gitee.com/
- Gitlab
- 类似Github,一般用于企业内部搭建git私服
- Github
Git安装
- Git:支持 Linux/Unix、Solaris、Mac和 Windows 平台
- 安装Git:
- 下载地址:https://git-scm.com/downloads
- 校验是否安装成功: git –version
- 配置Git:
- 安装完成后,需要在命令行配置用户名和邮箱
1 | git config --global user.email "email@example.com" |
Git常见操作
- 克隆 Git 资源作为本地资源
- 如果其他人修改了 Git 资源,需要更新本地资源
- 提交本地文件前对比Git资源上的文件,解决冲突
- 提交本地修改到Git仓库
Gitee使用
码云Gitee是开源中国开发的一款基于Git的代码托管平台,能够实现代码托管、项目管理、协作开发等
目前是国内最大的代码系统,目前已有超过 500 万的开发者选择码云
Gitee和GitHub的作用和性质是类似的,Gitee优势是速度快
操作演示:
在Gitee中创建项目
在PyCharm中检出Gitee中的项目
在PyCharm中编辑项目文件,对比文件,解决冲突
思考
- Git常见操作:克隆Gitee仓库
- 下载远程代码并合并
- 上传远程代码并合并
- 解决代码冲突
Jenkins
学习目标
- 掌握Jenkin环境搭建及常见配置
Jenkins介绍
- 基于Java开发的一种开源、跨平台的持续集成工具
- 作用:
- 持续自动构建/测试软件项目
- 监控定时执行的任务
Jenkins环境搭建
- 安装步骤:
安装JDK
安装Jenkins
显示测试报告
安装HTML Publisher插件 :
安装步骤:
- 进入首页,选择’Jenkins’后面的小图标->’系统管理’->’管理插件’
- 输入搜索关键字,选择要安装的插件,点击‘Install without restart’安装
- 查看安装进度
解决HTML报告样式无法显示问题 :
为了测试报告样式的美观以及易读,测试报告中会搭配CSS和JS实现自定义的样式或动画效果。
问题:
- Jenkins中在访问有自定义样式或动画效果的测试报告时,会出现样式无法正常显示的问题。
产生问题的原因 :
- Jenkins为了避免受到恶意HTML/JS文件的攻击,会默认将安全策略CSP设置为 :
sandbox; default-src 'none'; img-src 'self'; style-src 'self';
- 在此配置下,只允许加载:
- Jenkins服务器上托管的CSS文件
- Jenkins服务器上托管的图片文件
- 其他形式的内容都会被禁止:JavaScript、plugins (object/embed)、HTML中的内联样式表和引用的外站CSS文件、HTML中的内联图片和外站引用的图片文件等等
- Jenkins为了避免受到恶意HTML/JS文件的攻击,会默认将安全策略CSP设置为 :
解决方案 :
- 通过修改启动命令来实现:
D:\jenkins>java -Dhudson.model.DirectoryBrowserSupport.CSP= -jar jenkins.war
- 通过修改启动命令来实现:
邮件配置
- 公司中发送测试报告邮件时,需要设置一些规范。
- 例如配置收件人列表(项目经理,测试相关人员,开发相关人员,产品经理等)、项目基本信息等。
- Jenkins提供了邮箱报告模板,可以通过配置模块,指定一些邮件固定的信息。
邮件测试报告模板
1 |
|
系统邮箱配置
- Jenkins完成系统邮箱配置后,才能够发送邮件
- 配置内容:
- 配置’系统管理员邮件地址’
- 配置’Extended E-mail Notification’
- 配置’邮件通知’
思考
- Jenkins的作用是什么?
- 测试报告配置和邮件模版配置注意项
自动化测试持续集成实现
学习目标
- 掌握Jenkin环境搭建及常见配置
实现效果
- 自动化测试case执行不靠人工
- 1)代码更新自动触发case执行
- 2)每日定时自动触发case执行
- 第一时间发布自动化测试结果
- 核心:Jenkins job 的源码配置
源码管理
- 作用:能够让Jenkins自动从代码服务器上拉取自动化测试脚本代码
- 配置参数说明:
- Repository URL:项目仓库地址
- Credentials:登录凭证,需添加代码托管平台的登录用户名和密码
构建触发器
- 作用:定义一些触发规则,当满足某一个规则时,让Jenkins开始执行自动化测试脚本
- 常用触发器:
- Build periodically:定时构建
- Poll SCM:轮询构建,定时轮询检查代码是否发生变更,如果发生变更就拉取最新代码并执行构建动作
日程表介绍
Jenkins采用了著名的UNIX任务调度工具CRON所使用的配置方式,一般称之为“cron表达式”
基本语法格式:
* * * * *
=>分 时 日 月 星期
- 用5个字段代表5个不同的时间单位,中间用空格分隔
- 每一个位置都可以使用数字表示,还可以使用一些特殊字符
*
:表示匹配该域的任意值,假如在表示分的位置*
, 即表示每分钟都会触发事件
示例:
0 8 * * *
: 每天上午8点构建一次*/1 * * * *
: 每分钟执行一次* */1 * * *
: 每小时执行一次
构建
- 作用:触发自动化测试脚本开始执行的命令
- 常用构建组件:
- Execute Windows batch command:运行Windows环境下的命令
- Execute shell:运行Linux和Mac环境下的命令
构建后操作
- 作用:自动化测试脚本运行完之后要做的操作
- 常见构建后操作:
- 发布测试报告
- 发送邮件通知
思考
- 请描述如何通过Jenkins集成自动化测试脚本?
总结
- 如何使用Git管理代码?
- 如何安装配置Jenkins?
- 如何通过Jenkins集成自动化测试脚本?
- 感谢你赐予我前进的力量