一、软件测试基础理论
1.软件的定义:数据和指令
2.软件的分类:
1) .场景:工具类、游戏、电商、媒体
2) .架构:
单机版:不需要联网
分布式:需要联网
B/S:浏览器器/服务器
C/S:客户端/服务器
3.软件测试
1.定义:通过人工或者自动化验证实际结果与需求是否一致过程
2.原则
缺陷集群性(28原则)
测试显示软件存在的缺陷
杀虫剂悖(bei)论
测试活动依赖测试内容
没有错误是好谬论
穷尽测试是不可能的
测试尽早介入
4.开发模型
1.瀑布流模型
2.快速原型
3.增量模型
4.敏捷开发
5.测试模型
V模型
W模型
H模型
X模型
6.软件测试流程
|阶段|产物|
|:-:|:-:|:-:|
|阶段 | 工作内容 | 产物 |
|准备 | 立项、需求分析、需求评审 | PRD |
|计划 | 编写、评审测试计划 | 测试计划 |
|设计 | 提取测试点、编写、评审测试用例 | 测试用例 |
|执行 | 冒烟测试、执行测试、提bug、回归测试 | 缺陷报告 |
|完成 | 验收测试、编写测试报告、项目上线 | 测试报告 |
7.软件测试分类
1.技术:黑白灰
2.阶段:
|阶段|产物|
|:-:|:-:|:-:||:-:|
|阶段 | 测试对象 | 测试人员 | 测试方法 |
|单元测试 | 一个模块、类、方法 | 开发/白盒测试工程师 | 白盒测试 |
|集成测试 | 一个模块、类、方法组装成一个系统或者子系统 | 开发/白盒测试工程师 | 白盒/黑盒测试 |
|系统测试 | 整个软件系统 | 黑盒测试工程师 | 黑盒测试 |
|验收测试 | 整个软件系统 | 黑盒测试工程师/用户/老板/经理 | 黑盒测试 |
3.内容
1.功能:UI测试、冒烟、回归测试
2.性能:压力、负载、并发
3.兼容性:
App:Android版本、厂商、屏幕分辨率、屏幕样式(水滴、刘海、全屏、曲面、折叠)
web:浏览器内核、版本
4.专项测试
APP:安装卸载、升级、中断、弱网
二、测试计划
1.模板
1.测试目的:整体概述、详细描述
2.测试资源:人力资源
|:-:|:-:|:-:|
|姓名 | 职务 | 岗位职责 |
| | | |
硬件
|:-:|:-:|:-:|:-:|
|名称 | 配置 | 数量 | 备注 |
| | | | |
软件资源
|软件名称| 描述 |
| | |
网络资源
|互联网 | 局域网 |
| | |
3.测试范围:对象、特性、非特性
4.测试风险:人资法环时+具体项目风险
|:-:|:-:|:-:|:-:|:-:|:-:|
|编号 | 风险描述 | 风险等级 | 责任人 | 影响 | 规避方法 |
| | | | | | |
5.人员分工
|姓名 | 职务 | 工作内容 |
| | | |
6.测试策略
功能
接口
界面
兼容性
性能
7.测试进度
|测试任务 | 负责人 | 预开始时间 | 预结束时间 | 进度 | 备注 |
| | | | | | |
8.测试准则
|阶段 | 启动准则 | 暂停准则 | 在启动准则 | 结束准则 |
|集成测试 | | | | |
|系统测试 | | | | |
|验收测试 | | | | |
9.测试输出
|名称 | 负责人 | 路径 |
|测试计划 | | |
|测试用例 | | |
|测试报告 | | |
|缺陷报告 | | |
2.怎么写
1.设计封面:项目名称、标题、版本、表格、组别
2.九大项
3.插入目录
三、测试用例
1.等价类划分法
1.定义:输入数据分为若干个区域,取有代表性的数据
2.分类:
1.有效等价类:合理的数据
2.无效等价类:不合理的数据
2.边界值分析法:
定义:取稍高于或稍低于边界的一些数据进行测试,使用离点、上点、内点确定取值。
3.获取·:
1.上点:边界点
2.内点边界内部的点
3.离点:开内闭外
4.场景法
定义:模拟实际用户场景
分类:
1.基本流:正确流程
2.备选流:正确的流程每一个步骤取反
5.错误推测法:
测试经验丰富的人喜欢使用的一种测试用例设计方法。一般这种方法是基于经验和直觉推测程序中可能发送的各种错误,有针对性地设计。只能作为一种补充。
6.因果图方法:
比较适合输入条件比较多的情况,测试所有的输入条件的排列组合。所谓的原因就是输入,所谓的结果就是输出。5. 场景法:通过模拟业务场景来对系统的功能点或业务流程的描述,从而提高测试效果的黑盒测试方法
7.判定表
8.正交实验法
发红包、朋友圈、水杯、小视频
四、禅道
1.安装:下一步
2.使用
1.测试bug(测试人员):测试到提bug
2.解决bug(开发):测试 到 bug 到 确认 到 完成
3.再次测试(测试人员):测试 到 再次测试 到 如果解决,点击关闭,否则重新编辑
五、postman使用(一)
5.1.1 什么是Postman
Postman 提供功能强大的 Web API 和 HTTP 请求的调试,它能够发送任何类型的HTTP 请求
(GET, POST, PUT, DELETE…),并且能附带任何数量的参数和 Headers。而且它还提供测试数据和环境
配置数据的导入导出,付费的 Post Cloud 用户还能够创建自己的 Team Library 用来团队协作式的测
试,并能够 将自己的测试收藏夹和用例数据分享给团队。
postman适用于不同的操作系统,还支持postman浏览器扩展程序、postman chrome应用程序等。但
是 浏览器插件目前Google已经停止更新了。
5.2 Postman下载和安装
5.2.1 Postman的下载
官网下载: 地址:https://www.getpostman.com/downloads/,选择页面中的“Download”,根据自己电脑配置, 选择32位下载还是64位下载
5.2.2 Postman的安装过程
1、双击下载好的安装包
2、因为Postman是免安装的,双击安装包,自动安装到本地电脑中
3、查看Postman界面,出现如下图所示,说明安装成功
4、登录,点击进入workspace页面
5.3 Postman主界面的介绍
5.3.1 工具栏
5.4 Postman基本操作
5.4.1 新建测试集、文件夹、请求用例
点击collections,点击+,点击create new collection
点击collection右边的三个点,点击add request是添加请求,add folder是添加文件夹
5.4.2 get请求
新建一个get请求,如图所示
1.设置请求方式为get
2.粘贴网址
3.添加请求参数,参数添加后会在url上显示出来,如图中所示的?id=1005008&page=1&size=100
4.如果有请求头,在请求头的部分添加,也是键值对
5.点击send之后,下面显示响应数据,可以是html,json,xml...
5.4.3 post请求
1. 提交form表单,如图所示
https://www.wanandroid.com/user/login
方法:POST
参数:
username,password
post请求的参数信息在Body中添加
form表单提交需要选中x-www-form-urlencoded
请求头添加和get请求相同,在Headers中添加
need-to-insert-img
need-to-insert-img
2. json提交
下图中,当我们选择JSON(application/json) 是会自动帮我们设置 headers 为 application/json
在这里就不截图 举例了
need-to-insert-img
3. xml提交
need-to-insert-img
4. 二进制文件提交
need-to-insert-img
其它请求方式如PUT,DELETE 大致流程和GET,POST 差不多,这里就不一一举例说明了
5.4.4 授权Authorization
Authorization,授权就是验证我们是否有权限从服务器访问所需的数据。发送请求时,通常必须包含参数以确保请求有权访问并返回所需的数据,比如需要登录之后才能访问的数据。Postman提供的授权类型可以让我们轻松处理Postman进行接口测试中的身份验证协议。
在postman中Authorization分为以下几种类型:
注意:应当注意:NTLM和BearerToken仅在Postman本地应用程序中可用。所有其他授权类型都可以在Postman本地应用程序和Chrome应用程序中使用。
1. Inherit auth from parent
向集合或文件夹添加授权。
假设您在集合中添加了一个文件夹。在授权选项卡下,默认的授权类型将被设置为“从父类继承auth”。
“从父”设置的“继承auth”指示默认情况下,该文件夹中的每个请求都使用父类的授权类型。在本例中,该集合使用“No Auth”,因此该文件夹使用“No Auth”,这意味着该文件夹中的所有请求将使用“No Auth”
如果您希望将父集合授权类型保留为“No Auth”,但要更新这个特定的文件夹的授权助手,该怎么办呢?您可以编辑文件夹的详细信息,从类型下拉菜单中选择“基本的Auth”,并输入您的凭证。因此,这个文件夹中的每个请求都依赖于“基本的Auth”,而父集合中的其余请求仍然不使用任何授权
2. No Auth
默认情况下,“No Auth”出现在下拉菜单列表中。当您不需要授权参数发送请求时,使用“No Auth”。
3. Bearer Token
Bearer Token是安全令牌。任何带有Bearer Token的用户都可以使用它来访问数据资源,而无需使用加密密钥。
使用Bearer Token:
第一步:从下拉菜单中选择“Bearer Token”。
第二步:要设置请求的授权参数,请输入令牌的值。
第三步:点击发送按钮
4. Basic auth
Basic Auth是一种授权类型,需要验证用户名和密码才能访问数据资源。
使用基本身份验证:
第一步:从下拉菜单中选择“Basic Auth”。
第二步:要设置请求的授权参数,请输入您的用户名和密码。
第三步:点击发送按钮。
5. Digest Auth
在“Digest Auth”流程中,客户端向服务器发送请求,服务器返回客户端的nonce和realm值;客户端对用户名、密码、nonce值、HTTP请求方法、被请求资源URI等组合后进行MD5运算,把计算得到的摘要信息发送给服务端。服务器然后发回客户端请求的数据。
通过哈希算法对通信双方身份的认证十分常见,它的好处就是不必把具备密码的信息对外传输,只需将这些密码信息加入一个对方给定的随机值计算哈希值,最后将哈希值传给对方,对方就可以认证你的身份。
Digest思想同样采如此,用了一种nonce随机数字符串,双方约好对哪些信息进行哈希运算即可完成双方身份的验证。Digest模式避免了密码在网络上明文传输,提高了安全性,但它仍然存在缺点,例如认证报文被攻击者拦截到攻击者可以获取到资源。
默认情况下,Postman从响应中提取值对应的值。如果不想提取这些值,有以下两种选择:
在所选字段的高级部分中输入您自己的值勾选“Yes,disable retrying the request”复选框。
6. OAuth 1.0
OAuth 1.0是一种可以让我们在不公开密码的情况下授权使用其他应用程序的授权模式。
在Postman中按照以下步骤使用OAuth 1.0授权:
在Authorization下来授权标签中选择“OAuth 1.0”授权模式;在“Add authorization datato” 下拉选择框中,选择对应的请求模式。
当选择“Request Body/Request URL”时,Postman将检查请求方法是POST还是PUT,以及请求主体类型是否是x-www-form-urlencoded;如果是这样,Postman将增加授权参数到请求主体。对于所有其他情况,它会向URL添加授权参数。
7. OAuth 2.0
OAuth 2.0作为OAuth 1.0的升级版本。在Postman中按照以下步骤进行使用:
在Authorization下来授权标签中选择“OAuth 2.0”授权模式在“Add authorization data to”下拉选择框中,选择对应的请求模式;
设置请求的授权参数,有以下三个选择:
点击“Get New Access Token”按钮,在弹出的对话框中输入对应的参数;单击“Request Token”按钮获取对应的Token。接下来有了对应的Token后,就可以点击“Send”按钮发送请求了;
在“Access Token”输入框中输入一个Token,或者Token对应的环境变量,然后就可以点击“Send”按钮发送请求了;
在“Available Tokens”下拉框中选择已经存在的Token,然后发送请求。
案例:
/**
* 登录
* https://www.liulongbin.top:8888/api/private/v1/login
* post
* 参数:
* username(admin),password(123456)
*
* 上传图片
* https://www.liulongbin.top:8888/api/private/v1/upload
* post
* 请求头 :authorization : Bearer
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOjU wMCwicmlkIjowLCJpYXQiOjE2MTU4NjI
zODksImV4cCI6MTYxNTk0ODc4OX0.Rr- M1MTfVWER3i8KiIIlfP0mW6oHYu05Sz6WzCeaKSA
* 参数: file -- 文件
*/
可以给接口集
9.5 Pre-request Script--预处理脚本
Pre-request Script,翻译中文为预处理脚本,是请求发送之前需要执行的代码片段,在我们点击send发起请求之前,改区域的代码先执行。
使用场景:例如请求中包含一个随机数或者时间戳(时间的毫秒值),或者参数需要加密。
1. 给一个接口添加预处理脚本:新建一个网络请求,点击Pre-request Script,写入js脚本获取时间的毫秒值(时间戳)
2.给接口集添加预处理脚本:如图所示,完成后以后接口集下面所有接口在请求的时候都会先执行预请求脚本
在输入框右侧有一些简单的js脚本生成按钮,可以通过按钮生成
5.6 Tests内置脚本
既然有在请求发起之前执行的脚本,那么是否有在请求完成之后执行的脚本呢? 有Tests里面输入的脚本就是在网络请求之后执行的,Postman的强大之处在于其允许在对某一个request访问的之前和之后分别运行自定义的一段Javascript脚本,这样直接就完成了一个chain request的效果,可以将数条request连结成一个流程完成一体化测试。
如下在Pre-request Script和Tests中分别输入了js代码,执行如下如所示:
5.7 命令行运行接口结合
9.7.1 命令行运行
执行命令行前提条件是需要newman,newman是需要nodejs来安装的,所以得先下载安装node.node下载地址:https://nodejs.org/en/download/
cmd模式下输入node -v,回车,显示node版本号,即为安装成功
npm(node package manager):nodejs的包管理器,用于node插件管理(包括安装、卸载、管理依赖等)
cnpm:淘宝团队的cnpm是npm在国内的镜像,可以用此代替官方版本(只读),同步频率目前为 10分钟 一次以保证尽量与官方服务同步。
安装完后查看版本cnpm -v
安装newman:cnpm install newman --global
检查是否安装成功:newman -v
安装newman-reporter-html
执行cnpm install -g newman-reporter-html
在测试文件夹 pmtest 里面可以看到生成的一个 newman 文件夹,打开就可以看到生成的测试报告。
5.8 环境变量的使用
5.8.1 Postman 环境变量的应用
点击眼睛图标可以查看所有的环境变量和全局变量。点击眼睛图标右边的设置图标可以设置环境变量和全局变量。
环境变量可以分组设置,并且在使用的时候选择其中一组环境变量。 使用环境变量 {{baseUrl}} 两边各量个花括号括起来 这个环境变量可以在url 中使用,也可以在header 中能使用,还能在请求体中使用
选中No Environment(选中已有环境就变成编辑了)--> 点击眼睛-->点击Add
案例:新建两个环境,都创建相同的环境变量baseUrl值使用不同的网址,新建请求,使用{{baseUrl}},切换环境后,同一个请求访问到的页面不一样
5.9 全局变量的使用
5.9.1 Postman全局变量的应用
postman 的环境变量可以分组,但是全局变量不能分组,只能有一组全局变量,在设置和使用都类似于环境 变量。在下图位置设置全局变量。
点击右上角眼睛 --> 点击Globals右边的Edit,添加全局变量,点击save保存,和环境变量一样,通过{{timestamp}}引用
一、Shell介绍
1、什么是shell脚本
Shell脚本与Windows/Dos下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比Windows下的批处理更强大,比用其他编程程序编辑的程序效率更高,它使用了Linux/Unix下的命令。
二、Shell脚本的规则
Shell 和python都是弱语言
1、变量的规则
定义变量规则:
变量名=值
shell定义变量的规则:
1: 等号两边不能有空格2:定义特殊的变量需要用单引号或者双引号结合3:定义linux命令需要用反单引号
区分单引号和双引号的不同和相同点
双引号中有$变量名,输出的是变量名对应的变量值单引号中有$变量名,输出的是$变量名
image
定义linux命令需要用反单引号
image
2、脚本的命名格式
脚本名称使用.sh结尾
3、脚本的起始行格式
第一行必须写# !/bin/bash
案例一:打印路径
image
案例二:计算当前文件夹有几个文件
image
案例三:计算任意个一个文件下含有几个文件
image
4、脚本输入输出格式
1:输入语句用:read-p"描述"2:Shell输出值:echo$变量名
5、 脚本的调用
方式1:./脚本名.sh(权限的问题)方式2: sh 脚本名.sh
注意点:read可以传递多个数据 read –p”name and passwoed”name password
超过的部分都填充在最后一个变量上
image
6、参数传递
参数传递 :向.sh文件中传递数据
格式: sh 脚本名.sh 参数
$1:接收第一个参数~~$n$n: 文件名称$@: 所有参数 s$#: 参数个数 $0
image
7、比较运算符和逻辑运算符
(1)比较运算符(数字)
-eq 比较是否相等equal-ne 比较不相等 notequal-gt 比较大于 greater than-ge 比较大于等于 greaterequal-lt 比较小于 less than-le 比较小于等于 lessequal
(2)比较运算符(字符串)
== 比较是否相等!= 比较不相等
加一操作:((i++))((i+=1))加n操作:s=$(($s+$i))s=$[$s+$i]((s=$s+$i))
(3)逻辑运算符
-a 逻辑与 -o逻辑或 !逻辑非 and or
8、if语句
单条件语句格式:
if [ 条件 ] then 语句 else 语句 fi
注意点:
1: if后面有空格, 2:条件两边有空格, 3:if条件里面存在变量,需要$,而且变量两边需要双引号, 4:fi是结束标识
练习:判断用户输入的用户名(name)和密码(password)是否为****admin 和 123456,****如果是则提示登录成功(success),否则提示失败(fail)
image
多条件语句格式;
if [ 条件 ] then 语句 elif [ 条件 ] then 语句 ...... else 语句 fi
练习:输入学生的成绩,80
#!/bin/bashread -p"input score " scoreif [ "$score" -gt 80 -a "$score" -le 100 ]thenecho "very good"elif [ "$score" -gt 60 -a "$score" -le 80 ]thenecho "good"else echo "not good"fi
9、case规则
格式:
case $变量名 in "值") 语句;; "值") 语句;; ..... esac
注意:
1:case这第一行以in结尾 2:值可以是字符串也可以是数字, 如果数字范围[0-9] 3:结束语句;;4:esac结束标志
练习:输入一个序号,判断该用户选择哪款产品,A:笔记本 B:手机 C:小台灯
image
练习:请输入对客服的满意度,【0-3】不满意,【4-6】满意,【7-9】非常满意
image
10、For循环
格式:
for 变量 in 列表do语句done
注意1: 结束标志done
image
for i in 1 2 3 4 5doecho $idone
扩充:试想列表中的元素过多的时候,需要怎么做?
seq mix step max
注意:mix 开始数据 step:间隔 max 结束数据,如果step为1,可以省略,需要用反单引号,seq语句标志
//0-100for i in `seq 1 2 100`doecho $idone
11、While循环
while [条 件 ] do 语句 done
注意:
1: while后面有空格, 2:条件两边有空格, 3:while条件里面存在变量,需要$,而且变量两边需要双引号, 4:done是结束标识
练习:求1-100之间的和
image
三、Shell脚本的函数
1:定义格式
函数名(){代码 }调用格式函数名
注意点:必须先定义一个函数,然后再调用它
image
2:函数中的参数
使用$n来接收数据
image
练习1:输入1,100两个整数进行求和运算,并打印结果
image
练习2:输入任意两个整数进行求和运算,并打印结果
image
3:函数中的返回值
Shell中函数中默认存在返回值
查看函数的返回值$?
image
image
注意点:
如果没有代码错误默认返回值为0有代码错误返回1查看返回值内容:$?
代码有错误:
image