面试杂项
- pytest
pytest.mark.firture() 前后置固件,可以给方法起别名,提供其他case调用
pytest.mark.parametrize(变量名,变量值) 参数化用例,需要用例接受变量名
pytest.mark.skipif() 跳过用例执行,可以写跳过原因
pytest -reruns 3。 失败重试3次 ,最终失败后抛出异常
pytest -vs 生成详细报告
-n=3 使用3个线程执行用例
-x 出现失败后停止测试
-maxfail=3 失败3个用例后停止
pytest --alluredir=./report xxx.py
allure genetate report -o report/html --clear
- selenium
webDriverwait(driver,timeout=10).until(lama x:x.find_element_by_id('#q'))
WebDriverwait(driver,timeout=10).until(EC.presence_of_element_located((By.id,'q')))
显示等待:webdriver 寻找元素,当第一次查找没有检测到元素,会等待规定时间,时间内满足条件则继续执行,不满足则抛出异常,刷新时间可以自定义
driver.implicitly_wait(3)
隐式等待:webdricer 查找元素,当第一次查找没有检测到元素,会等待规定时间内,不停的检测是否满足条件,满足则继续执行,不满足且超出时间则抛抛出异常
Xpath 通过浏览器复制xpath路径、'//input[@id="q"]' //开头、层级元素、@属性
css 通过浏览器复制css ,'#q' 使用属性 ,'.class_button1' 使用class
- appium
滑动 swipe 通过x y,x y 坐标进行滑动
webview
- Postman、Charles
pro-request Script 请求前执行
Tests 请求结束后执行
porxy ==> breakpoint 修改请求和返回
tools ==> rewrite 修改请求
tools ==> Map local 映射到本地
tools ==> Map remote 映射到其他域名链接
- Linux
cd xx 跳转到xx目录
ls -a 显示当前文件夹下所有文件
mv /usr/xxx /opt/xxx 移动xxx文件到 /opt/xxx
cp /usr/xxx /opt/xxx 复制xxx文件到 /opt/xxx
cat xx 查看xx文件内容
more xx 查看xx文件内容 /aaa 寻找aaa匹配的内容 空格跳转下一页
vim 编辑文件 i 进入编辑模式 o换行后进入编辑模式 wq!强制保存退出 /xxx 查找xxx
head 100n 查看前100行
tail -f xxx.log. 查看实时日志
tail -10f xxx.log 查看后10行日志
ps -ef 查看进程信息 ps -ef | grep xxx 查看xxx的进程信息
du -sh 查看当前文件大小 du -sh xx
top 查看系统cpu、内存占比
chmod 777 xxx 赋予权限
whereis 查看文件路径
which 查看命令路径
find xxx 寻找文件xxx
ping 查看是否可以访问ip
- http协议
get、post区别
请求方式不同
请求参数长度get有最大限制,post没有
请求参数get请求参数在URL中、post有表单、json、text等格式
get经常用来做查询类对数据没有更新的操作,post常用来做有数据更新的操作新增、编辑
三次握手四次分手
客户端发送连接请求到服务端,服务端接受请求后,将接受的请求报文+数据包返回给客户端,客户端接受服务端数据后,再次将接受的报文+数据包发送给客户端,服务端接受客户端发来的报文后,建立连接
客户端发送端开连接请求到服务端,服务端接受请求后,加数据包返回客户端,此时服务端处于关闭等待状态,客户端接受数据后,报文+数据包发送给服务端确认关闭,服务端接受到数据后,客户端等待一段时间确认关闭后端开连接
- cookie、session、token区别
三者都是用户鉴权使用,用来提高用户体验
cookie:一般保存在客户单浏览器中,键值对形式,容易被篡改
session:保存在服务端,比较消耗服务端资源,有效时间后会销毁失效
token:一般存在数据库中,使用加密形式存储,用来做身份令牌验证
- 状态码:
200 请求成功
201 数据更新成功
204 删除数据成功
400 请求中数据错误,无法被服务端识别
401 用户没有权限访问
403 禁止访问
404 访问的资源不存在
500 服务端发生错误,客户端无法判断请求是否成功
502 网关错误
503 服务当前不能处理客户端请求,可能一段时间后会恢复
- mysql
1、关系型非关系型数据的区别:
关系型数据库的优点:
容易理解。因为它采用了关系模型来组织数据。
可以保持数据的一致性。
数据更新的开销比较小。
支持复杂查询(带where子句的查询)
非关系数据库的优点
不需要经过sql层的解析,读写效率高;
基于键值对,数据的扩展性好;
可以支持多种类型数据的存储,如图片,文档等。
- mysql四大特性:
原子性:执行的事务不可拆分,要么全部执行成功要么全失败
一致性:保证事务在执行前后整体的状态保证一致,执行前后总量保持不变。如:互相转账,执行前两个人的总金额为1000,执行后也是2000
隔离型:事务与事务之间是隔离的,不应该相互影响
持久性:一旦事务执行成功,对数据的修改是持久的,关机之后也不受影响
隔离级别:
索引:提高查询效率,但索引也不是设置越多越好,因为索引本身也是文件,会占用数据库的资源。添加索引要尽可能的在创表初期就确定,否则后续维护很费时间
索引优点:可以大大的提高数据获取速度、减少查询分组和排序的时间、唯一索引可以保证数据的唯一性
索引缺点:创建和维护需要时间,数据量越大,时间越长、在对数据进行增删改操作时,索引也会参与,降低了维护速度、索引本省也占用数据库资源,不是越多越好
主键索引,唯一不可重复 ,一张表只能有一个
唯一索引,数据不可重复,可设置多个唯一索引
普通索引,提高数据库获取数据的速度
创建索引的原则:
优先选择经常分组、条件、查询使用的字段
脏读、不可重复度、幻读现象的解释和避免方法:
insert into class('qe','qwe') values('a','b')
delete from class where kk='q'
update class set chengji='20' where id=5
select k,q from class order by id desc
select a.xxx,b.xx2 from class as a inner join source as b on a.id=b.id
python
看字符串处理、列表、字典处理,排序算法、面向对象特性、设计模式,多线程
git
git init 初始化
git status 查看当前分支状态
git add . 追踪所有文件
git commit -m "提交说明文字" 提交并描述更改说明
git remote add origin 远程git仓库链接 本地关联远程仓库
git push -u origin master 将本地变更提交远程仓库
git branch 显示分支
git checkout xxx 跳转分支xxx
git merge xxx 合并xxx分支到本地当前分支
- redis、MQ
r
edis数据存储在内存中,读写数据速度快
redis操作是原子性,要么全执行成功,要么全失败
redis支持丰富的数据类型,str,set,list,map
redis可以用于缓存、消息队列,日历订阅等场景
MQ优点:可以接偶,异步执行任务,削峰 缺点:系统复杂性,可用性,需要保证只被消费一次
- 性能测试、Jmeter
压测量评估:通过历史数据或者产品运营给出的数据进行压测量评估
具体的压测过程:先确定性能测试的范围
,然后对相关的场景进行分析,确定压测用例(编号、标题、测试步骤,CPU、内存、TPS成功率、RT时间),然后准备压测环境,准备好后开始压测影响性能指标/通过什么判断压测标准
- Flask/Django
python manage.py rumserver 8008
python manage.py makemigre
生命周期:用户通过浏览器发送请求到Django,Django通过wsgi协议去将接受的请求转化后给到url模块,URL路由传递到view模块进行业务逻辑处理,并与model模块进行数据交互,处理完成后传递给Template模块将页面和数据渲染完成后,返回给浏览器显示
- 测试报告
测试概况:描述当前的测试模块、测试进度,需要优先解决的bug,
测试遗留问题和风险:描述当前项目遗留上线的问题,bug风险预估
测试数据:描述详细的测试模块及相关问题的数据报表,用例执行数据
项目总结:本次在测试过程中遇到的问题,需要改进和优化的方面,以及项目的最终结论