测试开发路线

Rudy 2025-1-20 54 1/20

测试开发学习路线

一、测试基础

Q1:测试流程包含哪些关键步骤?

  1. ‌:需求分析→测试计划→用例设计→执行测试→缺陷管理→测试报告,需结合具体案例说明各阶段输出物‌。

需求分析案例题:给你一个带有logo的水杯,你会如何去测试?(测试思维)

分析:

功能:装水、是否漏水、装热水、冰水、茶水、饮料、是否保温

非功能:

界面:logo是否与原型图一致、是否美观、是否掉色、材质

易用性:防滑、防烫、带手把、会不会刺嘴巴、携带是否方便

兼容性:能否能装其他的液体

安全性:装热水的时候,会不会水有毒

性能:防摔

Q2:黑盒测试与白盒测试的区别?

  • ‌:黑盒关注功能实现(用户视角),白盒基于代码逻辑验证(开发者视角),灰盒介于两者之间(接口级测试)。

  • 黑盒测试方法:
  • 1.等价类划分法:把可能用到的数据划分为不同的类别,然后再从每一类中挑选有代表性的数据用以测试。如账户名登录,也就是取正则表达式,取6-18位长度,有效等价类与无效等价类。
  • 2.边界值法:设置边界值也就是极值,是等价法的补充。
  • 3.场景法:通过场景对系统的功能或业务流程进行测试。遍历所有的基本流和备选流来完成系统中的所有场景。也就是说流程图。
  • 4.因果图法:分别列出需求中的因子(条件)和结果,当需求中存在多个条件,不同条件中存在不同的结果。

Q3:测试用例怎么写?

答:设置用例编号、用例标题、模块、优先级、前置条件、测试步骤、测试数据、预期结果。

测试开发路线

Q4:基本介绍

1.测试行业

1>什么是软件?

控制计算机硬件工作的工具

2>什么是软件测试?

使用技术手段验证软件是否满足使用需求。

3>软件测试目的

减少软件缺陷(bug),保障软件质量

2.测试主流技能

1>功能测试:

测试主要验证程序的功能是否满足需求

2>自动化测试:

使用代码或工具代替手工,对项目进行测试

3>接口测试:

使用代码或工具验证程序中的接口是否访问正常

4>性能测试:

模拟多人使用软件,查找服务器缺陷。

3.测试分类

1>按阶段划分

  • 单元测试:针对程序源代码进行测试
  • 集成测试:针对程序接口进行测试
  • 系统测试:针对程序功能、非功能进行测试
  • 验收测试:使用不同用户(内测、公测)进行测试

2>按代码可见度划分

  • 黑盒测试:不关注源代码,针对程序UI功能进行测试
  • 灰盒测试:针对程序部分代码进行测试(接口)
  • 白盒测试:针对程序源代码进行测试

3>其他

  • 性能测试:归属专项测试
  • 自动化测试:归属功能测试

4.质量模型

功能、性能、兼容、易用、安全、可靠性、移植性、维护性

5.测试流程

  • 需求评审
  • 编写测试计划
  • 用例设计
  • 用例执行
  • 缺陷管理
  • 测试报告

Q5:用例设计方法

测试开发路线

测试开发路线

Q6:练习案例:

微信发朋友圈

1、成功(1张图⽚)

2、成功(1段⽂字)

3、失败(内容为空)

测试开发路线

等价类划分法

测试开发路线

案例1(qq程序)

要求:6~10位⾃然数

测试开发路线

案例2(电话)

要求:

  1. 区号:空或者是三位数字
  2. 前缀码:⾮“0”且⾮“1”开头的三位数字
  3. 后缀码:四位数字

测试开发路线

测试开发路线

边界值法

⼀、解决边界限制问题

测试开发路线

步骤

1、明确需求

2、确定有效和⽆效等价

3、确定边界范围

4、提取数据编写⽤例

 案例

测试开发路线

边界值优化:开内闭外

10<a<=20 -->使用(10,20]

所以开内闭外:选择要测试的点 上点+内点=必测

为什么内点必须测?验证范围的连续性

优化:去除7和9.

判定表法

测试开发路线

1、明确需求

2、画出判定表

1)、列出条件桩和动作桩

2)、填写条件项,对条件进⾏全组合

3)、根据条件项的组合确定动作项

4)、简化、合并相似规则(有相同的动作)

3、根据规则编写测试⽤例

场景法

练习流程图⼯具:

1、线上⼯具:https://processon.com/diagraming/605880af07912927bd71c388

2、离线⼯具:visio

3、其他⼯具:Excel

错误推荐法

测试开发路线

Q7:缺陷管理

1.1 定义

软件中存在的各种问题,都为缺陷,简称bug;

1、少功能

2、功能错误

3、多功能

4、缺少隐性功能

5、易⽤性(软件测试⼈员专业⻆度)

1.2 缺陷产⽣的原因

1、需求⽂档

2、架构设计

3、编码实现

4、环境(硬件、软件)

1.3 缺陷的⽣命周期

测试开发路线

1、回归测试:

①常规项⽬回归:项⽬本次发布新增2个模块,最基本要测新增模块功能及新增模块关联的旧模块。

②⾮常规项⽬(银⾏、部队、航天):新增功能,必须全部复测。

