问题

零基础测试开发考核体系:
Python知识:
1、字典排序使用到的函数具体是哪个?举例说明

sorted()
2、字符串格式化使用到的关键字是哪个,举例说明

format

3、列表中append()与insert()的区别是什么?举例说明

append():添加字符串到索引最后一位

insert():可指定位置

4、列表与元组的区别是什么

元组是不可变的:不能增加,也不能把原有的删除

列表是可变的:可以增加,也可以把原有的删除

5、查看一个对象的类型关键字是什么?查看对象的内存地址关键字是什么

type()

id()
6、怎么获取字符串的索引信息

str='abc!'
for index,item in enumerate(str):
    print(index,item)

7、举例说明列表推导式的使用

list3=[x for xin range(5)]

print(list3)

8、当元组只有一个对象的时候,需要注意什么?

最后加,
9、怎么理解函数的返回值?

(1)在一个函数里,没有关键字return时,返回值是None

(2)在一个函数里,有关键字return时,它的返回值就是return后面的值

(3)函数的返回值可以是函数形式

10、怎么理解函数的动态参数

在函数参数、类型不确定的时候使用动态参数
11、字符串与列表之间的互相转换

字符串→列表:.split(" ")

列表→字符串:" ".join()

12、字符串的替换使用到的方法是?

replace()
13、怎么理解is,in,==

in:判断的是两个对象中一个对象是否包含另外一个对象

is:判断的是两个对象的内存地址

==:比较两个对象的内容以及类型是否一致

14、使用os库编写一个文件的路径拼接

base_dir=os.path.dirname(os.path.dirname(__file__))
  
f=open(os.path.join(base_dir,'函数/log.txt'),'r')
print(f.read())

15、怎么理解序列化与反序列化

序列化 :把python对象转换为字符串的数据类型,(把 python的数据类型(字典、元组,列表),转换为str数据类型的过程)

反序列化:就是把str的数据类型转换为python对象的过程(把str数据类型转换为python的数据类型(字典、元组,列表)的过程)

16、举例说明文件的a,w,r的模式

def fileW():
    """W模式,创建文件,并把文件写进去"""
    a = open(file='a.sys', mode='w')
    a.write('nihao')
    a.close()
fileW()

def fileA():
    """A模式,在原有基础上添加内容"""
    a = open(file='a.sys', mode='a',encoding='utf-8')
    a.write('buhao')
    a.close()
fileA()

def readFile():
    a = open(file='a.sys', encoding='utf-8')
    # 读取文件
    # print(a.read())
    # 读取文件里面的第行内容
    # print(a.readline())
    # 换行读取文件里面的所有内容
    for item in a.readlines():
        print(item.strip())
readFile()

17、使用with上下文的模式来处理文件

def filew():
    with open('log.md', 'w') as f:
        f.write('a')
  
  
# if __name__ == '__main__':
#     filew()
  
def filea():
    with open('log.md', 'a', encoding='utf-8') as f:
        f.write('b')
  
  
# if __name__ == '__main__':
#   filea()
  
def readFile():
    with open('log.md', 'r', encoding='utf-8') as f:
        print(f.read())
  
  
if __name__ == '__main__':
    readFile()

18、怎么理解编码与解码

编码:就是把str的数据类型转为bytes的数据类型的过程,使用到的关键字是encode
解码: 把bytes的数据类型转为str的数据类型的过程,使用到的关键字是decode
19、使用datetime获取当前的时间

import datetime
import time
  
print('获取当前时间:', datetime.datetime.now())

20、使用time等待5秒的时间

import time

time.sleep(5)
21、怎么理解装饰器

在很多程序都要修改一个内容时,使用装饰器可以一次性解决


22、怎么理解局部变量与全局变量

全局变量:在一个Python文件里面,定义的变量,可以把它理解为全局变量,在Python文件中,全局变量的优先级是高于
局部变量的
局部变量:在一个Python文件里面的函数里面,定义的变量,可以理解为局部变量,在函数内部,局部变量的优先级是高于
全局变量的
在函数内部使用全局变量的时候,可以使用关键字global来引用,global申明全局变量


23、Java的继承与Python的继承有什么区别

Java的继承是单继承

Python的继承是多继承
24、如果子类重写了父类的方法,那么实例化子类后,调用重写后的方法,调用的是子类的方法还是父类的方法
子类

 

Linux知识:
1、查看进程的命令

ps
2、查看端口的命令

