赞
踩
1.产品确定需求后,邀请项目经理,开发,测试等人员参加需求评审会;
2.评审结束后开发根据需求文档和接口文档开发,测试制定测试计划和编写手工测试用例,测试脑图;
3.测试召开用例评审,等开发完成后并且进入联调时,可以先介入进行单接口的测试,等开发转测后,进行系统之间的业务测试;
4.执行测试用例,在禅道上提出bug并且跟踪bug,开发解决后回归测试。用例执行完成并且bug全部修改完成后,进行提交上线
测试标题,测试范围,测试计划开始时间和结束时间,测试实际开始时间和结束时间,开发人员,测试人员,测试环境,是否存在风险等
所属模块,前置条件,用例标题,用例等级,测试步骤,预期结果等
测试背景,测试标题,测试实际开始时间和结束时间,开发人员,测试人员,测试环境,测试结论,bug统计,待办事项等
以借款申请接口为例:
先理解所测接口的业务逻辑,参数和响应的含义。
1.根据通过性编写:
-根据文档上的参数,正常传递,是否能返回正确的结果
-根据接口请求参数的是否非必传设计测试用例,逐个去验证必传参数不传的情况
-根据接口请求参数的长度限制设计测试用例(边界值),比如用户的身份证,手机号的长度
-根据接口请求参数的格式限制设计测试用例(等价类:有效等级类和无效等级类),比如用户手机号以1开头并且都是数字,这是有效等价类。非数字以外的格式为无效等价类
-若存在请求参数的组合场景,比如证件形式:1身份证2其他证件。接口传1,但是不传身份证号码的场景
2.根据业务逻辑编写:
-根据接口的业务返回设计测试用例,比如借款成功,失败,处理中等线上常见的场景
-接口和接口之间的业务关联,比如未调用授信申请,直接调用借款申请等情况
3,根据接口的性能和安全:
-模拟大量用户同时请求该接口的场景
-需要加密的接口,不加密请求直接请求的场景
还有要加上对数据库记录和重要字段的校验
等价类(有效等价类和无效等价类),边界值,因果图,场景法,错误推断(结合实际情况,有针对的推断问题会发生在哪)
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和cookie是存储再客户端的,session是存储在服务器上的;
token是登录接口返回的,后续接口请求头需要带上token才能请求
cookie是接口请求服务端,放在响应头中返回;等下次请求,客户端再将cookie发送给服务端
cookie中包含session的信息,服务端会将cookie传递的session信息和服务端存储的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.不是自身原因,再通过查询日志:微服务架构,可以根据它的调用链路逐个的查询请求日志和错误日志。(可以在前端请求的header里添加trace-id,用于跟踪后续的调用链路,若出现错误可以快速的定位到对应的微服务)
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.接口会返回状态码,可以根据状态码定位
1.先了解项目的大概需求和范围,制定测试计划,合理的分配任务
2.项目期间,及时跟踪测试进度和存在的风险
3.项目上线后,编写测试报告,及时观察线上情况
ipconfig(window系统)/ifconfig(linux系统):查看ip地址
ls:查看当前目录下的文件
ls-l(ll):查询当前目录下文件的详细信息
pwd:当前路径
cd 路径:前进到该路径下
cp 需要复制的文件 目标文件目录
cp -r 需要复制的文件夹 目标文件夹
mv 旧文件名 新文件名:修改文件名
rm 文件名:删除文件
rm -r 文件夹名:删除文件夹
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会将授信和借款等流程通过接口的形式请求到公司的进件系统,系统审核之后返回告知用户审核结果,后续还会配合处理放款,用户的还款等操作。
负责的模块:授信和借款模块的功能以及接口测试,还有接口自动化框架的编写和维护
主要的工作流程和方法:项目初期,先根据需求文档和接口文档,编写测试用例以及提取一级用例形成自动化用例
单元测试阶段,使用postman进行单接口的参数,主要验证接口的通过性,以及参数组合等
转测后,根据测试用例进行系统测试,主要验证接口的功能性和接口和接口之间的业务关联。还要关注数据库的重要字段
最后,维护好自动化测试框架,以便后续迭代使用
通用性测试:
参数校验(是否必传,长度校验,格式校验)
参数组合(比如1身份证,2其他证件。传2的时候,输入的是身份证)
响应检验(根据业务响应,构造不同的参数,是否返回预期的响应。比如授信成功,失败,处理中的场景)
功能和业务测试:
调用授信申请接口,是否能将用户授信信息请求到服务器,能否正常的返回授信结果,授信金额,数据库是否有对应的授信记录
授信成功或者失败,能否继续进行下面的借款操作
未进行授信申请先进行授信查询的场景
用户的个人信息不符合授信规则(用户年龄多大或者过小)的场景
授信成功的金额1000,需要借款金额2000,能否成功借款的场景
安全和性能测试:
移动请求的接口都是进行加密的,提供密钥,模拟在测试环境进行请求加密的场景
模拟大量用户同时或者不断调用授信申请接口请求的场景
3.如何测试借款申请接口?
通用性测试:
参数校验(是否必传,长度校验,格式校验)
参数组合(比如1身份证,2其他证件。传2的时候,输入的是身份证)
响应检验(根据业务响应,构造不同的参数,是否返回预期的响应。比如借款成功,失败,处理中的场景)
功能和业务测试:
调用借款申请接口,是否能将用户授信信息请求到服务器,能否正常的返回借款结果,借款金额,数据库是否有对应的授信记录
借款成功或者借款中,此时用户进行借款取消的场景
借款套餐传数据库未配置的套餐,进行借款的场景
用户未授信成功,进行借款的场景
安全和性能测试:
移动请求的接口都是进行加密的,提供密钥,模拟在测试环境进行请求加密的场景
模拟大量用户同时或者不断调用授信申请接口请求的场景
授信和借款模块大概写了200多条测试用例,提了30多个bug
问题:项目迭代速度太快,不能保证上线质量;
解决方法:保证一级用例全部通过;引进自动化测试加快测试效率;对修改点重点测试
问题:开发后的效果和产品需求不符合,产品变更需求未通知测试
解决方法:产品变更需求要在群里通知,并且更新文档上传svn
1.授信阶段:用户线下通过移动测的app进行授信申请,提供所需的申请资料,银行对其审核评估
2.借款阶段:银行根据用户的资料和还款能力,确定是否借款,以及确定借款金额,期数等信息
3.合同签署和放款阶段:签定贷款合同,生成还款计划。银行发放借款资金
4.还款阶段:用户按照还款计划上的还款日期,按时还款
1.用户信息的准确性:测试的时候,尽量构造准确的用户信息
2.授信额度的计算:第三方银行返回的,测试要符合银行计算规则
3.授信数据的安全性
1.模拟线上处理大批量用户订单的问题----一条条执行用例不现实;最后直接往数据库里插入用户数据
2.模拟生成授信和借款用户消息的准确性
ui界面测试:
界面符合需求设计,页面样式合理,文字展示正确
功能测试:
输入框能够输入内容,按钮能够点击
输入正确的收付款账户,转账金额,支付密码,是否能够正常转账
输入错误的收款账户,点击转账,能否弹出对应提示
输入跨行的收款账户,点击转账,能否正常转账
转账时,支付密码输入错误,能否正常转账
密码输入次数上限,账户是否冻结,冻结后是否能继续转账
转账金额为负数,0.1,最大金额,超过最大金额,能否正常转账
付款账户余额不足,是否可以切换其他付款账户。没有其他账户时,是否支持绑定
性能测试:
通过接口的方式,模拟大量用户同时进行转账操作,观察接口平均响应时间以及错误率
兼容性测试:
不同的操作系统或者不同的浏览器上进行测试
两个系统之间是独立的,相互无法访问到对方的信息和数据,需要一种途径去访问对方。接口就是双方共享信息和数据的途径。
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,
数据库的操作:使用pymysql模块封装数据库的增删改查操作,用于测试数据的构造和字段的校验
获取配置:使用configparser模块封装获取配置文件里配置的方法
获取测试数据:使用yaml模块封装读取,写入,清空yaml文件的方法
动态数据的生成:使用faker模块生成个人信息,用于接口请求的参数
config.ini配置文件,里面可以写入环境地址,数据库链接信息等
用yaml文件来管理接口的测试数据,从一级手工测试用例中提取,每一个yaml文件写一个接口
根据手工用例的业务链路来编写自动化测试用例,每个接口从yaml中提取,形成常见的业务场景
存放allure生成的json文件,用于生成allure测试报告
pytest的配置文件,可以配置需要测试的文件或者具体到类;用例打标签;执行的命令行
存放被fixture修饰的方法,一般用于前置步骤,比如登录模块或测试之前清空测试数据
运行文件,主程序的入口
使用pytest中的mark打标签功能,将要执行的用例打上标签。
1.现在pytest.ini文件中设置标签:
markers=标签名
2.再使用@pytest.mark.标签名 修饰要执行的测试用例
3.使用pytest.main([-m 标签名])执行被修饰的测试用例
1.需要先下载安装pytest的失败重试的插件
安装方式:pip install pytest-rerunfailures
2.再使用@pytest.mark.flaky(rerun=2) 修饰失败要重试测试用例。括号里面可以设置重试次数
1.不加跳过原因:@pytest.mark.skip()修饰需要跳过的测试用例
2.加跳过原因,需要满足原因才能跳过:@pytest.mark.skip(reason="")
1.安装:pip install pytest-ordering
2.使用@pytest.mark.run(order=1),通过order的传参来控制用例的执行顺序
两个部分:接口的响应代码,接口的返回
1.断言接口的响应代码是否为200
2.接口的返回:
(1)业务响应码是否符合预期
(2)返回的报文比较短的话,断言全部内容是否一致
(3)返回的报文比较长的话,断言其核心的业务状态。可以使用json提取器,正则表达式提取
还有接口文档和数据库数据校验
1.接口的请求参数:请求参数的是否必传,参数的限制长度和约束限制
2.接口的响应:根据请求参数的值或者数据库的数据,返回的响应是否符合预期结果
3.接口和接口之间的关联性
4.接口的功能性:接口功能是否能够实现产品需求
5.接口的性能和负载
大概分为4个阶段:
1.项目初期:先理解熟悉需求文档和接口文档,先编写逻辑脑图理清业务逻辑,再进行测试用例编写
2.单元测试阶段:可以构造测试前置数据,使用postman进行单接口的测试。该阶段主要测试单接口的请求参数(是否必传,长度,约束等),响应(返回成功,失败,处理中的业务场景)
3.转测阶段:根据测试用例进行系统测试。该阶段主要测试多接口的业务关联测试,数据库等重要字段的校验
4.上线后:将一级用例场景写成接口自动化用例,便于后面迭代升级的测试
功能测试更倾向于ui界面,数据展示,各个功能要按照需求说明实现;更关注用户操作流程,功能的正确性和预期结果
接口测试更关注于参数和返回是否正确,接口之间的交互和数据传递
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)
TimeoutException:超时异常
元素不可见异常
No Such Element Exception:没有这个元素异常
alert = driver.switch_to.alert() 先切换到alert
alert,dismiss() 点击alter取消按钮
alert.sendkeys() 有些alert弹窗支持文本输入
1.在测试计划下新建线程组,在线程组下取样器里新建http请求
2.在测试计划下配置元件新建http请求默认值和http信息头管理
3.在http请求默认值里设置协议,ip地址,端口号;在http信息头管理添加请求头
4.在http请求里添加路径和请求方式。如果是post请求,添加消息体数据
5.添加查看结果树,点击启动
1.前期准备阶段:基本功能测试完成-->确定性能测试团队-->预先的业务场景分析
2.制定测试目标:测试计划(测试背景,测试目的,测试范围,术语约定,性能指标,组织架构,分析分析)--->测试用例设计(所属模块:登录;测试标题:测试100个模拟用户进行登录,测试系统的响应时间;并发数:100个;测试步骤:略;预期结果:响应时间不超过3秒)--->确定性能测试目标
3.测试执行:录制测试脚本--->执行测试脚本--->记录测试结果
4.测试结果分析:测试环境系统性能分析--->测试中发现的问题
负载测试:对系统不断施加压力,系统达到最大的负载阶段,以验证系统处理极限的能力
压力测试:系统在性能饱和状态下,验证系统处理会话的能力
并发:所有的用户同一时间进行同一个操作,一般指同一的业务场景
事务:指一个完整的操作过程;可以指一个接口测试,也可以指多个接口测试
tps:服务器每秒处理事务的数量
吞吐量:一次性能测试中,网络传输数据量的总和
1.资源或者硬件的升级,内存,硬盘,cpu的升级
2.优化数据库,比如增删盖比较多的应用增加索引
3.消息队列
字符串(str),整型(int),浮点型(float),布尔类型(bool),列表(list),元组(tuple),字典(dict)
内在模块:os,sys,time,random,math
第三方模块:requests,pymysql,faker,yaml,configparser
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。