2、回归bug:上⼀个版本发现的缺陷,开发修复完毕,在下个版本进⾏重新验证。

⼯作流程(⼩结):

设计⽤例->执⾏⽤例(执⾏测试)->缺陷(提交、验证、关闭)

缺陷定义:任何问题(Bug)

缺陷标准:多功能、少功能、错误、缺少隐性功能、易⽤性

描述缺陷重点:缺陷标题、前置条件、复现步骤、预期结果、实际结果、附件备注

提交缺陷信息:指派⼈、缺陷等级、修复优先级、类型、状态(统计缺陷)

缺陷管理

excel示例

测试开发路线

1.4 提交注意事项

测试开发路线

1.5 缺陷管理⼯具

1、项⽬管理⼯具-管理缺陷 (禅道、JIRA、TFS)

2、Excel管理缺陷

1.6 禅道(项⽬管理⼯具)

地址:https://demo.zentao.net/user-login.html

使⽤禅道管理缺陷

创建缺陷

测试开发路线

Q8:HTML入门

form标签

作⽤:提交⻚⾯输⼊的数据到指定⻚⾯或后台

<form action="10-接受数据.html" method="get">
 ⽤户名:<input type="text" name="username"/>
 <br />
 密码框:<input type="password" name="password"/>
 <br />
 <!--
 单选效果:
 1、相同⼀组的radio才能做单选。
 2、设置相同(组名)name属性值为⼀组。
 -->
 性别:
 <input type="radio" name="one"/>男
 <input type="radio" name="one"/>⼥
 <br />
 您的爱好:
 <input type="checkbox" />挣钱
 <input type="checkbox" />吃饭
 <input type="checkbox" />欣赏美
 <input type="checkbox" />个⼈发挥
 <br />
 <input type="submit" />
 <input type="reset" />
 <input type="button" value="点我试试"/>
 </form

⼤盒⼦:div、独占⼀⾏

⼩盒⼦:span、⼀⾏可以放多个

二、数据库基础

1、分类

常用关系型数据库

Oracle、MySQL、Microsoft SQL Server、SQLite

非关系型数据库

redis、mongodb、hbase

2.mysql使用

netstat -anptu | grep 3306

mysql -u root -p

主键:id(唯一标识)外键:book_id(与其他表相关联)

desc database;查看表结构

添加多行数据

insert into students (id, name) values(0,'张三');

修改数据

update students set name='ᇲՌ๼ ',age=22 where id=5

删除数据

delete from students where id=6;

此方法为物理删除,工作中大部分使用逻辑删除

逻辑删除是指通过设定一个字段来标识当前记录已经删除,如is_delete

其他删除数据的方式:

truncate table studens;  清除表里面所有的数据,但是表结构会保留,自增长字段的值会从1开始。

drop table students; 删除数据表,包括数据和表结构

模糊查询:

select * from students where name like '孙%';

范围查询:

select * from students where hometown in ('北京','上海 ','广东');

排序:

select * from ᤒݷ order by 字段1 asc|desc,  字段2 asc|desc ........

求表的总的记录数

select count(*) from students;

分组查询:

select sex,count(*) from students group by sex;

分组加条件:

select sex,count(*) from students group by sex having sex='男';

分页查询:

select * from students limit (n-1)*m, m;  (n为第n页数据,m为条数 )

3.连接查询

测试开发路线

内连接 select * from 表名1 inner join 表名2 on 表1.列=表2.列;

查询的是两个表的交集的数据

表1的列与表2的列一定是存在关联关系

内连接连接时可以连接多个表

select * from 表1 left join 表2 on 表1.列=表2.列

左连接查询的是左表特有的数据,对于右表中不存在的数据用null来填充

右连接

select * from 表1 right join 表2 on 表1.列=表2.列

右连接查询的是右表特有的数据,对于左表中不存在的数据用null来填充

自关联

自连接的应用场景

省、市、区的信息,一般不会分开放在不同的表里面进行存储,而是放在同一个表当中。

测试开发路线

要通过自关联进行查询时,当前自关联的表当中一定会存在两个相关联的字段

select * from 表名 as 别名1 inner join 表名 as 别名2 on 别名1.列=别名2.列

-- 查询出河南省所有的市

select * from areas as a1 inner join areas as a2 on a1.aid=a2.pid where a1.atitle='河南省';

子查询

将一条SQL查询的语句嵌入在其他的SQL语句中,被嵌入的SQL语句称之为子查询,其他的SQL称之为主查询

子查询select语句,要么是充当条件,要么充当数据源

子查询语句是一条完整的select语句,且可以单独执行

-- 例1:查询王昭君的成绩,要求显示成绩(标量子查询)

select studentNo from students where name='王昭君';

子查询充当条件

select * from scores where studentNo=(select studentNo from students where name='王昭君');

子查询充当数据源

-- 例1:查询数据库和系统测试的课程成绩

select * from scores as sc inner join (

select * from courses where name in ('数据库','系统测试')

) as co on sc.courseNo=co.courseNo;

牛客网sql基础题知识点

1.查询所有列

select * from 表名

2.查询结果去重

select distinct 关键字 from 表名

3.查询结果限制返回行数

select 关键字 from 表名 limit 行数

4.查找指定结果

select 关键字
from 表名
where 关键字条件;

