哔哩哔哩面试题

说出python有哪几种内置函数

len()
range()
list()
tuple()
str()
int()
float()
dict()
bool()
set()
id()
min()
max()
sum()
isinstance()
next()
open()
print()
super()
type()
zip()
hasattr()
getattr()
setattr()
delatter()
eval()
zip()

a=1,b=2 让a b互换

a = 1
b = 2
a, b = b, a
print(a)
print(b)

断言有哪几种类型

unittest断言

需要继承unittest.TestCase
使用self调用断言

常用断言

断言方法 检查条件
assertEqual a == b
assertNotEqual a != b
assertTrue bool(x) is True
assertFalse bool(x) is False
assertIs a is b
assertIsNot a is not b
assertIsNone x is None
assertIsNotNone x is not None
assertIn a in b
assertNotIn a not in b
assertlsInstance isinstance(a, b)
assertNotIsInstance not isinstance(a, b)

用于完成某种特定检查的断言方法

断言方法 检查条件
assertAlmostEqual(a, b) round(a-b, 7) == 0
assertNotAlmostEqual(a, b) round(a-b, 7) != 0
assertGreater(a, b) a > b
assertGreaterEqual(a, b) a >= b
assertLess(a, b) a < b
assertLessEqual(a, b) a <= b
assertRegex(s, r) r.search(s)
assertNotRegex(s, r) not r.search(s)
assertCountEqual(a, b) a、b 两个序列包含的元素相同,不管元素出现的顺序如何

pytest断言

使用assert进行断言

# 表达式true通过断言,false断言失败
assert  条件表达式  断言失败message

assert可以使用直接使用“==”、“!=”、“<”、“>”、“>=”、"<=" 等符号来比较相等、不相等、小于、大于、大于等于和小于等于
assert 可以直接使用 in 和not in 来比较包含与不包含。
通过assert不需要任何辅助符号,直接判断对象是否为ture,而assert not 用于判断是否为false。

assert xx  判断xx为真
assert not xx 判断xx不为真
assert a in b 判断b包含a
assert a == b 判断a等于b
assert a != b 判断a不等于b

python字典中的值是否可以为空

不可以

test_dict = {
	"name":
}


报错 SyntaxError: invalid syntax

针对一个登陆系统从多方面设计测试用例

自动化相关问题selenium

一些性能测试问题jmeter相关

数据库操作增删改查,表联查

以下代码会报错吗,为什么?

例子1

class C():
	@
    def B():
        print("B")

    def A():
        print("A")

C.B()

不会报错
输出B

个人理解:
类和对象都可以调用,类似静态方法
可能在编译的过程中,判断是类还是对象,如果是对象,就会检查是否有self参数接收,如果是类,没有加@classmethod就当做静态方法处理。

例子2

l1 = [1, 2, 3, 4]
print(l1[8100])

输出[]
不会报错

个人理解:
如果是访问具体某个值会报错,索引越界
如果是切片的话,内部会判断开始和结束位置以及步长

  1. 判断开始和结束是否小于0
  2. 判断开始和结束不在合法范围,则返回空列表
  3. 如果开始位置合法,结束位置不合法,进行裁剪
def get_slice(a, beg, end, delta=1):
	 # 数组切片get方式
	 if delta == 0: raise ValueError("slice step cannot be 0")
	 # 将负数下标转化一下
	 if beg < 0: beg += len(a)
	 if end < 0: end += len(a)
	 # 如果转化完成之后依然不在合法范围内,则返回空列表
	 if beg < 0 and end < 0 or beg >= len(a) and end >= len(a): return []
	 # 如果方向不同,则返回空列表
	 if (end - beg) * delta <= 0: return []
	 # 将越界的部分进行裁剪
	 beg = max(0, min(beg, len(a) - 1))
	 end = max(-1, min(end, len(a)))
	 ans = []
	 i = beg
	 while between(beg, end, i):
	  ans.append(a[i])
	  i += delta
	 return ans

super()的作用

继承的关系中,解决子类调用父类方法或属性的问题
按照MRO(Method Resolution Order):方法解析顺序 进行的

class Base:
    def __init__(self):
        print('Base.__init__')			


class A(Base):
    def __init__(self):
        super().__init__()		# 2 重点 此处调用B的__init__,根据__mro__中继承顺序
        print('A.__init__')


class B(Base):
    def __init__(self):
        super().__init__()		# 3 此处调用Base的__init__,根据__mro__中继承顺序
        print('B.__init__')


class C(A, B):
    def __init__(self):
        super().__init__()		# 1 此处调用A的__init__
        print('C.__init__')

C()

输出内容
Base.__init__
B.__init__
A.__init__
C.__init__

理解
当调用super()的时候,会从当前类中__mro__中获取继承类的顺序去执行。

线程与进程之间的区别

  1. 根本区别:进程是操作系统资源分配的基本单位,而线程是CPU任务调度和执行的基本单位
  2. 开销方面:创建或切换一个线程比创建一个进程开销小,占用资源和效率都比进程小,进程资源独立,同一个进程下线程共享资源
  3. 所处环境:在操作系统中能同时运行多个进程(程序),在同一个进程(程序)中有多个线程同时执行(通过CPU调度,在每个时间片中只有一个线程执行)
  4. 包含关系:线程是进程的一部分,一个进程可以包含多个线程,一个进程至少包含一个主线程。

如何在数据库数量大的情况下,优化查询效率(亿级别)

get和post的区别

为什么post请求可以代替put,delete,update之类的请求

用过哪些抓包工具进行抓包

如何启动selenium ORC

除了requests。还有哪些库可以做http请求

http协议有哪些

单个api测试方法

脚本的项目结构

如果存放数据

api业务流程测试用例设计

你可能感兴趣的:(面试题)