(1)狭义:找bug;运行软件; (2)广义:找bug;证明软件系统符合客户要求;运行软件;不运行软件;人工完成;自动化工具 (3)官方:IEEE提出软件工程一些标准术语,做了定义:使用人工和自动化手段运行或测试某个程序或系统的过程,目的在于检验它是否满足规定的需求或者比较实际结果和预期结果之间的偏差。 目的 -- 提高软件质量 (1)证明:20世纪60年代(表明软件能够工作:功能) (2)检测:20世纪70年(发现错误,各种不足(性能、界面、兼容)) (3)预防:20世纪90年代(管理质量,对各种不足问题进行分析整改避免)
概念:针对软件最基本组成单位进行的测试(函数、类)。 依据:LLD(详细设计说明书) 方法:白盒测试方法为主 考察基准:逻辑覆盖率
概念:针对测试好的单元进行组装查看数据传递是否有问题,也叫组装测试或者联合测试。 依据:HLD(概要设计说明书) 方法:黑盒&白盒 考察基准:接口测试覆盖率
概念: 将集成后的软件系统作为一个元素和其他硬件、软件进行整体的测试。 依据:SRS(软件需求规格说明书) 方法:黑盒测试方法为主 考察基准:需求覆盖率
概念:客户参与的测试(根据验收合同或者验收手册) 依据:验收合同;验收手册 方法:黑盒 考察基准:验收合同条款
Alpha测试(内测):由体验的用户在开发环境,有开发人员在现场进行的测试,测试过程可控。 Beta测试(公测):发布到市场,潜在用户在各种不同复杂的环境下无开发人员在现场进行的测试,测试过程不可控的。
(1)概念 在测试的过程中会发现缺陷,开发人员针对提交的缺陷进行修改,测试人员针对修改好的缺陷做测试再次确认,就叫做回归测试(Regression Testing)。回归测试可以发生在任何测试阶段。 (2)回归测试策略 选择性回归测试: 覆盖修改法--只针对发现缺陷的用例做再次确认(效率高); 周边影响法--针对发现缺陷的用了和可能会受到缺陷修改影响的用例再次确认; 指标达成法--针对发现缺陷的用了和可能会受到缺陷修改影响的用例进行指标设定(比如百分值多少)再次确认。 完全回归测试: 缺陷修改后对所有的用例都再次确认。(效果好、效率低)
(1) 黑盒:测试人员无需了解软件的逻辑结构,只需要了解软件的功能即可,即不看软件内部的测试; (2) 白盒:测试人员需要详细的了解软件内部的逻辑结构,包括函数结构,内部局部的数据定义引用,函数内部各个部分的控制语句是否合法等。也被称之为基于代码的测试。 (3) 静态:控制流分析技术,数据流分析技术,信息流分析技术;等 (4) 动态:逻辑覆盖率测试(分支测试,路径测试),程序插装等
测试活动 | 角色&职责 | 测试工作产品 |
---|---|---|
测试计划 | 测试经理(测试组长):测试的范围;人员安排;测试进度制定;风险识别和应对措施;测试任务划分;测试目标。 | 系统测试计划 集成测试计划 单元测试计划 |
测试设计 | 测试架构师:根据测试计划做各种方案(测试环境如何搭建;具体的测试内容怎么区分;测试流程怎么制定;测试数据如何选取;测试工具如何使用;测试代码测试脚本如何编写;测试用例如何编写;缺陷报告如何提交和跟踪。。。。。) | 系统测试方案 集成测试方案 单元测试方案 |
测试实现 | 测试人员:根据测试计划与测试方案完成测试脚本、测试代码、测试用例、测试规程的编写 | 系统测试用例、规程 集成测试用例、规程 单元测试用例、规程 |
测试执行 | 测试人员:根据测试计划与测试方案完成测试环境搭建、测试用例执行、缺陷报告提交、辅助测试经理完成测试总结报告、准备测试数据。。。 | 系统测试缺陷报告、总结报告 集成测试缺陷报告、总结报告 单元测试缺陷报告、总结报告 |
一次性把所有的工作都计划好,下一个活动的开始在上一个活动结束后进行。(一个测试,测试发现了缺陷不太好定位)
将测试工作阶段化,每一个开发工作都有对应的测试工作。
将测试工作阶段化,将每一个测试阶段又具体划分为两大部分(测试设计&测试执行),每一个开发工作都有对应的测试,测试的设计与测试的执行的顺序的相反的,开发和测试工作并行。
1) 何为测试用例
2) 测试用例的作用 1.防止测试的遗漏; 2.防止重复的测试工作; 3.可以进行测试复用; 4.可以估算测试执行的工作量; 5.为后续的项目提供一些指导性的数据。
要素 | 说明 | 举例 |
---|---|---|
测试用例编号 | 要求:唯一性;可识别性 作用:识别测试用例测试点;可以估算工作量; 编写规则:从大到小 系统测试:产品(项目)名称--测试阶段--测试类型--系统测试项名--系统测试子项名--XXX 集成测试:产品(项目)名称--测试阶段--集成测试项名(接口名字)--集成测试子项名--XXX 单元测试:产品(项目)名称--测试阶段--单元测试项名--单元测试子项名--XXX | 微信系统测试聊天功能 Wechat--ST--Func--Video--Called--001 微信集成测试支付接口 Wechat--IT--Pay--Meituan--001 微信单元测试文字聊天 Wechat--UT--TextChat--Gif--001 |
测试项 | 要求:可识别性;明显的归类 作用:分类 编写规则: 系统测试:需求项 集成测试:接口名 单元测试:函数名(类名) | 微信系统测试聊天功能 微信集成测试支付接口 微信单元测试文字聊天 |
测试用例标题(名称) | 要求:直接表达测试用例的目的,目的是唯一的;(尽量唯一) 作用:方便区分每一条用例,代表某条用例的特点 | 用手机号正确密码登录微信 用微信号错误密码登录微信 |
优先级(重要程度) | 要求:不同级别(高中低;123;) 作用:对测试执行工作进行轻重缓急划分 高:基本功能、重要特性。核心业务功能、使用频率高的 中:备选的非主流、非核心业务、使用频率中等的 低:使用频率不高、对系统业务功能影响不大的 | 微信 高:聊天;注册;登录;朋友圈;支付 中:通讯录;卡包;小程序;游戏 低:漂流瓶;摇一摇;看一看;拍一拍 |
预置条件 | 要求:不是每条用例都必须有预置条件; 作用:有些测试用例要一些依赖的 比较特别的依赖 | App测试,弱网测试 预置条件:信号比较弱的网络环境 App测试:5G网络 预置条件:5G网络 |
输入 | 要求:一定要具体明确;不可以用模糊的词语; 作用:能够经过处理得到预期结果 | 两个简体汉字“联通”;三个小写英文字符“abc”;5张100kJPG格式的图片 |
操作步骤 | 要求:一定要用动词; 作用:指导测试执行人员完成测试工作的一个向导; 不要用分支(如果,或者) | 输入。。。。 点击..... 双击左键 单击右键 打回车键 |
预期结果 | 要求:一定要具体明确;不可以用模糊的词语; 作用:明确判断测试用例能否通过 (具体的数据;输出形式;顺序) | 查询张阔建行账号信息 显示张阔的账号信息:X 显示张阔的账号信息 姓名 性别 账号 余额 开户日期 。。。。。 张阔 男 62** 888888888 |
实际的测试结果与预期结果之间不一致,存在偏差。叫做缺陷(Defect)、bug、故障(Fault)、问题(Problem)、失效(Failure)。
将发现的缺陷用标准的文字形式表示出来,就叫做缺陷报告。
(1)开发人员和测试人员对缺陷的理解是一致的; (2)缺陷不会被遗漏修改; (3)可以对缺陷进行缺陷分析为后续的项目提供指导。
属性 | 说明 |
---|---|
编号 | 序列号,缺陷管理工具会自动分配 |
标题(摘要信息) | 简洁的语言直接说明实际结果 举例:9被零除,报错runtime error。 |
缺陷发现人(提交人) | 可以进行后续沟通,缺陷的回归责任人 |
缺陷提交日期 | 缺陷的优先级有关;缺陷走势 |
严重程度 | 从用户的角度;缺陷的发生给使用造成的影响 致命的:程序崩溃;数据丢失 严重的:核心业务无法使用; 中:备选业务无法使用; 低:文字错误; |
优先级 | 从开发人员的角度:缺陷发生后修改的应对时间; 高:一天内修改;下一个版本修复 中:三天内修改;三个版本内修复 低:一周内修改;五个版本内修复 |
缺陷是否重现 | 至少要重现三次 |
缺陷的重现步骤 | 缺陷是怎么发现的用的什么数据详细描述 预期结果和实际结果 |
状态 | 便于缺陷的跟踪和缺陷目前阶段负责人的定位 |
测试阶段 | 单元测试、系统测试、集成测试 |
测试模块(需求。。。) | |
测试类型 | 功能测试、性能测试、、、 |
测试用例编号 | |
开发阶段 | |
测试环境(操作系统;浏览器;模拟器;真机型号) | |
测试版本 |
状态 | 中文 | 含义 |
---|---|---|
NEW | 新建 | 测试人员提交一个Bug |
OPEN | 打开 | 测试经理同意Bug |
Abandon | 放弃 | Bug因重复或者其他原因不予修改 |
Postpone | 延期 | Bug不重要,在接下来的几个版本不修改 |
Assign | 分配 | Bug已经分配给开发人员 |
Fixed | 已修改 | 开发人员已经修复了Bug |
Reopen | 重新打开 | 该Bug回归测试未通过,重新修复。 |
Close | 关闭 | Bug修复。 |
有效等价类
无效等价类
输入是取值范围或者是值的个数
输入集合或者多选一的条件
输入Bool
输入划分好的等价类
输入 同时满足多个条件
案例: 一个档案管理系统,允许用户通过输入年月对系统进行查询。要求:194901-204912
上点
离点
内点
输入输出是范围
如果输入输出是集合或者多选一
如果输入输出的个数是取值范围,
如果是内部数据结构
特点
适用范围
条件桩
条件项
动作桩
动作项
特点:组合测试
适用范围
原因
结果
中间节点
因果关系
恒等
非
与
或
制约关系
互斥(E (Exclusive))
包含( I(Inclusive))
唯一( O (Only))
要求( R(Require))
必须( M (Mandatory))
特点:组合测试
适用范围
因子
状态(水平)
正交表
将需求规格说明书划分为需求子片段
分析需求,找出因子和状态 -> 构造因子状态表
分析状态表 ,对因子状态进行加权
重构因子状态
适当补充风险大的组合
特点
范围
有限状态机
划分需求片段
找出状态和状态发生跳转的条件
画出迁移图
根据状态迁移图得到状态事件转换表
根据状态转换表得到状态转换树
通过状态转换树得出测试路径
适当添加非法路径
生成测试用例
争对软件系统需求片段的部分综合运用等价类/边界值进行测试的一种方法
极限值
中间范围值
特殊值
在输入条件的数据不明确但输出结果确定的情况下,争对输出部分综合运用的等价类和边界值进行分析设计的一种方法。
利用测试人员对软件系统的熟悉程度和对开发人员开发盲点有针对性的测试
系统测试计划主要是从管理角度对整个系统测试工作进行规划和控制。 1、人员分工 2、测试范围 3、时间进度 结合模板看下系统测试计划应该编写的内容: 1、项目背景 2、组织形式-----------------人员分工 3、测试对象-----------------测试范围 4、测试任务安排--------------时间进度 5、其它
软件系统是用来干嘛的,主要的功能模块有哪些。
最重要的是把每个人的具体分工明确下来,一般按测试类型或模块。 考虑分工时需要结合每个人的性格、能力以及态度等。
1、应测试特性 按照测试类型来看 1)功能测试可以写到功能模块(比如客户管理),也可以写到具体功能点(比如新建客户、查询客户、编辑客户、删除客户等)。写到功能模块会比较省力和简单,对于工作量的把控会比较难一点。写到具体功能点会比较费时间,但对于工作量的把控会比较简单一点,同时也有助于理解业务。 2)性能测试可以写要测试的性能指标,比如cpu占用、电量消耗等。 一般管理员所使用的后台不用考虑性能测试,只有用户使用的前台需要考虑性能测试。 3)兼容性测试可以列出准备测试的环境,比如浏览器、机型等。 。。。 2、不被测试特性 1)如果时间或者人力资源不够,可以不测。 2)缺少相关的测试环境,无法测试。
主要要明确: 1、任务描述 2、完成时间 3、提交工作成果物 测试任务安排可以按测试流程、测试类型、人来划分。 人力资源估算一般用人天,不用人时。 风险一般包含: 1、产品风险,由于软件的质量太差,对测试工作进度的影响。 2、人力风险,由于人员离职,对测试工作进度的影响。
1、需求跟踪,只在军工或者金融这种行业会做比较严格的需求跟踪,原因是需求太复杂。
2、测试通过/失败标准 1)测试执行角度考虑,只有执行了哪些测试用例才算通过 2)软件质量角度,只有在bug减少到什么程度时才算通过
3、测试挂起/恢复条件 1)软件质量太差导致测试暂停 2)测试环境出故障导致测试暂停
系统测试方案是从技术角度对系统测试工作进行规划和控制。 1、如何编写系统测试用例? 2、如何部署系统测试环境? 3、如何执行系统测试用例? 4、如何提交缺陷报告? 5、如何进行回归测试?
根据模板看下系统测试方案的内容:
1、被测对象 2、测试模型(*),对应比较粗的测试方案 3、测试需求/测试设计/缺陷跟踪设计,对应比较细的测试方案
跟测试计划类似,也分为:
1、应测试特性
如果测试计划中功能测试只列到模块,测试方案中功能测试需要列到功能点。如果测试计划中功能测试已经列到功能点,测试方案中照搬即可。
接下来的系统测试用例与方案中应测特性中每条对应。
客户管理------------------新建客户----------------------新建合法信息客户
2、不被测试特性
1、测试组网图-----------------如何搭建测试环境
1)需要准备哪些设备,如何连接 2)设备上需要安装什么软件 3)设备对应的地址是哪个(比如测试用服务器的ip地址是多少)
2、测试原理--------------------如何编写测试用例 使用什么测试工具 不同的测试类型分别使用哪些测试技术和测试工具
3、操作流程--------------------如何执行测试用例(顺序) 不同测试类型的测试用例、不同模块的测试用例的执行顺序。 后续项目的测试方案要求写被测对象+测试模型即可。
基础语法、函数 , class, pip, 等
用户管理(useradd, userdel, usermod, passwd ), 组管理(groupadd , groupdel ,groupmod , newgrp ), 权限管理(chmod, chown), 文件操作(touch, cat, less, more, vi, rm, cp, mv, link) 文件夹操作(mkdir, ls, cd, pwd, rmdir, ) 进程和服务(systemctl, ps, kill) 计划任务(crond, crontab) 其他;
1docker image <list | rm |pull |push >
2docker run -p [local:docker] -v [local:docker] -e 环境变量 --name 容器名 镜像名:版本
3docker ps <-a>
4docker rm [name|cid]
5docker kill [name|cid]
xxxxxxxxxx
21sudo yum install docker python3 python3-pip -y
2sudo pip install docker-compose
x1version'2'
2services
3 mysql
4 # 目前 latest 版本为 MySQL8.x
5 image mysql5.7
6 restart always
7 environment
8 MYSQL_ROOT_PASSWORD"123456"
9 command
10 --default-authentication-plugin=mysql_native_password
11 --character-set-server=utf8mb4
12 --collation-server=utf8mb4_general_ci
13 --explicit_defaults_for_timestamp=true
14 --lower_case_table_names=1
15 privilegedtrue
16 networks
17 web
18 ports
19 3306:3306
20 volumes
21 ./mysql-data/data:/var/lib/mysql
22 ./mysql-data/config:/etc/mysql/conf.d
23 #- /var/run/mysqld.sock:/var/run/mysqld/mysqld.sock
24
25 nginxphp
26 restart always
27 image webdevops/php-nginx
28 privilegedtrue
29 networks
30 web
31 ipv4_address"172.19.1.11"
32 ipv6_address"2409:8a70:8851:5430:dddd::11"
33
34 ports
35 80:80
36 volumes
37
增删改查,外键约束,联表查询,表/库的创建与删除
xxxxxxxxxx
161# 创建表 数据类型 唯一约束 主键约束 非空约束 自增序列 外键约束
2Create table if not exist `table name` (`属性名` 数据类型 唯一约束 主键约束 非空约束)
3# 删除表
4DROP TABLE `table name`
5# 创建库
6CREATE DATABASE `database name`
7# 删除库
8DROP DATABASE `database name`
9# 插入数据
10INSERT INTO `table name` (`Key Name`) values (1), (2), (3)
11# 更新数据
12UPDATE `table name` SET 属性名=修改后的值 WHERE 定位条件 # 否则全部替换
13# 查询数据
14SELECT `Keys` FROM `table1` where 条件 [UNION SELECT `Keys` FROM `table2` where 条件2]
15# 删除行 删除所有匹配到的行
16DELETE FROM `table1` where 条件
不完全的
xxxxxxxxxx
51use DATABASE_NAME; # 切换到数据库,有数据是自动创建,否则不创建
2db.dropDatabase(); # 删除当前使用的数据库
3db.collection.drop() # 删除集合
4db.COLLECTION_NAME.insert(document) # 插入文档
5db.col.find() # 查看数据
指令 | 说明 | 示例 |
---|---|---|
config --global user.name | 配置全局Git用户名 | |
config --global user.email | 配置全局Git用户邮箱 | |
init | 初始化仓库 | |
add FileName | 添加文件追踪 | Git add . |
status | 查看当前工作区中的文件状态 | |
commit -m “” | 向仓库提交一个版本 | |
reflog | 查看仓库的版本提交记录 | |
reset --hard Name | 将工作区回退到指定的版本 | |
checkout -- FName | 将文件恢复仓库中的最新版本 | |
reset HEAD Fname | 将文件从暂存区撤回. | |
clone Address | 把远程仓库克隆到本地 | |
pull | 从远程仓库拉取最新版本 | |
push -u “” -o | 把本地仓库推送到远程仓库 | |
branch Name | 创建分支 | |
checkout Name | 迁出分支 | |
branch -a | 查看全部分支 | |
marge Name | 合并分支 | |
branch -D Name | 删除分支 |
标签 | 说明 | 示例 |
---|---|---|
a | 超链接 | <a href="/">连接名</a> |
p | 段落 | |
img | 引用一张图片 | <img src="address" alt="描述"/> |
div | 页面分组 |
交互脚本
层叠样式表
(1)测试每一个表单项的内容正确性,通过填入正确的内容,提交,通过web页面的反馈信息来判断是不是正确。 (2)每个表单输入项的功能,根据SRS来测。等价类和边界值测试 (3)所有表单项会包含各种条件判断,可以使用判定表的方式来测试 (4)必填项:- 没有填写是否会报错?- 报错的时候,有没有注明哪一个必填项没填 (5)下拉列表:
(6)单选框:单选框的独选型(比如按住键盘shift或者ctrl不能进行多选) (7)关于起止时间控件的测试
(8)提交按钮
(9)考虑业务约束
(10)表单的UI界面
(1)开发发布了一个新版本,我们测试出来100个BUG,其中10个HIGH的bug。 (2)开发优先修改了这10个H的BUG,发布了新版本。 (3)测试人员就要开始第一次回归测试。
(4)测试做完第一轮回归后,开发会继续修改BUG,然后发布第二个版本,测试在进行第二轮回归。。。。。。 (5)一直到,测试下来的结果符合一开始制定的测试结束标准(例如:严重级别为高的BUG为0,严重级别为中的BUG,解决了80%;严重级别为低的BUG,解决了50%以上),才能结束测试。
对web产品进行检验以验证产品符合安全需求定义和产品质量标准的过程
网络安全
客户端安全
服务端安全
服务器端的安全漏洞可能导致大量的用户数据受影响、或导致大量用户无法使用正常功能,后果非常严重
攻击服务器端的后果主要有两个特点:影响人数多、经济损失大
代码静态扫描
用工具对代码进行扫描发现漏洞
内存扫描
黑盒的动态测试
三个阶段
两个特点
在网站涉及数据库操作的功能中,修改上传的参数,拼接网站原有的SQL语句,达到获取或篡改网站数据等目的。
nmap
SQLMAP
按注入点类型
数字型
字符串
单引号
双引号
按数据提交方式
get
post
获取数据库名
获取当前库表名
获取某个表的字段名
获取某个表的数据
防火墙
预编译
DOM
社会工程学
非持久型
反射型xss
DOM型xss
触发条件
持久型
存储型xss
触发条件
什么是文件包含漏洞?
两种类型
远程文件包含 (RFI)
两个参数
常用函数
include
include_once
require
require_once
危害
如何防御
什么是文件上传漏洞
利用条件
危害
利用中间件漏洞上传文件
IIS解析漏洞
APACHE解析漏洞
NGINX解析漏洞
其它漏洞
如何防御
危害
水平越权
什么是水平越权?
如何防御
垂直越权
什么是垂直越权?
如何防御
逻辑设计的不合理
代码校验不全面
Target
Proxy
Spider
Scanner
Intruder
Repeater
Sequencer
Decoder
Comparer
Extender
Project options
User options
Alerts
下载和安装python
下载和安装SQLMAP
基础知识
回车的作用
选择默认的大写选项
‘-h’和‘-hh’的区别
‘--’和‘-’的区别
七种查看等级:‘-v’ (0 - 6,默认为1): 0、只显示python错误以及严重的信息。 1、同时显示基本信息和警告信息。(默认) 2、同时显示debug信息。 3、同时显示注入的payload。 4、同时显示HTTP请求。 5、同时显示HTTP响应头。 6、同时显示HTTP响应页面。
指定输出日志路径
默认输出路径:C:\Users\用户名\AppData\Local\sqlmap\output\
--output-dir=d:\sqlmap\logs
五种探测等级:‘--level’ (1 - 5,默认为1)
在sqlmap/data/xml/payloads文件内可以看见各个level发送的payload。HTTP User-Agent/Referer头在level为3的时候就会测试
四种风险等级:‘--risk’ (0 - 3,默认为1)
0和1比较安全;3:增加OR语句的SQL注入测试。风险等级越高数据被篡改的风险越高。
常用命令
访问网址的方式
--url或-u
-l
直接读取burp proxy的日志中的url
可跟绝对路径、相对路径
如果域名、端口和参数相同,会去重
-m
从文件里读取多行的url地址
不同请求的方式
--method
可以指定请求方式,如GET、POST、PUT等
--data
指定的数据会被用post方式提交
--proxy
使用代理
请求头相关
--cookie
使用指定的cookie
--user-agent、--random-agent
指定或随机user agent
--mobile
使用手机的user agent
枚举信息
--banner(-b)
获取数据库管理系统的标识
--current-user
--current-db
--hostname
--is-dba
--users
--passwords
--privileges
--dbs
--tables
枚举DBMS数据库中的表
--columns
枚举DBMS数据库表列
-D
要进行枚举的指定数据库名
-T
要进行枚举的指定表名
-C
要进行枚举的指定列名
--dump
转储数据库表项,查询字段值
--sql-query=QUERY
--sql-shell
提示交互式SQL的shell
暴力破解
--common-tables
--common-columns
操作系统的访问
--os-shell
--os-cmd=OSCMD
执行操作系统命令
常用辅助命令
--dbms
指定数据库类型
--smart
--wizard
--threads
最大的HTTP(S)请求并发量(默认为1),最大10
sqlmap\lib\core\settings.py,修改MAX_NUMBER_OF_THREADS可更改最大线程数
--batch
--crawl
从目标URL开始爬取目标站点并收集可能存在漏洞的URL
--flush-session
断言:将预期结果和实际结果进行比较的过程。 断言方法:实现这种比较的方法。
常见的断言方法有:
方法 | 解释 |
---|---|
assertEqual(a,b) | 判断a和b是否相等,相等则测试通过,不相等则测试失败; |
assertNotEqual(a,b) | 判断a和b是否不相等,相等则测试失败,不相等则测试通过; |
assertTrue(x) | 判断表达式x是否为True(成立),成立则测试通过,不成立则测试失败; |
assertFalse(x): | |
assertIs(a,b) | 判断a和b是否为同一个对象,是则测试通过,不是则测试失败; |
assertIsNot(a,b): | |
assertIsNone(x) | 判断x表达式是否为None,是则测试通过,不是则测试失败; |
assertIsNotNone(x): | |
assertIn(a,b) | 判断a是否在b中,在则测试通过,不在则测试失败; |
assertNotIn(a,b): | |
assertIsInstance(a,b) | 判断a是否是b的实例,是则测试通过,不是则测试失败 |
assertNotIsInstance(a,b): |
在运行测试时,有时需要直接跳过某些测试用例,或者当用例不符合某个条件时跳过测试,又或者需要直接将测试用例标记为失败。unittest提供了实现这些功能的装饰器。
1)直接通过unittest.main()方法加载所有的测试用例进行执行; 2)将所有的测试用例添加到测试套件里,然后使用测试运行器进行执行; a. 手动添加:addTest() b. 自动添加:discover()
随着层级及测试用例的不断增加、我们还可以选择使用unittest提供的discover方法去自动发现测试用例并执行它们。
main()方法加载测试用例的规则跟discover()方法加载测试用例的规则相同。——》unitest执行测试用例的规律:unittest框架默认根据ASCII码的顺序加载测试用例,数字和字母的顺序为:0-9、A-Z、a-z。
addTest()方式加载测试用例,测试用例是按照添加的先后顺序进行执行。
如果你希望你的测试用例集按照特定的顺序去加载,那么有两种方法: 一种是通过TestSuite()类提供的addTest()方法按照你希望的顺序去添加测试用例; 另外一种方式将需要优先执行的测试用例选择优先级更高的ASC码字符去表示。
以Selenium为例:
首先要搭建Selenium的环境:
获取浏览器驱动并配置到系统环境变量
安装浏览器并禁用更新
https://npm.taobao.org/mirrors/chromedriver
pip install seleium
Selenium是专门为Web应用程序编写的一个验收测试工具。
xxxxxxxxxx
71from selenium import webdriver
2
3browser=webdriver.Firefox()#启动浏览器
4browser.get("http://www.baidu.com")#打开百度首页
5browser.find_element_by_id("kw").send_keys("Selenium") #定位到搜索框,输入Selenium
6browser.find_element_by_id("su").click() #点击搜索按钮
7browser.quit() #关闭浏览器
WebDriver属于Selenium体系中设计出来的用于操作浏览器的一套API.
站在WebDriver的角度,它针对多种编程语言实现了一遍这套API,所以它可以支持多种编程语言。
站在Python的角度,WebDriver是Python(以课程选择的编程语言为例)的一个用于实现Web自动化的第三方库。
WebDriver 根据网页中页面元素拥有不同的标签名和属性值等特征来定位到不同的页面元素,并完成对已定位到的页面元素的各种操作。
Web UI自动化测试要做的事情就是通过代码的方式去模拟手工测试的过程。 实施过程可以分为两个部分:
(注意:做元素定位的时候,尽量不要去使用有可能取多个但是定位第一个的情况,因为不同的软件的实现可能不同,这个状态不是确定的,应该尽量写准确,能定位到某一个特定元素。)
定位方式 | Xpath | CSS |
---|---|---|
标签 | //div | div |
id定位 | //div[@id=’xx’] | div#xx |
class定位 | //div[@class=’xx’] | div.xx |
属性定位 | //div[@yy=’xx’] | div[yy=xx] |
定位子元素 | //div/x1 | div>x1 |
xxxxxxxxxx
61element.click() # 点击元素
2element.send_keys() # 发送按键
3
4# 鼠标事件对象
5from selenium.webdriver.common.action_chains import ActionChains
6ActionChains(Driver对象).move_to_element(Element对象).click().pri...
JDK 1.8 & Jmeter
负载测试 执行时间 > 压力测试
工作负荷 = 虚拟用户数 = 线程数
响应时间
throughput ~Ti & To 吞吐量 例如:服务器接收的请求为吞,发出的响应为吐 量:必须有一段时间的计算
吞吐率:单位时间上的吞吐量,一般单位是字节/秒,请求数/秒,页面数/秒,人数/天......
网页点击数/请求 要注意是向服务器发送了有效的请求
特点:
协议基础 - 了解所使用的协议 SOAP ,HTTP ,FESTful等
如何客户端从服务端按照协议 获取数据?
HTTP / FEST
Get - 请求参数 ?Key=Value&
Post - 请求参数安全+数据量比较大,既可以URL传参也可以请求体传参
PUT
DELETE
SOAP
机器之间 交互数据的方式?
使用工具
类似于HTML用于表述页面的结构
类似于CSS用于描述网页的样式
同Web中的js一样
配置文件,保存页面的一些配置
定义:自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程。通常,在设计了测试用例并通过评审之后,由测试人员根据测试用例中描述的规程一步步执行测试,得到实际结果与期望结果的比较。在此过程中,为了节省人力、时间或硬件资源,提高测试效率,便引入了自动化测试的概念。(百度百科)
什么时候用自动化测试?
分类
测试手段
单元自动化测试/白盒自动化测试
优点
缺点
UI自动化测试
优点
缺点
接口自动化测试
优点
缺点
测试对象
pc端自动化测试
UI自动化
接口自动化
移动端自动化测试/app自动化测试
UI自动化
接口自动化
robotium
UIAutomator
appium
appium 是一个自动化测试开源工具,支持 iOS 平台和 Android 平台上的原生应用,web应用和混合应用。
Appium Desired Capabilities目的:告知服务端被测设备的信息
信息分三类:公共信息、android独有信息、IOS独有信息
platformName:手机操作系统
platformVersion:手机操作系统版本
deviceName:手机或模拟器类型
app:安装包的绝对路径
appPackage:运行的android包名
appActivity:要启动的android activity
noReset:在当前session下不会重置应用的状态,默认为false