5.查询中间值

where 关键字条件1 and 关键字条件2;   或   where 关键字 between 值1 and 值2

6.查找除了x的信息

where 关键字 != '值';   或 where 关键字 <> ‘值’;   或 where 关键字 not in (“值”)

7.范围多值

where 关键字 in ('值1', '值2', '值3');

8.查看含**的结果

where 关键字 like '%**%';

9.查找最高值/ 计数 / 平均值 / 最小值

select max(关键字) / count(关键字) / avg(关键字) / min(关键字)

10.数字值保留*位小数

round(avg(值), *)

11.分组

group by 关键字;

12.分组过滤

group by 关键字
having 关键字(值) < 值1

13.排序升序/降序

order by 关键字 asc/desc ;

14.连接表内连接

inner join 表名 as up
on 表1属性 = 表2属性 and 表1.关键字 = '值1'

15.统计每个学校的答过题的用户的平均答题数

select
university,
count(qpd.question_id)/count(distinct qpd.device_id) as avg_answer_cnt
from user_profile as up
inner join question_practice_detail as qpd
on up.device_id = qpd.device_id
group by university ;

16. 统计每个学校各难度的用户平均刷题数

select
university,
difficult_level,
count(qpd.question_id)/count(distinct qpd.device_id) as avg_answer_cnt
from question_practice_detail as qpd
inner join user_profile as up
on qpd.device_id = up.device_id
inner join question_detail as qd
on qpd.question_id = qd.question_id
group by university, difficult_level

17.统计每个用户的平均刷题数

Select
university,
difficult_level,
count(qpd.question_id)/count(distinct qpd.device_id) as avg_answer_cnt
from question_practice_detail as qpd
inner join user_profile as up
on qpd.device_id = up.device_id and up.university = '山东大学'
inner join question_detail as qd
on qpd.question_id = qd.question_id
group by difficult_level

18.查找山东大学或者性别为男生的信息** **Union 不包含重复行,union 包含重复行

select
device_id, gender, age, gpa
from user_profile
where university='山东大学'
union all
select
device_id, gender, age, gpa
from user_profile
where gender='male'

19.划分为25岁以下和25岁及以上两个年龄段

if(age>=25, "25岁及以上", "25岁以下") as age_cut;

20.**将用户划分为***20岁以下,20-24岁,25岁及以上三个年龄段,分别查看不同年龄段用户的明细情况*

select
device_id,
gender,
case
•   when age>=25 then '25岁及以上'
•   when age>=20 and age < 25 then '20-24岁'
•   when age<20 then '20岁以下'
•   else '其他'
end as age_cut  
from user_profile

21.年月日函数

where year(date)='2021' and month(date)='08'

22.计算用户的平均次日留存率*** *次日/ 三日/ 七日* *interval 1 / 2 / 6

想要查看用户在某天刷题后第二天还会再来刷题的平均概率。请你取出相应数据。
select
count(t2.device_id)/count(t1.device_id) as avg_ret
from
(
•   select
•     distinct device_id,date
•   from question_practice_detail
) as t1
left join(
select distinct device_id,date
from question_practice_detail
) as t2
on t1.device_id = t2.device_id and t2.date=date_add(t1.date, interval 1 day);

23.切分函数substring

substring('www.csdn.net',5) from web_info  

24.获取子字符串:“csdn.net”,子串的位置必须从5开始

substring_index(blog_url, '/', -1) as user_name
***\*count\****:代表第几次出现;count为正数,代表取标识符出现第count次之前的子串;负数则相反,取标识符出现第count次之后的子串。

25.窗口函数

想要找到每个学校gpa最低的同学来做调研,请你取出每个学校的最低gpa。
select
device_id, university, gpa
from(
select device_id,university,gpa,
rank() over (partition by university order by gpa) rk
from user_profile  
) up
where up.rk=1

三、Linux基础

Linux文件系统和目录

测试开发路线

确定linux当中ssh的服务是否开通

netstat -anpt | grep ssh

-a‌(all)-n‌(numeric)-p‌(program)-t‌(tcp)

ls -lha /usr/bin #  查看/usr/bin文件夹里面的内容

测试开发路线

rm -i 表示交互式执行删除操作,删除前会有提示

rm -f 表示强制删除,忽略不存在的文件

rm -r 表示删除目录及目录下所以的内容

文件或目录的复制:cp

命令格式:cp 源文件 目标文件

查看系统进程

ps -aux | grep top

进程号

kill -9 进程号

查看系统监听端口

netstat -anptu | grep mysql

netstat -anptu | gerp 3306

设root:
sudo passwd root
su
进程占用:
sudo lsof -i :8000
杀死进程
sudo kill -9 1234 # 其中 1234 是进程 ID
查询文件
sudo find / -type d -name "examples"
查询根目录下(包括子目录),名以b的目录和文件。
find / -name 'b'
查询根目录下(包括子目录),名以b开头的目录和文件。
find / -name 'b'
显示路由和ip地址
ip route show
ping baidu.com 有延迟
sudo vim /etc/resolv.conf
nameserver 8.8.8.8
nameserver 8.8.4.4
ip addr show 显示或配置网络接口
ip link show
sudo dhclient + usb 端口 连外网
sudo ifdown enp2s0 重启网络
sudo ifup enp2s0
tmux 虚拟终端模拟
chmod 777 demo3 -R 读写权限
df -lh 看容量
du -h 看日志大小容量
touch .sh 创建脚本
rm -rf file 强制删除文件
mv oldfile newfile 重命名
mv test1 test/test0 把当前目录下的test1移动到test文件下重命名为test0
tar -cvf start.tar a.java b.java 将当前目录下的a.java、b.java打包
tar -zxvf start.tar.gz -C usr/loca 解压start.tar.gz压缩包,到/usr/local目录下
ps -ef | grep ssh 查找指定ssh服务进程
ps -ef 查看所有正在运行的进程
netstat - an | grep 8080 搜索指定端口
service network restart 重启网络