lsof -i: 端口号
3、赋予文件权限的关键字

chmod
4、r,w,x对应的数字是多少

r --> 4
w --> 2
x --> 1
5、给一个文件给rwx权限

chomd 421 文件名
6、git提交文件的命令是什么

git add 文件名

git commit -m " "
7、git创建仓库的命令是什么

git init
8、查看内存的命令

free
9、编辑文件的步骤

步骤一:touch创建新的空白文件

步骤二:vim 进入编辑文件,添加文字

步骤三:Esc+:wq保存文件

10、查看文件前5行的命令

head -n 5
11、查看文件后10行的命令

tail -n 10
12、文件查看命令

cat 

13、平均负载怎么查看

uptime

 

API知识:
1、HTTP的完整请求流程

第一步:客户端与服务端之间建立TCP的连接

第二步:客户端向服务端发送request请求

第三步:服务端向客户端response响应回复

第四步:关闭TCP连接
2、怎么理解get和post请求

get:获取数据

post:添加数据
3、在postman中写断言的地方为?

tests中
4、怎么理解postman里面的collections

collection集合: 在postman中能够批量运行集合里的测试用例 ;能够解决集合中的业务关联。
5、动态参数在postman里面的解决思路,请使用步骤的方式描述出来

以添加删除书籍为例

步骤一:获取用例的书籍ID

步骤二:将书籍ID 设置为变量

步骤三:删除书籍时调用这个变量
6、在postman中,怎么调用变量

{{变量}}
7、接口断言需要是那方面

(1)业务状态码

(2)协议状态码

(3)响应数据
8、怎么理解协议状态码:404

请求资源并不存在
9、如果一个接口访问时400,排查思路时什么?

(1)请求参数

(2)请求参数类型(例如int)

(3)特定类型(例如性别)

(4)请求头(缺少)
10、怎么理解同步通信

同步请求:客户端向服务端发送请求,服务端必须做出响应

缺点:客户端发送请求,服务端迟迟不作出回应  

           客户端发送的请求为计算量大或逻辑存在问题,请求就会堵塞,后面就会积压

11、怎么理解异步通信

在异步的交互中,客户端和服务端互相不需要关注对⽅的存在,只需要关注对应的MQ的消息,客户端与服务端的交互主要是会通过MQ的消息中间作为消息的传递来进⾏交互的。
12、怎么理解cookie,session,token

cookie请求:客户端发送登录请求,生成一个cookie凭证,服务端通过set-cookie把cookie再返给客户端,客户端再将请求头cookie带上返回的凭证发送给服务端。
session请求:客户端发送登录信息登录成功后生成session ID,set-cookie将session ID给客户端,请求头cookie带上session ID再给服务端。
token请求:本质上和session的原理差不多。用户登录系统生成token,每次生成的token都是随机的字符串,

cookie存储在客户端session、token存储在服务端

都用来验证信息正确性

13、请按步骤的方式描述session的请求流程

已请求登录为例:

第一步:客户端发送登录请求信息,服务端生成sessionID

第二步:服务端将sessionID返回给客户端

第三步:客户端在cookie中带上sessionID发送给服务端,服务端核对sessionID的真确性
14、如果发送请求,协议状态码返回500的错误,怎么解决?

代码出错,查代码。
15、怎么理解协议状态码和业务状态码

HTTP 状态码是 HTTP 协议的工程实现。如果服务器端的实现不符合协议的规定,我们可以认为 服务器的 HTTP 实现是错误的

业务状态码是服务端给出的关于业务描述的码,用于客户端明确得知本次请求的资源的状态情况

 

UI自动化测试:
1、常用的元素定位有那几种方法,请举例说明

class By(object):

ID="id"

XPATH="xpath"

LINK_TEXT="link text"

PARTIAL_LINK_TEXT="partial link text"

NAME="name"

TAG_NAME="tag name"

CLASS_NAME="class name"

CSS_SELECTOR="css selector"

2、单个元素定位与多个元素定位的区别是什么?

单个元素定位:find_element

多个元素定位:find_elements

单个元素定位和多个元素定位的区别就是,单个元素定位返回是单个元素,多个元素定位返回的是包含多个元素的一个列表。
3、如果是iFrame的框架,如何来定位里面的元素属性的对象

或者id定位:

driver.switch_to.frame('login_frame')

使用索引:

driver.switch_to.frame(0)

4、怎么理解页面对象设计模式

