1.产品确定需求后,邀请项目经理,开发,测试等人员参加需求评审会;
2.评审结束后开发根据需求文档和接口文档开发,测试制定测试计划和编写手工测试用例,测试脑图;
3.测试召开用例评审,等开发完成后并且进入联调时,可以先介入进行单接口的测试,等开发转测后,进行系统之间的业务测试;
4.执行测试用例,在禅道上提出bug并且跟踪bug,开发解决后回归测试。用例执行完成并且bug全部修改完成后,进行提交上线
测试标题,测试范围,测试计划开始时间和结束时间,测试实际开始时间和结束时间,开发人员,测试人员,测试环境,是否存在风险等
所属模块,前置条件,用例标题,用例等级,测试步骤,预期结果等
测试背景,测试标题,测试实际开始时间和结束时间,开发人员,测试人员,测试环境,测试结论,bug统计,待办事项等
以借款申请接口为例:
1.先理解所测接口的业务逻辑,参数和响应的含义。
2.根据接口的业务返回设计测试用例,比如借款成功,失败,处理中等线上常见的场景
3.根据接口请求参数的长度限制设计测试用例(边界值),比如用户的身份证,手机号的长度
4.根据接口请求参数的格式限制设计测试用例(等价类:有效等级类和无效等级类),比如用户手机号以1开头并且都是数字,这是有效等价类。非数字以外的格式为无效等价类
5.根据接口请求参数的是否非必传设计测试用例,逐个去验证必传参数不传的情况
6.若存在请求参数的组合场景,比如证件形式:1身份证2其他证件。接口传1,但是不传身份证号码的场景
7.接口和接口之间的业务关联,比如未调用授信申请,直接调用借款申请等情况
8.对数据库记录和重要字段的校验
等价类(有效等价类和无效等价类),边界值,因果图,场景法,错误推断(结合实际情况,有针对的推断问题会发生在哪)
1.首先理解产品需求和接口文档。可以先编写测试脑图帮助理清逻辑
2.召开测试用例评审,和开发产品讨论测试用例是否有遗漏的地方
3.根据测试用例去测试,每测试完一条修改测试用例状态,不要想一点测一点
4.可以多考虑线上出现过的问题,着重去测试该部分模块
前后端分离项目,可以抓包或者f12进行分析接口的请求和响应。
如果接口请求有问题,则为前端的bug;如果请求没有问题,响应有问题,则为后端的bug;如果请求和响应都没有问题,但是页面展示有问题,则为前端的bug
http是超文本传输协议,信息是明文传输的,端口号为80
https是更具安全性的加密传输协议,端口号为443
1xx(正在请求)
2xx(请求成功):200
3xx(重定向)
4xx(请求出错):401(没有权限),403(服务器拒绝请求),404(请求网址不存在),405(请求方式错误)
5xx(服务器错误):500(服务器内部错误),503(服务不可用)
三次握手:
1.客户端发生请求到服务端
2.服务端返回已收到响应到服务端
3.客户端再发送请求到服务端,数据开始进行传输
四次挥手:
1.客户端发送关闭数据传输请求到服务端
2.服务端收到请求并且返回客户端,关闭传输等待状态
3.服务端发送关闭数据传输,请求客户端
4.客户端再发送确认关闭请求到服务端
相同点:都是用于接口鉴权
不同点:token是登录接口返回的,后续接口请求头需要带上token才能请求
cookie是储存在客户端的,请求服务器需要带上session-id,不安全
session是储存在服务端的,相对安全,但是访问量大的时候会占用服务端的内存
app测试是基于客户端,如果服务端更新后,客户端不会随着更新。需要用户手动去更新客户端;
web测试是基于浏览器,如果服务端更新,文本页面会随着更新;
兼容性不同:app测试需要测试不同型号,不同操作系统的手机,web需要测试不同的浏览器;
相对于web测试,app多了很多专项测试,比如弱网,来电,来短信,关机等状态下
b/s:浏览器和服务器之间的架构,是http协议传输
c/s:客户端和服务器之间的架构,是tcp/ip协议传输
兼容性测试不同,c/s要考虑安装,卸载,更新的测试
通过软件质量模型中8个特性去测试:
1.功能性:测试网站功能是否正常,是否符合产品需求
2.易用性:是否容易被访问,操作错误时是否有相关的提示语,是否有错误防御功能
3.兼容性:在不同的浏览器上运行
4.可靠性:服务器中断后,是否能够保存并且恢复用户数据和重建系统
5 .信息安全性:用户没有权限的情况下,是否获取数据和篡改数据
6.维护性:页面可以根据产品需求,有效率的维护和迭代
7.可移植性:页面是否可以适合不同的环境和硬件
8.性能效率:接口响应的时间,页面反应的速度
1.可以先确认服务器是否启动成功,各服务的配置是否添加成功
2.可以通过服务器的access和extre,error日志来确定
3.查看数据库的前置数据是否正确
1.单元测试:开发完成联调阶段,测试可以先进行单接口的测试
2.系统测试:转测后,根据测试用例,测试多接口之间业务系统和产品需求
3.回归测试:开发改完bug后进行回归验证
4.交叉测试:负责的模块测试完成后,可以和其他测试交叉测试对方的模块
5.验收测试:产品或者运营验收产品
get,post,put,delete,head等
get是获取数据,请求参数是放在url后面的,不安全
post是提交数据,请求参数是放在body里的,相对安全
application/json;application/xml;text/html;from表单等
首先评估bug的严重性,如果是一般的bug,可以先记录下等下一个版本修改上线;
如果是严重的bug需要紧急修复上线,编写好对应的测试用例,再测试环境复现该bug(如果不能复现可以从线上日志找原因),等开发解决完之后,再回归测试上线。之后总结教训,分析原因
1.首先检查服务器是否启动,可以ping一下接口地址,还有端口号是否正确
2.检查防火墙是否关闭
3.浏览器是否设置了网络代理
4.检查接口的四要素:请求地址,请求头,请求参数,请求方式
5.接口会返回状态码,可以根据状态码定位
ipconfig(window系统)/ifconfig(linux系统):查看ip地址
ls:查看当前目录下的文件
ls-l(ll):查询当前目录下文件的详细信息
pwd:当前路径
cd 路径:前进到该路径下
find 路径 -name "文件名":查询该路径下文件
grep "查询的内容" 文件名:查询文件里面的内容
grep "查询的内容" 文件名|wc -l:统计查询的内容出现的次数
cat 文件名:查看文件内容
more 文件名:翻页查询文件内容
less 文件名:上下键显示文件内容
head -n 5: 查询文件前5行内容
tail -f :实时查询文件内容
tail -100f:查询文件后100行
mkdir:创建文件夹
mkdir -p:创建多级文件夹
touch:创建文件
top:监测进程(查询cpu使用率,内存使用率)
ps -ef:查询进程
df -h:查询磁盘内存
netstat -an| grep 端口号:查询端口是否被占用
chmod g+r 文件名:给所属组添加读的权限
u:所属人 g:所属组别 o:其他组别
4:可读 2:可写 1:可执行
netstat -an|grep 端口号
ps -ef|grep 进程
kill -9 pid
/bin:系统启动和运行时需要使用的基本二进制文件
/var:系统在运行过程中所产生的数据,日志路径/var/log
/usr:包含了系统中许多用户程序和库文件
/etc:包含了系统配置文件
左链接:左边表的全部数据加上右边表和左边表相匹配的数据
右链接:右边表的全部数据加上左边表和右边表相匹配的数据
delete是删除数据,不能改变索引和约束,可以回滚
drop是删除表的结构和数据,释放空间,不能回滚
turncate是清空表的数据,执行较快,不删除结构,不能回滚
1.用的地方不同:
where可以跟在select,update,insert,delete后面使用
having只能在select后面使用;
2.执行顺序不同:
where是在分组之前执行的,having是在分组之后执行的;如果一起使用的话,where会先执行,having会后执行
3.筛选条件不同:
where后面不能跟聚合函数,having可以
min()最小值,max()最大值,count()总数,avg()平均值,sum()总和等
索引可以提高查询数据的速度,避免全表扫描,提供查询性能
alter table 表名 add index 索引名称
我以我上一家公司项目为例:主要是和移动合作的信用购机的项目,线下用户从移动侧app上办理信用购机的活动,app会将授信和借款等流程通过接口的形式请求到公司的进件系统,系统审核之后返回告知用户审核结果,后续还会配合处理放款,用户的还款等操作。我主要负责的是授信和借款模块的测试。
1.线上正常的业务场景:授信成功,授信失败,授信处理中
2.校验接口申请的参数是否必传
3.校验接口申请的参数格式限制和字段长度
4.未上传必须校验的个人信息文件,比如身份证正反面图片
5.和其他接口进行业务关联的测试。比如各种状态下取消订单,未进行授信申请先进行授信查询等
6.调完不同的接口后,还有校验数据库的信息和重要的字段
1.线上正常的业务场景:借款成功,借款失败,借款处理中
2.校验接口申请的参数是否必传
3.校验接口申请的参数格式限制和字段长度
4.传数据库里未配置的套餐或者未授信的手机号
5.和其他接口进行业务关联的测试。比如各种状态下取消订单,未进行授信直接借款等
6.调完不同的接口后,还有校验数据库的信息和重要的字段
授信和借款模块大概写了200多条测试用例,提了30多个bug
问题:项目迭代速度太快,不能保证上线质量;
解决方法:保证一级用例全部通过;引进自动化测试加快测试效率;对修改点重点测试
问题:开发后的效果和产品需求不符合,产品变更需求未通知测试
解决方法:产品变更需求要在群里通知,并且更新文档上传svn
两个系统之间是独立的,相互无法访问到对方的信息和数据,需要一种途径去访问对方。接口就是双方共享信息和数据的途径。
1.前端未转测或者在后段联调阶段,测试可以先介入进行单接口的测试,提前进入测试节省时间
2.有些项目没有页面,只能进行接口测试
3.有些测试场景,页面测试无法实现,只能通过接口测试(比如登录输入框不能输入某个格式,但是接口可以)
1.使用postman测试单接口
2.使用jmeter测试多接口,接口和业务的关联
3.搭建python+requests+pytest+allure测试框架进行一级用例测试
1.基于token,客户端请求服务端返回token,后续的客户端请求服务端,请求头上会带上token
2.session鉴权,通过cookie传递session-id请求服务器,判断是否是一个客户端
3.和其他公司合作项目,服务商会提供密钥(比如:aes对称加密),会将接口请求加密。测试可以模拟对方加密请求。
jmeter:可以使用json提取器或者正则表达式提取器,提取上一个接口返回中的字段值,用于下一个接口的请求参数
python:新建一个yaml文件,执行第一个接口之前清空该文件,将要提取的字段值存入yaml文件中,下一个接口去取
一般是在测试用例函数上添加@pytest.mark.parametrize装饰。
@pytest.mark.parametrize("变量名", [{用例1}, {用例2}, {用例3}]),它会循环用例1,2,3赋值给变量。[]里面的用例可以从yaml文件里获取。
从小到大:
@pytest.fixture(scope="function"),方法级别。将被修饰的函数当作形参传递给某个方法,执行该方法之前会执行一个被修饰的函数
@pytest.fixture(scope="class"),类级别。将被修饰的函数当作形参传递给类里的某个方法,执行该类之前会执行一个被修饰的函数(传入类中多个方法,也只会执行一次)
@pytest.fixture(scope="module"),文件级别。执行文件之前,会执行一次该修饰的函数
@pytest.fixture(scope="session"),多个文件级别。
使用json传参,不管请求参数的类型是str还是dict,如果不指定类型,默认的content-type都是application/json;
使用data传参,请求参数的类型是str,如果不指定类型,默认的content-type都是application/json;如果请求参数的类型是dict,如果不指定类型,默认的content-type都是application/x-www-form-urlencoded
接口自动化框架是使用python的requests库+pytest+allure,
common文件夹:封装了一些常用的工具类,比如数据库操作(pymysql),生成随机数据(faker),获取配置文件(configparser),获取yaml文件(yaml)等
config文件夹:config.ini配置文件,里面写入环境地址,数据库链接信息等
test-data文件夹:测试数据yaml文件
test-case文件夹:测试用例
report文件夹:allure生成的测试报告
conftest.py: 存放被fixture修饰的方法,用于前置步骤
run.py:运行文件
id,name,class_name,tag,css,xpath,link_text
/绝对路径
//相对路径
*通配符,匹配所有标签
比如定位一个id=a的元素,使用xpath定位://*[@id="a"]
强制等待:time.sleep()
隐式等待:driver.implicitly_wait(2)
设置一个最长等待时间2s,如果该页面都加载完成后,进行下一步,否则将等待到时间结束
显式等待:WebDriverWait(driver, 5, 0.5).until(EC.element_to_be_clickable((By.ID, "su")))
5为最大等待时间,0.5为每隔0.5查询一次
1.元素未加载出来;解决方法:添加等待时间,最好使用显式等待
2.元素在iframe嵌套中;解决方法:需要先切换到iframe中,再进行定位
3.动态元素;解决方法:可以使用xpath从父类向下定位
4.隐藏元素;解决方法:操作js去定位
第一种方法:try.. except..
try如果定位到该元素,返回true,except报错则返回false
第二种方法:显式等待WebDriverWait配合expected_conditions使用
WebDriverWait(driver,5, 0.5).until(expected_conditions.presence_of_element_located())
1.尽量使用相对路径的xpth定位元素
2.使用显式等待
3.测试结束后,要做数据恢复
4.用例之间不要产生依赖,要独立运行
可以使用xpath的方法://*[@class=""]/..
/..可以返回上一级
定位iframe嵌套里的元素:driver.switch_to.frame(driver.find_element())使用该方法进入嵌套页面后再定位,定位完之后记得退出driver.switch_to.default_content()
定位多窗口元素:先获取具柄driver_main.window_handles,一个窗口对应一个具柄,通过列表下表定位某个窗口的具柄,driver_main.window_handles[-1]最新的具柄。再切换到该窗口driver.switch_to.window(driver.window_handles[-1])
定位下拉框元素:可以使用Select方法。Select(driver.find_element()).select_by_index(1)
1.在测试计划下新建线程组,在线程组下取样器里新建http请求
2.在测试计划下配置元件新建http请求默认值和http信息头管理
3.在http请求默认值里设置协议,ip地址,端口号;在http信息头管理添加请求头
4.在http请求里添加路径和请求方式。如果是post请求,添加消息体数据
5.添加查看结果树,点击启动