四、功能测试

环境

环境定义:项目运行所需要的所有的软件和硬件组合

环境(服务器)的组成:操作系统+数据库+web应用程序+项目代码

测试环境:专门提供给测试人员使用

开发环境:开发人员使用

生产环境:提供给用户

预生产环境:设置和数据是一样

1.熟悉公司项目流程

信息来源:

新项目:需求文档+产品经理

已经存在的项目: 文档(需求文档\使用说明书\测试用例) 人(测试老员工\产品经理\开发) 项目软件

熟悉的思路:用户 + 用户如何使用

熟悉标准:核心业务 + 核心功能模块

用户是谁?

用户怎么用?

哪个功能缺失会导致用户无法正常使用?

2.1 商城项目的核心业务:

下单业务(登录--搜索-----加入购物车-----下单-----支付)

发货业务(登录----确认订单----填单号)

售后业务(用户登录----发起申请---商家登录----商家确认申请----用户退货----商家确认收货---商家打款)

查询订单(用户登录----我的页面----我的订单)

2.2 商城项目的核心功能模块:

注册

登录

购物车

搜索

轮播图

评论

抢购

三、【重点】测试流程的应用

流程的作用:让测试工作有条不紊的开展.

3.1 需求评审

前提:提前阅读需求文档,记录疑惑点

目的:知道有什么功能,规则是什么,最终各部门理解一致.

3.2 计划编写

测什么

怎么测

谁来测

重点关注

准入标准:研发提测标准,什么时候可以开始测试

业务能跑通:P0

准出标准:什么时候结束测试

数据化:用例(100%) \缺陷(解决率:S0 100%,S1:100% S2\S3 :95%)3.3 设计用例

先设计业务用例,后设计功能模块用例

3.4 用例执行

按优先级(推荐)

前提:写用例的时候标注清楚优先级并且明确优先级的定义

P0:最高级别.

按顺序执行

3.5 缺陷管理

提交时间:用例执行失败的第一时间

注意事项:

唯一性

可复现(明确复现步骤\问题发生时间\日志截图)

注明版本号

3.6 测试报告

四、【掌握】商城项目测试(业务流程)

方法:流程图法

如何编写用例:找路径;从开始结束共有多少条路就有多少条用例.

4.1 发货业务(参考课堂用例)

  1. 需求分析
  2. 拆解测试点
  3. 编写用例

4.2 评论业务(参考课堂用例)

  1. 需求分析
  2. 拆解测试点
  3. 编写用例

4.3下单业务

  1. 需求分析
  2. 拆解测试点
  3. 编写用例

web项目抓包操作与测试报告

含义:客户端向服务器发送消息

组成:

请求行(请求方法 URL 协议/协议版本号)

url:

组成 URL(网址)=协议://主机地址(IP地址或域名):端口号/路径?参数名=参数值&参数名=参数值

http://hmshop-test.itheima.net/

http://hmshop-test.itheima.net/Home/Goods/search/q/%E6%89%8B%E6%9C%BA.html

http://hmshop-test.itheima.net/Home/Goods/search.html?q=%E6%89%8B%E6%9C%BA

面试题:介绍一下http和https的区别

共同点:都是协议,都可以用来传输数据

不同点:

http不加密,不安全;https加密协议(公网使用).

http端口号是80,https端口号是443

面试题:请求方法(get和post的区别)

相同点:都可以向服务器发起请求,并且携带参数

get:参数放在浏览器的地址栏,可以看到不安全.参数长度有限制(浏览器的地址栏有长度限制),没有请求体

post:参数放在请求体,需要抓包才可以看到.参数长度无限制

请求头

键值对的形式展示

客户端的属性信息

请求体(请求参数)

name=value

如果有多个参数,用&连接

1.2 响应

含义:服务器向客户端返回数据的过程

组成

响应行:协议/协议版本号 响应状态码 状态描述

(面试题)响应状态码:

2XX : 成功

3XX : 重定向

4XX : 客户端错误

5XX : 服务器错误

响应头: 服务器的属性信息

响应体: 服务器返回的结果(图片\HTML\JSON\txt等等)

JSON:{'name1':'value1'}

fiddler抓包工具的使用

测试开发路线

删除数据:

方式一:点击Remove all

方式二: 黑窗口输入cls,回车

查看数据包内容