在 UI 自动化测试中对页面元素的处理引入面向对象思想。从测试用例中剥离页面元素操作,并以页面为单位的类将页面元素上的定位方式及操作进行封装。
5、怎么理解显式等待和隐式等待

显示等待:显式等待指定某个条件,然后设置最长等待时间。如果在这个时间还没有找到元素,那么便会抛出异常了。

隐式等待:等待时间完成即可(单位:秒)默认等待时间为0
6、在测试中遇到多窗口,具体怎么解决,请描述具体的步骤和编写具体的案例代码

1、循环所有的窗口
2、判断是否是当前窗口
3、如果不是,切换到新的窗口
4、在新的窗口进行操作
5、关闭新的窗口
6、切换到最开始窗口

'''注册网易邮箱超链接'''
driver=webdriver.Chrome()
driver.maximize_window()
driver.get('https://mail.163.com/')
oldwindow=driver.current_window_handle
driver.find_element_by_xpath('//*[@id="normalLoginTab"]/div[1]/div[2]/a[1]').click()
t.sleep(3)
allwindow=driver.window_handles
for window in allwindow:
    if oldwindow!=window:
        driver.switch_to.window(window)
        t.sleep(3)
driver.find_element_by_class_name('j-register').click()
t.sleep(3)
dtest=driver.find_element_by_xpath('/html/body/div[2]/div/div/div[2]/div[2]/div[1]/div[2]')
assert dtest.text=='邮箱地址不能为空'
driver.switch_to.window(oldwindow)
t.sleep(2)
driver.quit()

测试基础理论:
1、bug完整的生命周期

发现BUG-->提交BUG-->指派BUG-->研发确认BUG-->研发去修复BUG-->回归验证BUG-->是否通过验证-->关闭BUG
2、编写测试用例的要素是什么?

⽤例ID;
⽤例名称;
测试⽬的;
测试级别;
参考信息;
测试环境;
前提条件;
测试步骤;
预期结果;
设计⼈员。

3、怎么理解黑合测试,白盒测试

黑盒测试:功能测试

白盒测试:
可以看见程序的内部的结构关系,是代码级别测试,针对函数或者方法、逻辑准确性的测试。
这些测试就包含了针对程序判断逻辑,判断分⽀,判断循环,程序流程⾛向的测试。

4、测试按阶段划分,主要分为那几个阶段

单元测试
集成测试
系统测试
验收测试


5、怎么理解等价类和边界值

等价类是对输入数据 进行测试,分有效等价类和无效等价类 ,
如:年龄分数在0-100之间,有效等价类就是0-100之间的数字
无效等价类 就是,小于0,大于100的数字,
边界值是对等价类的补充
6、请描述一个完整的测试流程

  单元测试框架:
1、unittest与pytest的框架

 

2、unittest的常用组件有哪些

TestCase:测试用例,测试用例里面会有很多测试方法,是单元测试中最小维度的测试行为。

TestSuite:测试套件,是测试用例的集合。

TestFixure:测试固件,测试准备工作和收尾工作,打开和关闭浏览器,链接和关闭数据库,可有可无

TestRunner:测试运行器,运行测试用例。

TestReport:将测试结果呈现给用户,生成测试报告。

3、unittest中怎么理解测试固件

 setUp() 方法用于初始化测试固件;而 tearDown() 方法用于销毁测试固件

setUp() :最开始执行

tearDown():最后执行

 

4、怎么理解setUp(),tearDown()与类测试固件的测试

局别:

setUp(),tearDown()每次都要执行
类测试固件只执行一次

5、在unittest测试框架中,加载所有的测试模块使用到的方法是什么?具体参数是什么?

用到的方法:discover

具体参数

路径参数,测试文件名

6、在unittest中使用那个库来生成对应的测试报告

import HTMLTestRunner

7、一个完整的测试用例包含哪些步骤

拿到测试需求 -> 分析需求(画思维导图) -> 编写⽤例 -> 划分⽤例优先级
8、怎么理解参数化

解决的问题:

测试进行相同的步骤,只是输入的数据不同,其他操作都是一样的,这样需要写很多测试用例,参数化可以解决这种问题,让代码更加简洁。

9、一个完整的自动化测试用例包含哪些?

(1)测试准备

(2)测试用例

(3)测试收尾
10、测试用例之间可以依赖吗?

不可以,测试用例是单独的

posted @ 2021-08-27 09:59  星德川  阅读(157)  评论(0)    收藏  举报