最近真是水逆,一家又一家的凉凉。把题记录一下,积攒一点人品。
测试部分
登录界面的测试用例:
功能测试
- 输入框的功能:
输入合法的用户名和密码可以成功进入
输入合法的用户名和不正确的密码,不可以进入
输入不合法的用户名和正确的密码,不可以进入
输入不合法的用户名和不正确的密码,不可以进入
其中:不合法的用户名包括:不正确的用户名,使用了特殊字符,空的用户名,字符数量大于用户名的限制,系统的保留字段 不合法的密码包括:空密码,错误的密码,密码长度超过或小于规范,特殊字符,系统保留字段
- 记住用户名的功能
- 界面的链接:对于界面有链接,比如忘记密码等,要测试界面上的链接都正常给出,并能跳转到相应的链接
- 输入框是否支持复制粘贴
- 密码框是否隐藏密码
- 输入密码时,大写字母开启,是否有提示
- 验证码输入错误是否能进入
- 验证码是否过于扭曲和难识别,刷新按钮是否好用,刷新之后是否更新一个验证码 验证登录的次数是否有限制
界面测试
- 界面是否美观,是否让人感到舒适
- 界面中的文字是否简洁,没有错别字
- 两个testbox和一个按钮是否对齐,大小宽度是否合适
性能测试
- 打开登录界面需要多久
- 成功登录跳转到新界面,花费多少时间
安全测试
-
用户密码后台存储是否加密
-
用户密码在网络传输过程中是否加密
-
密码是否具有有效期,密码有效期到期后,是否提示需要修改密码
-
不登录的情况下,在浏览器中直接输入登录后的URL地址,验证是否会重新定向到用户登录界面
-
密码输入框是否不支持复制粘贴
-
密码输入框内输入的密码是否都可以在页面源码模式下被查看
-
用户名和密码输入框分别输入典型的“SQL注入攻击”字符串,验证系统的返回页面
-
用户名和密码输入框分别输入典型的“XSS跨站脚本攻击”字符串,验证系统行为是否被篡改
-
连续多次登录失败的情况下,系统是否会阻止后续的尝试以应对暴力破解
-
同一用户在同一终端的多种浏览器上登录,验证登录功能的互斥性是否符合设计预期
-
同一用户先后在多台终端的浏览器上登录,验证登录是否具有互斥性
-
是否可以记住密码,记住的密码保存是否加密,记住的密码是否有有效期,过了有效期后是否清空密码
-
是否支持第三方登录
-
密码的强弱性,复杂度校验
-
异地登录校验、更换设备登录校验、登陆信息异常是否考虑账户冻结停用、是否允许第三方平台存储密码
-
是否可以使用登录的api发送登录请求,并绕开验证码校验
-
是否可以用抓包工具抓到的请求包直接登录
-
截取到的token等信息,是否可以在其他终端上直接使用,绕开登录,token过期时间校验
-
登录错误后的提示是否存在安全隐患
兼容性测试
- 不同的浏览器是否能正常显示,功能正常
- 不同的系统下是否能正常工作,如Windows、Mac
- 移动设备商是否能正常工作,比如iPhone 11、Android
- 不同的语言环境下,是否能正常工作
水杯测试用例编写
百度页面测试用例
软件生命周期
软件生命周期指的是软件从开始到最终被废弃所经历的各个阶段。在不同的阶段里,有不同的组织人员执行不同的任务,需要消耗不同的资源。
生命周期常见的模型:瀑布型、V模型、W模型
阶段:需求分析—>软件设计—>程序编码—>软件测试—>运行维护
编写测试用例的方法
-
等价类划分法
使用场合:有输入的地方,如:输入框
测试思想:在大量数据中划分范围(等价类),然后从没法范围内挑选代表数据,这个数据要能反映这个范围内数据的测试结果 -
边界值分析法
使用场合:有输入的地方
测试思想:边界值是最容易出错的地方 -
场景法
使用场合:业务比较复杂的软件系统,测试人员把杂技当成最终用户,尽可能真实的模拟用户在使用此软件的操作场景
测试思想:场景法是模拟用户操作软件时的各种情景,主要用于测试软件的业务逻辑和流程。当拿到一个测试任务是,我们并不先关注某个文本框的等价类等是否满足要求,而是先关注它的主要功能和业务流程是否正确实现,这就需要场景法来完成测试。当业务流程测试没有问题,也就是软件的主要功能没有问题时,我们再去关注控件的等价类、边界值等细节测试。(先整体后细节)
发现一个登陆界面密码的bug,怎么描述给开发人员
描述bug步骤:
发现问题的版本
问题出现的环境
错误重现的步骤
预期行为的描述
错误行为的描述
其他,例如故障的种类等
不要将bug放在一起提交
如果你提出一个bug,但开发人员不认为是个bug怎么办
1、先检查自身,是否bug描述不清楚:如果能高质量的录入bug,就沟通了一大半了
2、站在用户角度考虑问题
3、bug定级要有理有据,不仅参考bug级别,还有考虑bug是否会影响到流程等
4、提升自身的技术和业务水平,不光要提出问题,也能给出解决方案
自动化测试能完全代替手工测试么
自动化测试不能代替手工测试,因为并不是所有的功能自动化测试都可以实现,它的效率也不高,而手工测试能通过人为的逻辑判断效验当前的步骤是否正确,同时用例的执行具有一定步骤跳跃性,能够清楚知道逻辑,细致定位问题。
两者的区别是:
1、测试效率不同
完成同等数目的测试,启动自动化速度更快,手工测试则需要消费更多的时间。但是自动化测试的脚本开发比用例开发耗时长,包括编写脚本、调试脚本、维护脚本,而手工测试虽然也要对测试用例进行撰写、评审、修订,由于用例编写更多为自然语言,时间上会少。
2、资源利用率不同
自动化测试在设备、仪表资源能够7*24小时利用,这点上手工测试没有可比性。
3、执行可靠性不同
自动化测试中可靠的按脚本执行,后续定位、复现有明确的配置路径可循,而手工测试往往会因为自己的判断导致测试出错,并且在测出来的问题上有一部分是不能复现的。但是自动化的稳定来源于其死板,而人的智慧体现在思维的跳跃,跳跃的思维也会导致后期不易定位。
4、覆盖率不同
在同等时间内,启动自动化测试能够覆盖更多的功能,而手工测试只能覆盖小部分功能。但是自动化测试适合回归测试,开发中的功能不划算。对于开发中功能,需求或者实现的更改,都会导致自动化脚本的变更,开发中的功能更适合手工测试。
http、IP 、TCP分别在哪一层
- http在应用层
- IP在网络层
- tcp在传输层
代码部分
浅复制和深复制的区别
浅复制仅仅是指向被复制的内存地址,如果原地址中对象被改变了,那么浅复制出来的对象也会相应改变。
深复制在计算机中开辟了一块新的内存地址用于存放复制的对象。
打印九九乘法表
for i in range(1, 9 + 1):
for j in range(1, i + 1):
print("%d*%d=%d" % (j, i, i * j), end=" ")
# print(f'{j}x{i}={i*j}',end=" ")
print(" ")
字符串去重
string = "aabbcdeesjnaskss"
StrNew = ""
for char in string:
if not char in StrNew:
StrNew += char
else:
continue
print(StrNew)
python实现某目录下将多个文件夹内的文件复制到一个文件夹中
import os
import shutil
def CreateDir(path):
isExits = os.path.exists(path)
if not isExits:
os.makedirs(path)
print("创建目录成功")
else:
print("已存在,不用创建")
def CopyFile(filepath, newPath):
# 获取当前路径下的文件名,返回List
fileNames = os.listdir(filepath)
for file in fileNames:
# 将文件名加入到当前路径后面
newDir = filepath + '/' + file
# 如果是文件
if os.path.isfile(newDir):
print(newDir)
newFile = newPath + "/" + file
shutil.copyfile(newDir, newFile)
# 如果不是文件
else:
CopyFile(newDir, newPath)
if __name__ == "__main__":
path = input("请输入需要复制的文件夹:")
newpath = input("请输入目标文件夹:")
CreateDir(newpath)
CopyFile(path, newpath)
给定字符串"ssssddddeee",打印"s4d4e3"
String = "ssssddddeee"
NewStr = ""
for char in String:
if not char in NewStr:
NewStr += char
NewStr += str(String.count(char))
else:
continue
print(NewStr)
对于数组data,满足|data[i]-data[i+1]|=1,此时从data中索引某个值,返回第一个出现该值的索引位置?比如说:data=[1,2,3,4,3,2,3,4,5,4]这样,索引第一个出现的3所在的位置
"""
先去data[0],看data[0]和目标值(target)的差(delta)的绝对值是多少,然后下一个索引到data[0+delta],再看data[0+delta]和target的差的绝对值(delta)是多少
"""
data = [1, 2, 3, 2, 3, 4, 5, 4]
targe = 5
i = 0
while data[i] != targe:
delta = abs(data[i] - targe)
i += delta
print(i)
链表判断有环,并且找出交叉点的位置
集合反转
迭代器,装饰器
内存溢出和内存泄漏的区别
元组能实现的,能用列表实现么
Linux部分
查看内存命令
cat /proc/meminfo
或者
free -m
查看CPU
cat /proc/cpuinfo
防火墙
查看防火墙状态:systemctl status firewalld
关闭防火墙:systemctl stop firewalld.service
开启防火墙:systemctl start firewalld.service
创建文件
vi + 文件名
touch + 文件名
创建文件夹
mkdir + 文件名
查看进程
ps
查看文件前几行或者后几行
head -n 5 fimename # 查看前五行
tail -n 5 filename # 查看后五行
cat filename | tail -n 5 | head -n 10 # 查看5~10行
cat filena # 查看完整文件
head -n 10 /etc/profile >>/home/test # 将内容输出到/home/test文件中
查看IP地址
ifconfig
或者
ip a s
MySQL去重
selsect distinct 字段 from 表名