方式:选中数据包或者双击----点击Inspecters---请求内容点击Raw----响应内容点击Raw(行\头\体

弱网测试:

常见问题:上传文件时进度卡住不动

登录不上或者登录后立即掉线

响应过程中页面控件可点击,导致崩溃

搜索不响应,多次点击后结果显示总在刷新被替换

第一步:Rules----Customize Rules----Ctrl+F调起搜索-----Find what 输入300

开启网络延迟: Rules---Performance---Simulate Modem Speeds

设置断点(请求之前)

设置断点(响应之后)

五、接口测试

测试开发路线

完整语法格式:协议 :// IP地址:端⼝号/资源路径?查询参数 

测试开发路线

HTTP响应

状态行:1xx、2xx、3xx

响应头:k:v对

响应体

接口规范

传统⻛格接⼝

接⼝统⼀采⽤ get/post 实现 所有操作。

URL 与 资源不是 ⼀⼀对应的。在 URL 中查看出,是何种操作

状态码统⼀ 返回 200

RESTful⻛格接⼝

接⼝使⽤的⽅法,与 http协议的 请求⽅法,⼀⼀对应。

get - 查、post - 增、put - 改、delete - 删

URL 与 资源 ⼀⼀对应!不能从 URL 中,看出 是 何种操作。 需要通过 结合 请求⽅法 来识别何种操作。

响应状态码 使⽤较为全⾯。

接⼝测试流程

1.需求分析(产品经理的需求⽂档)

  1. 接⼝⽂档解析(开发编写的 接⼝API⽂档)
  2. 设计 接⼝测试⽤例(编写 Excel 表格形式的⽤例)
  3. 准备接⼝测试脚本
    • postman ⼯具 ⽣成脚本
    • python 代码 编写脚本
  1. 执⾏测试⽤例,跟踪缺陷
  2. ⽣成 接⼝测试报告
  3. 接⼝⾃动化持续集成(可选)

系统路径+url

测试开发路线

测试用例

注:模板一般公司会有提供,或者直接网上下一个,非固定

登录

测试开发路线

业务场景测试⽤例

分析测试点

指导思想:模拟⽤户实际使⽤,⽤较少的测试⽤例,覆盖更多接⼝,测试正向即可。

登录 - 添加员⼯ - 查询员⼯ - 修改员⼯ - 删除员⼯ - 查询员⼯列表

测试开发路线

Potman 断言

  • 让 Postman工具 代替 人工 自动判断 预期结果 和 实际结果 是否一致
  • 断言代码 书写在 Tests 标签页中。 查看断言结果 Test Results 标签页

// 断言响应状态码为 200

pm.test("Status code is 200", function () {

pm.response.to.have.status(200);

});

注:新版本tests在Scripts里。

pm:postman的实例。

test() postman实例的测试方法。 这个方法 有 2 个参数。

参1:"Status code is 200"。 这个参数可以任意修改,不影响 断言。

作用:在断言结束后,显示给用户,断言结果的提示文字。

参2:是一个 匿名函数 调用。

pm.response.to.have.status(200); 的意思是:

postman的响应结果中,应该有 响应状态码 200。 ———— 这里的 200 是 预期结果。

测试开发路线

例1

使用 postman 关联技术,实现 添加员工 接口。

登录成功,返回的 “令牌” 被 添加员工 接口依赖。

思路:

  1. 发送登录请求(必须登录成功),获取响应结果
  2. 从 json 响应结果中,提取 data 值。拼接上 “Bearer ” 前缀。

注意:Bearer单词不能拼错,首字母必须大写,只有一个空格

  1. 将拼接无误的 令牌,存入 环境变量。 从 “眼睛” 图标查看。
  2. 添加员工 接口,从 环境变量 中,提取 令牌。设置到请求头中,作为 Authorization 的 值。
  3. 填写 添加员工 接口 其他信息(post、URL、请求体),发送请求。

测试开发路线

测试开发路线

测试开发路线

问题1:常⻅的请求⽅式?GET和POST请求的区别?

作⽤不同:GET⽤于从服务端获取资源,POST⼀般⽤来向服务器端提交数据 参数传递⽅式不同:GET请求的参数⼀般写在URL中,且只接受ASCII字符;POST请求参数⼀般放在请求体中,对于数据类型也没有限制安全性不同:因为参数传递⽅式的不同,所以两者安全性不同,GET请求的参数直接暴露在URL中,所以更不安全,不能⽤来传递敏感信息。 参数⻓度限制不同:GET传送的数据量较⼩,不能⼤于2KB;POST传送的数据量较⼤,⼀般被默认为不受限制。 HTTP 协议没有 Body 和 URL 的⻓度限制,对 URL 限制的⼤多是浏览器和服务器的原因。 编码⽅式不同:GET 请求只能进⾏ URL 编码(application/x-www-form-urlencoded);POST ⽀持多种编码⽅式(application/x-www-form-urlencoded 或 multipart/form-data。为⼆进制数据使⽤多种编码。)

登录接口

需求文档

测试开发路线

测试开发路线

测试开发路线

注意:

适用场景:键名或字符串值中的双引号

1.错误示例:

{"platformOrderId":"MB20250429095604",
"displayOrderId":"111",
"itemList":[{"mskuId":1,"quantity":1}],
"shippingSpeedCategory":"Standard",
"updateToShipped":"1",
"fbaShopId":"12"
}

这里 itemList 是一个 数组类型,元素是对象。

这个写法在标准 JSON 中完全没问题。但——如果你的接口文档明确要求 itemList 是字符串类型(即 JSON 数组以字符串形式出现),那这样写就会报错。

2.修正后:

{"platformOrderId":"MB20250429095604",
"displayOrderId":"111",
"itemList":"[{\"mskuId\":1,\"quantity\":1}]",
"shippingSpeedCategory":"Standard",
"updateToShipped":"1",
"fbaShopId":"12"
}

这里 itemList 是一个 字符串,字符串的内容是一个 JSON 格式的数组(你把数组整个变成了字符串)。这在一些接口中是必须的格式,尤其是:

  • 接口对 itemList 的期望是 string 类型;

  • 后端再把它 JSON.parse() 成数组来处理;

  • 通常见于一些较老系统或者对接外部平台时的特殊要求。

注:跟间隔也有关系,注意书写格式

附校验工具:在线JSON校验格式化工具(Be JSON)

六、性能测试

 

测试开发路线

1.性能概念

1.1什么是性能?

时间:系统处理用户请求的响应时间

资源:系统运行过程中,系统资源的消耗情况

1.2什么是性能测试?

使用自动化工具,模拟不同的场景,对软件各项性能指标进行测试和评估的过程。

1.3什么是性能测试的目的?

评估当前系统能力

寻找性能瓶颈,优化性能

评估软件是否能够满足未来的需要

2.性能测试分类

2.1基准测试

单用户测试,为系统/环境配置、系统优化前后的性能提升/下降提供参考指标

2.2负载测试

通过逐步增加系统负载,确定在满足系统的性能指标(如响应时间等)情况下,找出系统所能够承受的最大负载量的测试。系统最大负载量达到用户要求时,系统才能正式上线使用。

2.3稳定性测试

系统在用户要求的业务负载下运行达到规定的时间时,系统才能正式上线使用。

2.4压力测试

在强负载下的测试,查看系统在峰值情况下是否功能隐患、系统是否具有良好的容错能力和可恢复能力。

2.5并发测试

指在极短的时间内,发送多个请求,来验证服务器对并发的处理能力,如特定活动场景:抢红包、秒杀、抢购等。

指标:

测试开发路线

测试开发路线

 

测试开发路线

测试开发路线

 

测试开发路线

测试开发路线

测试开发路线

3.Jmeter使用

测试开发路线

测试开发路线

元件的作用域:是靠测试计划的树形结构中元件的父子关系来确定的。

压力测试,测试多用户并发请求。

测试开发路线

测试开发路线

测试开发路线

测试开发路线

要准备.csv数据文件

测试开发路线

测试开发路线

测试开发路线

Tips:

1.在jmeter的聚合报告内文件需要创建一个result.jtl文件,然后执行,执行脚本会有一个弹框弹出、点击Overwrite existing file。

2.执行完毕后使用 jmeter -g 文件路径 -o  输入报告的地址:jmeter -g logs/result.jtl -o reports/my_report

3.打开index.html,解决

英文报告改中文:

下载汉化版模版,替换已安装的jmeter安装包下的report-template

七、自动化测试

1.介绍

自动化测试是软件开发和维护中非常重要的一部分,主要目的是提高软件质量、开发效率和测试覆盖率。

提高测试效率、提升测试准确性、支持持续集成/持续交付(CI/CD)、节省长期成本、增强回归测试能力、提高测试覆盖率、提升团队协作效率。

越高级的技术,越需要动脑子

  • IT--不是一个靠体力的工作
  • 体力活越少,反倒你的工资越高

工具

selenium 浏览器自动化操作框架

pytest 测试用例执行和管理框架

allure-pytest 生成漂亮的Allure测试报告

selenium

提供了丰富的元素操作方法。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time

# 1. 启动Chrome浏览器
driver = webdriver.Chrome()  # 如果驱动不在PATH,需要写路径,如 webdriver.Chrome(executable_path='/path/to/chromedriver')

# 2. 打开网页
driver.get('https://www.baidu.com')

# 3. 找到输入框,输入关键词
search_box = driver.find_element(By.ID, 'kw')
search_box.send_keys('自动化测试')

# 4. 模拟按回车键
search_box.send_keys(Keys.RETURN)

# 等待3秒,确保页面加载完成
time.sleep(3)

# 5. 关闭浏览器
driver.quit()

pytest-allure插件

安装 pip install allure-pytest

验证 pytest--alluredir=report

生成并查看allure报告:allure serve report

开始学习:

2.基础理论

UI:User Interface(⽤户接⼝-⽤户界⾯),主要包括:app、web

ui⾃动化测试:使⽤⼯具或代码执⾏⽤例的过程

什么样的项⽬适合做⾃动化:

  • 1、需要回归测试项⽬(甲⽅⾃营项⽬、⾦融、电商)
  • 2、需求变动不频繁:稳定的模块
  • 3、项⽬周期⻓的项⽬:(甲⽅⾃营项⽬、6个⽉以上的外包)

⾃动化测试⽬的:提⾼测试效率

环境搭建

pthon解释器+pycharm+selenium+浏览器+浏览器驱动

pip install selenium

元素定位

id定位

  • ⽅法: driver.find_element_by_id("id值")
  • 前置: 标签必须有id属性
  • 输⼊⽅法: 元素.send_keys("内容")

name定位

  • ⽅法: driver.find_element_by_name("name属性值")
  • 前置: 标签必须name属性
  • 特点: 当前⻚⾯可以重复
  • 提示: 由于name属性值可以重复,所以使⽤时需要查看是否为唯⼀。

class定位

  • ⽅法: driver.find_element_by_class_name("class属性值")
  • 前置: 标签必须有class属性
  • 特点: class属性值可以有多个值

tag_name定位

  • 说明:根据的标签名进⾏定位
  • ⽅法: driver.find_elemet_by_tag_name("标签名")
  • 提示: 如果⻚⾯存在多个相同标签,默认返回第⼀个。

ink_text定位

  • 说明: 根据链接⽂本(a标签)定位
  • ⽅法: driver.find_element_by_link_text("链接⽂本")
  • 特点: 传⼊的链接⽂本,必须全部匹配,不能模糊

partial_link_text定位

  • 说明: 根据链接⽂本(a标签)定位
  • ⽅法: driver.find_element_by_partial_link_text("链接⽂本")
  • 特点: 传⼊的链接⽂本,⽀持模糊匹配(传⼊局部⽂字)

扩展-查找⼀组元素

  • 说明:返回列表格式,要使⽤需要添加下标或遍历。
  • ⽅法: driver.find_elements_by_xxxx(),
  • 提示: ⼋⼤元素定位⽅法,都可以使⽤⼀组元素定位,如果没有搜索到符合标签,返回空列表。

元素定位(xpathcss

⽅便在⼯作⽤中查找元素,使⽤xpath和css⽐较⽅便(⽀持任意属性、层级)来找元素

xpath是xml path简称,使⽤标签路径来定位。

如百度

driver.find_element_by_xpaht("表达式")

如百度'//*[@id="kw"]'

测试开发路线

案例:

测试开发路线

css选择器

测试开发路线

3、PO模式

Page Object 模式是将页面元素和操作封装为类,使测试代码更清晰、易维护。

Base层、Page层、Script层

base: 封装每个页面中相同的属性和方法 比如:元素定位、输入、点击

pageobject:每个页面定义一个类,类中包含元素及操作元素的方法

testcase:包含业务及测试数据

流程大概是

case_script/test_login.py

business/login_business.py

page/login_page.py

base/base_page.py

浏览器页面

  • run.py 启动自动化测试

  • 用例在 case_script/ 中调用 business/

  • business/ 调用 page/ 的操作方法

  • 页面方法继承自 base/

  • 运行中生成日志和报告(logs/case_report/

使用markers标记测试用例

在 pytest 中,markers 是一种非常有用的功能,它可以对测试用例进行标记,以便实现更灵活的测试执行和分组等操作。

测试开发路线

pytest中添加Fixture(测试夹具)

在介绍装饰器格式的Fixture前,先介绍conftest。
Conftest它是pytest的一个组件,用于配置测试环境和参数。
因此,conftest.py 文件是存放测试夹具(Fixtures)的理想场所。
测试夹具就像是测试用例执行时的得力助手,能够为测试提供各种必要的资源,如数据、对象、环境等。
通过在 conftest.py 中定义测试夹具,我们可以在多个测试模块中轻松地共享和复用这些资源,避免了在每个测试文件中重复编写相同

  • 运行测试之前,pytest会自动识别并执行conftest.py文件中的配置。
    运行测试之前,pytest 会默认读取 conftest.py里面的所有 fixture
    conftest.py 文件名称是固定的,不能改动
    conftest.py 只对同一个 package 下的所有测试用例生效
    不同目录可以有自己的 conftest.py,一个项目中可以有多个 conftest.py
    测试用例文件中不需要手动 import conftest.py,pytest 会自动查找

pytest中的fixtrue装饰器

我们可以在conftest.py中,或者是测试模块中定义fixtrue装饰器。

八、AI如何赋能软件测试?

测试开发路线

案例1 登录需求

1、账号密码登录

  • 系统验证账号和密码的正确性
  • 验证通过,用户登录成功,进入个人中心;验证失败,提示错误信息并允许用户重新输入。

2、短信验证码登录

  • 用户输入手机号,点击获取验证码,系统向用户手机发送验证码
  • 用户输入验证码,点击登录,系统验证验证码的正确性。
  • 验证通过,用户登录成功,进入个人中心;验证失败,提示错误信息并允许用户重新输入。

3、第三方授权登录

  • 用户点击第三方按钮(如微信、QQ、支付宝),系统跳转至第三方授权页面,用户进行授权操作。
  • 第三方返回授权信息至系统,系统验证授权信息的有效性,创建或绑定用户账号。
  • 验证通过,用户登录成功,进入个人中心。

给AI的提示词为:

角色:你是一名测试工程师

指示:需要针对以下需求,设计测试用例

{xx需求}

输入:功能测试、兼容性测试、SQL注入

输出:使用Excel表格形式输出,并且格式参考用例设计八大要素,并且转换成typora能识别的格式

AI的回答:

用例编号 模块 测试项 优先级 前置条件 测试步骤 预期结果 实际结果 备注
FUNC-001 账号密码 正确登录 1.系统运行正常 2.测试账号:test/123456 1.输入用户名"test" 2.输入密码"123456" 3.点击登录 1.跳转个人中心 2.显示欢迎语
FUNC-002 账号密码 错误密码 1.系统运行正常 2.测试账号:test/123456 1.输入用户名"test" 2.输入错误密码"111111" 3.点击登录 1.提示"用户名或密码错误" 2.密码框清空
FUNC-003 账号密码 SQL注入 1.系统运行正常 1.用户名字段输入:' OR 1=1-- 2.任意密码登录 1.拦截请求 2.提示"非法输入"
FUNC-004 短信验证 完整流程 1.手机号13800138000已注册 1.输入手机号 2.点击获取验证码 3.输入正确验证码 4.点击登录 1.收到6位短信 2.跳转个人中心
FUNC-005 短信验证 错误验证码 1.已获取有效验证码 1.输入错误验证码 2.点击登录 1.提示"验证码错误" 2.允许重试
FUNC-006 第三方 首次授权 1.网络畅通 2.未绑定账号 1.点击微信图标 2.完成授权 1.跳转授权页 2.创建账号并登录
COMP-001 兼容性 多浏览器 1.Chrome/Firefox/Safari 1.各浏览器执行FUNC-001 功能正常,UI无错位
COMP-002 兼容性 移动端 1.iOS/Android设备 1.移动端执行FUNC-004 键盘适配,显示正常

根据程序的源代码可见程度划分:

黑盒测试:源代码不可见,UI功能可见,关注数据输入结果输出

灰盒测试:部分源代码可见,UI功能不可见,关注输入输出、数据访问通道

白盒测试:全部源代码可见,UI功能不可见,关注代码本身语法逻辑。

测试开发路线

测试开发路线 测试开发路线

测试开发路线

测试开发路线 测试开发路线

公司内主要是功能、性能、兼容、易用、安全测试。

1、客户端Web测试

案例:

需求分析

需求:

  • 1.账号:必填,已经注册手机号或邮箱
  • 2.密码:必填,注册账号的密码
  • 3.验证码:正确且为过期

等价类划分法

测试开发路线

测试开发路线

练习1用xmind表示:

测试开发路线

 

测试开发路线

测试开发路线

练习2用xmind表示:

测试开发路线

边界值分析法

测试开发路线测试开发路线

 

测试开发路线

测试开发路线

练习

测试开发路线

测试开发路线测试开发路线

非功能测试设计

非功能:除了软件功能测试,其他都是非功能测试。

  1. 兼容
  2. 易用
  3. 性能(专项)
  4. 安全(专项)

Web浏览器

兼容:Chrome浏览器、Edge浏览器、Firefox浏览器、Safari苹果浏览器

易用:参考竞品,主观感受为主。

测试开发路线

测试用例介绍

测试开发路线

测试用例编写

测试开发路线

测试开发路线

判定表

测试开发路线

测试开发路线

测试开发路线

练习:

测试开发路线

执行用例

测试开发路线

测试开发路线

缺陷管理

软件中存在的任何问题,也叫缺陷(bug)。

测试开发路线

业务测试

测试开发路线

测试开发路线

编写用例:

测试开发路线

练习:

测试开发路线

编写测试用例

测试开发路线

2、项目实战

测试开发路线 测试开发路线 测试开发路线 测试开发路线 测试开发路线

步骤:

1、熟悉需求

2、确认下单流程

购车下单流程:选择商品->加入购物车->登录成功->提交订单成功->支付成功

3、确认流程图

工具:https://www.processon.com/

测试开发路线

4、编写测试用例

测试开发路线

练习:

测试开发路线

测试开发路线

测试开发路线 测试开发路线

上传bug:

测试开发路线

 

测试开发路线

单模块测试

功能模块

下单业务线中核心单功能

  • 登录
  • 购物车功能
  • 下单功能
  • 支付功能

单功能测试步骤:

① 熟悉需求

② 提取测试点覆盖需求

③ 测试点转执行测试用例

④ 缺陷管理

熟悉需求

  1. 需求从哪来?

l 需求文档

l 产品原型图

l 已存在的软件界面(不一定有)

  1. 怎么熟悉需求?

l 阅读并理解文档描述

l 操作或梳理业务规则及流程

1.登录功能

 

测试开发路线

测试开发路线

因太多,只举例三条

测试开发路线

编写用例:

测试开发路线

购物车功能

测试开发路线

测试开发路线

 

测试开发路线

编写测试用例:

选了四条

测试开发路线

支付

Web项目非功能测试

质量模型:功能性、兼容性、易用性、性能、安全、迁移性、维护性、可靠性

重点测试:功能性、兼容性、易用性、性能、安全

独立测试:安全、性能

测试目标:

兼容性:谷歌、火狐、Edge、苹果

易用性:主要参考依据产品原型设计或优秀竞品设计

九、测试报告+编写规范

1.什么是软件测试报告?

包含过程?结果,问题和改进内容的总结文档。

2.为什么编写测试报告?

汇报、评估、反思。

3.谁来编写测试报告?

测试负责人在测试结束时,参照模版进行编写。

4.软件测试的编写

核心内容、编写步骤。

1> 制作模版

测试开发路线

2>收集资料

测试开发路线

3>编写报告

测试开发路线

4>表格优化

测试开发路线

 

- THE END -
最后修改:2026年6月4日
0

非特殊说明,本博所有文章均为博主原创。

共有 0 条评论