1.Linux 直接查看某个进程的占用端口号
- 1)ps -aux|grep [name]
查出pid
- 2)Netstat -nap|grep [pid]
2.python的数据类型有哪些?
int 、bool、str、list、元祖tuple、字典dict、集合set
3.python字典、列表、集合、元素有什么区别?
- 列表:有序、可读写、元素可修改、列表用[]、可通过下标访问
- 元祖:有序、只读、元素不可修改、元祖用()、可通过下标访问,只有一个数据时,在数据后加逗号
- 集合:无序、可读写、元素不可修改、不能通过下标访问,用{}表示
- 字典:无序、可读写、元素可修改、能通过下标访问、用{}表示
4.web自动化的三种等待方式
- 强制等待sleep()
- 隐性等待implicitly_wait(x) x秒内查找一个元素,找到马上执行下一步,只能等待,超过x秒抛出异常
- 显性等待
WebDriverWait(driver,等待时长,轮循周期).until()/until_not()
明确等到某个条件满足后,再去执行下一步
5.冒泡排序
a=[10,83,21,14,6,7,1,52,9,8]
for i in range(len(a)):
temp=0
for j in range(len(a)-1):
if a[i]>a[j]:
temp=a[i]
a[i]=a[j]
a[j]=temp
print(a)
6.adb 命令(app测试)
- adb shell
- adb logcat 查看日志
- adb logcat > ./logcat.log 写入本地文件
- adb logcat -v time > ./logcat.log
- adb logcat -c 清除旧日志
- 查看系统资源adb shell top |grep [包名]
- 查看CPU信息 adb shell dumpsys cpuinfo
- 查看内存信息 adb shell dumpsys meminfo
- adb shell push [本地路径] [本地路径]
- adb shell pull [设备路径] [本地路径]
- adb install apkpath 安装
- adb uninstall packagename 卸载
- adb shell pm list package 查看所有包名
- adb shell pm list package -3 查看第三方的包名
- adb shell pm list package -s 查看系统的包名
- adb shell dumpsys activity | findstr [包名]|findstr LUNCHER 查找启动页
****win系统用findstr mac系统用grep
7.python对列表li=[1,2,3,5,5,5,5,6]去重
1)set集合去重
列表转换成集合>集合再转换成列表
**set是无序的,如何保持原有的顺序
sort(key=列表原来的顺序)
old_li=[1,2,3,5,5,5,5]
s=set(old_li)
new_li=list(s)
print("转换成集合去重",new_li)
new_li.sort(key=old_li.index)
print("保持old_li原有的顺序",new_li)
2)遍历
old_li2=[8,2,3,5,5,5,5]
new_li2=[]
for i in old_li2:
if i not in new_li2:
new_li2.append(i)
print("去重之后的列表",new_li2)
3)通过字典key的唯一性
old_li3=[8,2,3,5,5,5,5]
#把列表的值作为字典的key,key的唯一性
new_dict={}.fromkeys(old_li3,"1")
print("新字典",new_dict)
new_li3=list(new_dict)
print("去重之后的列表",new_li3)
8.用python写一个单例模式,并说明应用场景
设计思路:保证一个类生成一个实例对象
作用:保证系统中一个类只有一个实例,实例对象比较容易被外界访问
控制实例的个数并节约系统资源
应用场景:回收站,任务管理器,配置文件,网站计数器
9.什么是装饰器及应用场景
装饰器原理:闭包
作用:在不改变函数原有功能的基础上增加额外的功能,代码复用性的特点应用到了极致
闭包:1.函数嵌套函数2.外部函数返回内部函数的名字3.内部函数可以使用外部函数的参数
例如:写一个计时器
import time
def timer(func):
def doc():
start_time=time.time()
func()
end_time=time.time()
print("run time is %s"%(end_time-start_time))
return doc
@timer
def t1():
time.sleep(2)
print("runing t1")
@timer
def t2():
time.sleep(5)
print("runing t2")
10.如何保证测试质量?
1)明确需求细节,详细沟通梳理需求
2)明确测试策略与测试方法
3)严控需求实现完整程度、bug遗留率、按时交付率等指标
4)合理的软件测试流程, 测试过程监控
11.进程和线程
进程:程序一次动态执行的过程
线程:轻量级进程,是一个基本的CPU执行单元
一个线程只能属于一个进程,一个进程可以有多个线程,但至少有一个线程。
资源分配给进程,同一进程的所有线程同享该进程的所有资源。
CPU分配给线程,即真正在CPU上运行的是线程。
12.并行与并发
并行:线程同时执行,是真正意义上的同时
并发:多个线程在单个核心上运行,同一时间一个线程运行,系统不停切换线程。看起来像同时运行,实际上是线程不停切换。是单位时间内的处理能力。
python的多线程:同一时间只能运行一个线程,但是能实现并发
13.python 局部变量和全局变量
局部变量:定义在函数内部的变量称为局部变量,他的作用域范围为函数内,也就是出了函数外就无效
全局变量:定义在函数外的变量称之为全局变量,他的作用域范围为全局
总之,测试人员要做的是能够正确判断什么时候不能追求软件的完美,要做的是学会对每一个缺陷进行取舍



