一、Linux下查看日志的方式
-
杀僵尸进程
ps -ef | grep xxxx
(先查xxxx进程ID)kill -9 PID
(生产环境谨慎使用)
-
kill、killall、pkill的区别
- kill:通过pid来杀死进程
- killall:
(killall [参数][进程名])
,Linux系统中killall命令用于杀死指定名字的进程。我们可以使用kill命令杀死指定进程pid的进程,如果要找到我们需要杀死的进程,我们还需要在之前使用ps等命令在配合grep来查找进程,而killall把这个过程合二为一,是一个很好用的命令。 - pkill:pkill和killall 应用方法差不多,也是直接杀死运行中的程式;如果你想杀掉单个进程,请用kill来杀掉。实例:
pkill -9 firefox
-
查看日志常用命令
-
tail: -n 是显示行号,查看后多少行的日志,相当于nl命令
实例:
tail -100f test.log
实时监控100行日志tail -n 10 test.log
查询日志尾部最后10行的日志tail -n + 10 test.lo
g 查询10行之后的所有日志
-
head:跟tail是相反的,tail是看后多少行的日志
实例:
head -n 10 test.log
查询日志文件中的头10行日志head -n -10 test.log
查询日志文件除了最后10行的其他所有日志
-
cat:tac是倒序查看,是cat单词反写
实例:
cat -n test.log | grep "debug"
查询关键字的日志
-
-
应用场景一:按行号查看—过滤出关键字附近的日志
-
cat -n test.log |grep "debug"
得到关键日志的行号 -
通常查找出错误日志
cat error.log | grep 'nick'
, 这时候我们还有个需求就是输出当前这个日志的前后几行:
cat error.log | grep -A 5 'nick' 显示nick及后5行 cat error.log | grep -B 5 'nick' 显示nick及前5行 cat error.log | grep -C 5 'nick' 显示file文件里匹配nick字串那行以及上下5行 cat error.log | grep -n -B10 -A10 5 'nick' 显示file文件里匹配nick字串前后10行
-
-
应用场景二:选取日志中特定范围进行分析
- cat -n test.log |tail -n +1000|head -n 20` 从第1000行开始,显示20行
tail -n +1000表示查询1000行之后的日志
head -n 20 则表示在前面的查询结果里再查前20条记录
-
cat catalina.out | head -n 1400| tail -n +1350
显示1350行到1400行 (实现原理都差不多,就是通过语法糖) -
按日期截取 :一般在日志系统中都会记录打印日志的时间,通常我们非常需要查找指定时间端的日志:
sed -n '/2014-12-17 16:17:20/,/2014-12-17 16:17:36/p' test.log
特别说明:该命令中的两个日期值必须是日志文件中包含的值,否则该命令无效.; 先 grep ‘2014-12-17 16:17:20’ test.log 来确定日志中是否有该 时间点
- 按行数截取
sed -n ‘10000,20000p’ test.log
sed -i ‘/关键词/d’ catalina.out 删除包含关键词的行
-
应用场景三:日志内容特别多,打印在屏幕上不方便查看
- 使用more和less命令,
如:
cat -n test.log |grep "debug" |more
这样就分页打印了,通过点击空格键翻页- 使用 >xxx.txt 将其保存到文件中,到时可以拉下这个文件分析
如:
cat -n test.log |grep "debug" >debug.txt
-
使用管道进行and or条件处理
-
and 使用管道实现 例如: grep -n ‘日志排查’ test.log | grep ‘日志’
-
or 用-E 例如:grep -n -E ‘日志排查|hello’ test.log 满足两个关键字的都可以找出来
-
二、Python中list和tuple的不同
-
申明方式不一样,list用方括号申请,tuple用小括号申请
-
list是可变的对象,tuple是不可变的对象,list的值可以修改,而tuple不能修改
-
tuple无法复制,因为元组是不可变的,而list可以复制。运行tuple(tuple_name)将返回自己
-
元组分配到的内存是低开小的较大的快,因为tuple是不可变的;对list则分配小内存块。与list相比,tuple的内存更小。拥有大量元素时,使用tuple比list快。list长度可变
三、登录界面的测试
- 用户框
- 密码框
- 验证码
- 提交按钮
- 测试场景
功能测试
最基本的功能角度:
登录、登出、保持登录几种状态的处理是否正确从用户使用角度:
- 是否提供了多种登录途径? 如通过api接口,通过第三方账户。这些登录途径和界面登录的约束是否一致?
- 登录界面的布局安排是否合理
- 登录界面提供的术语或约束描述是否清晰易懂?
- 快捷键、tab按键功能正常?
- 登录错误提示是否明确易懂?(基于用户操作上下文,没有技术术语,提供解决方法)
- 登录出现异常时是否有问题上报机制?指引是否清晰明确?是否有太多官腔或法律文本说辞让用户体验不太好?
- 界面视觉效果是否正确?遮罩、走马灯,不同状态的视觉提示等
从异常处理角度:
- 异常字符的处理
- 格式校验,比如电话号码、email的格式
- 空输入或仅输入空格,字符间存在空格
- 超过最大长度
- 后端异常,如鉴权服务器异常、数据库异常、第三方接口异常等
- 登录次数超限及解限
从可接入性角度
验证码,短信?语音? 图像识别?行为识别?
图形上的alt提示
光标焦点
默认输入
登录前后状态的变化
性能测试
服务端性能
- 用户的并发量
- 服务器的性能指标
- 服务端分布式处理?
- 服务端反向代理?负载均衡?
- 支持的最大用户量?
- 多种场景和登录场景的联动性能
客户端性能
- 响应时间
- 大并发下的响应时间
- 界面加载速度,页面静态性能,pagespeed或yslow评分
兼容性测试
- 操作系统兼容
- 浏览器兼容
- 移动设备兼容
- 软件不同版本的前向兼容
安全测试
- 协议? http or https?
- 密码设置mask?
- 防注入?脚本注入,sql注入
- 重定向安全性
- 跨站脚本防护
- 跨站伪造防护
- 权限控制,越权验证
- 防暴力破解
- 忘记密码安全策略
- 密码健壮性策略
- 密码存储
- 密码或token的网络传输,中间人攻击
- 个人隐私保护策略
安装升级测试
后端服务或接口进行了升级或部署时,需要针对性的进行相关测试
- 前向兼容
- 升级过程对终端用户的影响
- 升级回退策略及验证
- 对关联系统的影响
可调可测性测试
- 相关操作日志完整性
- 主要对象是否便于识别、定位
- 是否便于扩展
- hard code情况
- 用户行为跟踪
- 测试用例
功能性用例设计点:
- 输入已注册的用户名和正确的密码,验证是否成功登录
- 输入已注册的用户名和不正确的密码,验证是否成功失败,且提示信息正确
- 输入未注册的用户名和任意密码,验证是否登录失败,且提示信息正确
- 使用未激活账户登录,验证是否登录失败
- 使用被停用用户登录,验证是否登录失败
- 用户名和密码两者都为空,验证是否登录失败,且提示信息正确
- 用户名和密码两者之一为空,验证是否登录失败,并且提示信息正确
- 如果登录功能启用了验证码功能,在用户名和密码正确的情况下,输入正确的验证码,验证是否登录成功
- 如果登录功能启用了验证码功能,在用户名和密码正确的情况下,输入错误的验证码,验证是否登录失败,且提示信息正确
10.用户名和密码是否大小写敏感
11.页面上的密码框是否加密显示、或者是否需要有明暗码切换按钮
12.后台系统创建的用户第一次登录成功时,是否提示修改密码
13.忘记用户名和忘记密码的功能是否可用
14.前端页面是否根据设计需求限制用户名和密码长度
15.如果登录功能需要验证码,点击验证码图片或者点击换一张是否可以更换验证码,更换后的验证码是否可用
16.刷新页面是否会刷新验证码
17.如果验证码有时效性,需要分别时效性内和时效性外验证码的有效性
18.用户登录成功但是会话超时后,继续操作是否会重定向到用户登录界面
19.不同级别的用户,比如管理员和普通用户,登录系统后权限是否正确
20.页面默认焦点是否定位在用户输入框中
21.快捷键Tab和Enter等,是否可以正常使用
22.为空和输入空格字符串的校验是否一致
23.使用中文键盘输入字母和使用英文键盘输入字母传入后端的字符长度是否一致
24.成功登录后的session的时效设置
25.输入栏是否设置快速删除按钮
26.用户名和密码是否支持特殊字符和中文
27.浏览器的前进后退按钮,是否有效
28.成功登出后,点击浏览器回退按钮,是否可以继续操作系统
29.需求中是否有登录时间限制,如果有验证时间限制是否有效
30.验证不同登录方式的正确性:扫码、账号密码、第三方……
31.若支持手机号+验证码登录,验证码是否有时间限制,移动设备是否可以直接获取验证码
32.操作错误提示信息是否简单明了
兼容性测试用例设计点:
- 不同浏览器下,验证登录页面的显示以及功能正确性
- 相同浏览器的不同版本下验证登录页面的显示以及功能正确性
- 不同移动设备终端的不同浏览器下,验证登录页面显示以及功能的正确性
- 不同分辨率的界面下,验证登录页面的显示以及功能正确性
安全性测试用例设计点:
- 用户密码后台存储是否加密
- 用户密码在网络传输过程中是否加密
- 密码是否具有有效期,密码有效期到期后,是否提示需要修改密码
- 不登录的情况下,在浏览器中直接输入登录后的URL地址,验证是否会重新定向到用户登录界面
- 密码输入框是否不支持复制粘贴
- 密码输入框内输入的密码是否都可以在页面源码模式下被查看
- 用户名和密码输入框分别输入典型的“SQL注入攻击”字符串,验证系统的返回页面
- 用户名和密码输入框分别输入典型的“XSS跨站脚本攻击”字符串,验证系统行为是否被篡改
- 连续多次登录失败的情况下,系统是否会阻止后续的尝试以应对暴力破解
10.同一用户在同一终端的多种浏览器上登录,验证登录功能的互斥性是否符合设计预期
11.同一用户先后在多台终端的浏览器上登录,验证登录是否具有互斥性
12.是否可以记住密码,记住的密码保存是否加密,记住的密码是否有有效期,过了有效期后是否清空密码
13.是否支持第三方登录
14.密码的强弱性,复杂度校验
15.异地登录校验、更换设备登录校验、登陆信息异常是否考虑账户冻结停用、是否允许第三方平台存储密码
16.是否可以使用登录的api发送登录请求,并绕开验证码校验
17.是否可以用抓包工具抓到的请求包直接登录
18.截取到的token等信息,是否可以在其他终端上直接使用,绕开登录,token过期时间校验
19.登录错误后的提示是否存在安全隐患
性能压力测试的用例设计点:
- 单用户登录的响应时间是否小于3秒
- 单用户登录时,后台请求数量是否过多
- 高并发场景下用户登录的响应时间是否小于5秒
- 高并发场景下服务端的监控指标是否符合预期
- 高集合点并发场景下,是否存在资源死锁和不合理资源等待
- 长时间大量用户连续登录和登出,服务器是否存在内存泄露
- 输入内容校验是否加入了函数防抖