Python自动化测试面试题目

树袋大熊 2023-05-10 10:57:09
Python 自动化测试面试题目

1、super 是干嘛用的?在 Python2 和 Python3 使用,有什么区别?为什么要使用 super?请举例说明。答:

super 用于继承父类的方法、属性。

super 是新式类中才有的,所以 Python2 中使用时,要在类名的参数中写 Object。Python3 默认是新式类,不用写,直接可用。

使用 super 可以提高代码的复用性、可维护性。修改代码时,只需修改一处。

代码举例:

.

classbaseClass:

.

.

deftest1(self, num):

.

.

print(num)

.

.

.

.

classsonClass(baseClass):

.

.

deftest2(self):

.

.

super().test1(num)

.

.

.

.

son = sonClass()

.

.

son.test1(11)

.

2、阅读以下代码,推导最后结果:

.

defadd(n, i):

.

.

returnn+i

.

.

.

.

deftest():

.

.

foriinrange(4):

.

.

yieldi

.

.

.

.

g = test()

.

.

.

.

fornin[1,10,5]:

.

.

g= (add(n, i)foriing)

.

.

.

.

print(list(g))# 结果是 [15, 16, 17, 18]

.

答:所有的结果都是生成器表达式,不调用它,不从里面取值,就不干活。附上我的推导过程:

.

n =1

.

.

g = (add(n,i)foriintest())

.

.

#print(list(g))# [1, 2, 3, 4]

.

.

.

n =10

.

.

g = (add(n,i)foriin(add(n,i)foriintest()))

.

.

#print(list(g))# [20, 21, 22, 23]

.

.

.

n =5

.

.

g = (add(n,i)foriin(add(n,i)foriin(add(n,i)foriintest())))

.

.

g = (add(n,i)foriin(add(n,i)foriin(5,6,7,8)))

.

.

g = (add(n,i)foriin(10,11,12,13))

.

.

.

g = (15,16,17,18)

.

.

print(list(g))# [15, 16, 17, 18]

.

3、快速编写前端 HTML、JavaScript、Vue 代码。

答:

HTML、JavaScript 代码:

.

.

.

<htmllang="en">

.

.

<head>

.

.

<metacharset="utf-8">

.

.

head>

.

.

<body>

.

.

<h1id="title">xxx公司h1>

.

.

<p>xxx公司是一家......p>

.

.

.

.

<divid="mybox">

.

.

<h1>{{a}}h1>

.

.

<inputtype="button"value="按我"v-on:click="add()">

.

.

div>

.

.

<scripttype="text/javascript"src="public/bundle.js">script>

.

.

body>

.

.

html>

.

.

<script>

.

.

vartitle =document.getElementById("title");

.

.

title.onclick=function() {

.

.

alert('我爱xxx公司,祝我面试成功');

.

.

}

.

.

script>

.

Vue 代码编写:

.

importVuefrom"vue";

.

.

newVue({

.

.

el:"#mybox",

.

.

data: {

.

.

a:100

.

.

},

.

.

methods: {

.

.

add:function(){

.

.

this.a++;

.

.

}

.

.

}

.

.

});

.

4、L = [1, 2, 3, 11, 2, 5, 3, 2, 5, 3],用一行代码得出 [11, 1, 2, 3, 5]。答:list(set(L))

5、L = [1, 2, 3, 4, 5],L[10:]的结果是?答:空列表(当时有点紧张,一直在“空列表”和“索引超出范围”两个答案之间徘徊)。

6、L = [1, 2, 3, 5, 6],如何得出 '12356'?答:注意,个人觉得这个题有坑,列表的元素不是字符串,所以不能''.join(L)。以下是过程:

.

s =''

.

.

foriinL:

.

.

s= s + str(i)

.

.

.

.

print(s)# 12356

.

.

print(type(s))#

.

7、列表和字典有什么区别?答:一般都是问列表和元组有什么不同。          (1)获取元素的方式不同。列表通过索引值获取,字典通过键获取。          (2)数据结构和算法不同。字典是hash算法,搜索的速度特别快。          (3)占用的内存不同。

8、如何结束一个进程?答:(1)调用terminate方法。          (2)使用subProcess模块的Popen方法。使用简单,具体用法,这里不展开。

9、进程、线程有什么区别?什么情况下用进程?什么情况下用线程?答:(1)区别:

① 地址空间和其它资源(如打开文件):进程之间相互独立,同一进程的各线程之间共享。某进程内的线程在其它进程不可见。

② 通信:进程间通信 IPC,线程间可以直接读写进程数据段(如全局变量)来进行通信——需要进程同步和互斥手段的辅助,以保证数据的一致性。

③ 调度和切换:线程上下文切换比进程上下文切换要快得多。

④ 在多线程操作系统中,进程不是一个可执行的实体。

(2)使用场景:同时操作一个对象的时候,比如操作的是一个全局变量,我用线程,因为全局变量是所有线程共享的。

10、什么是ORM?为什么要用ORM?不用ORM会带来什么影响?答:

ORM框架可以将类和数据表进行对应,只需要通过类和对象就可以对数据表进行操作。

通过类和对象操作对应的数据表,类的静态属性名和数据表的字段名一一对应,不需要写 SQL 语句。

ORM另外一个作用,是根据设计的类生成数据库中的表。

11、写一段代码,ping 一个 ip地址,并返回成功、失败的信息。答:使用 subProcess 模块的 Popen 方法(使用简单,具体用法,这里不展开)。

12、说说接口测试的流程,介绍一下 request 有哪些内容。答:(1)流程:获取接口文档,依据文档设计接口参数,获取响应,解析响应,校验结果,判断测试是否通过。          (2)request 内容:

① 封装了各种请求类型,get、post 等;          ② 以关键字参数的方式,封装了各种请求参数,params、data、headers、token 等;          ③ 封装了响应内容,status_code、json()、cookies、url 等;          ④ session 会话对象,可以跨请求。

13、ui自动化,如何做集群?答:Selenium Grid。

14、移动端 UI 自动化,经常会自动安装 2 个程序,你知道那两个程序是什么东西不?答:守护精灵,和 Python 并发编程中的 daemon 原理一样,父进程/父线程的代码执行完毕,它就终止,要写在 start 方法前面。另外,要找到配置文件,注释掉两行代码。

15、说5个以上 Linux 命令。答:

16、介绍一下你在这个项目中是如何使用 Jenkins 的。答:,说了基本操作,比如定时构建执行代码。

17、说说你对敏捷模式的认识。答:小步快跑,拥抱变化。测试中,可以通过行为驱动测试,有个框架 lettuce 可以用。

18、了解过 Docker 不?答:了解,没用过。然后说了下对 Docker 大概的认识、优势。

一、json和字典dict的区别

首先python里面的基础数据类型有:int、str、 float、list、bool、tuple、dict、set这几种类型,里面没json这种数据类型。

JSON( 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

由于你的代码是python写的(也有可能是php,java,c,ruby等语言),但是后端接口是java写的(也有可能是其它语言),不同的语言数据类型是不一样的(就好比中国的语言和美国的语言数据类型也不一样,中国的一般说一只羊,一头牛,美国都是 a /an这种单位),所以就导致你提交的数据,别的开发语言无法识别,这就需要规范传输的数据(传输的数据都是一个字符串),大家都遵循一个规范,按一个标准的格式去传输,于是就有就json这种国际化规范的数据类型。

json本质上还是字符串,只是按key:value这种键值对的格式来的字符串b = '{"a": 1, "b": 2, "c": true}'

二、测试的数据放在哪?

1.对于账号密码,这种管全局的参数,可以用命令行参数,单独抽出来,写的配置文件里(如ini)          2.对于一些一次性消耗的数据,比如注册,每次注册不一样的数,可以用随机函数生成          3.对于一个接口有多组测试的参数,可以参数化,数据放yaml,text,json,excel都可以          4.对于可以反复使用的数据,比如订单的各种状态需要造数据的情况,可以放到数据库,每次数据初始化,用完后再清理          5.对于邮箱配置的一些参数,可以用ini配置文件          6.对于全部是独立的接口项目,可以用数据驱动方式,用excel/csv管理测试的接口数据          7.对于少量的静态数据,比如一个接口的测试数据,也就2-3组,可以写到py脚本的开头,十年八年都不会变更的

三、什么是数据驱动,如何参数化?

四、下个接口请求参数依赖上个接口的返回数据

这个很容易,不同的接口封装成不同的函数或方法,需要的数据return出来,用一个中间变量a去接受,后面的接口传a就可以了

可以参考登录的cookie或token

五、依赖于登录的接口如何处理

参考requests的方法

六、依赖第三方的接口如何处理

这个需要自己去搭建一个mock服务,模拟接口返回数据

mock服务搭建需要自己能够熟练掌握,面试会问你具体如何搭建 ,如何模拟返回的数据,是用的什么格式,如何请求的

七、不可逆的操作,如何处理,比如删除一个订单这种接口如何测试

此题考的是造数据的能力,接口的请求数据,很多都是需要依赖前面一个状态的          比如工作流这种,流向不同的人状态不一样,操作权限不一样,测试的时候,每种状态都要测到,就需要自己会造数据了。          平常手工测试造数据,直接在数据库改字段状态。那么自动化也是一样,造数据可以用python连数据库了,做增删改查的操作          测试用例前置操作,setUp做数据准备          后置操作,tearDown做数据清理

八.接口产生的垃圾数据如何清理

跟上面一样,造数据和数据清理,需用python连数据库了,做增删改查的操作          测试用例前置操作,setUp做数据准备          后置操作,tearDown做数据清理

九.一个订单的几种状态如何全部测到,如:未处理,处理中,处理失败,处理成功

跟上面一样,也是考察造数据,修改数据的状态

十、get和post的区别

十一、post请求的四种参数形式是什么

application/x-www-form-urlencoded

multipart/form-data

application/json

text/xml

十一、公司有用到第三方服务,出了问题,打电话给第三方,第三方不承认,这时候日志又显示不到错误,应该怎么处理

1、单独调用第三方服务,查看返回结果;

2、引入mock机制,假如正常返回的情况下,测试我们的系统是否存在问题;

3、建议开发增加日志,详细记录调用第三方接口的过程,记录调用前接口入参,返参等信息;

十二、接口自动化中的关联怎么处理?

将请求返回的结果反射到类属性中,使用setattr()函数,下个请求调用这个类

十三、自动化测试怎么校验结果?

使用断言,预期结果值和实际结果值进行对比;

十四、自动化使用的测试框架是什么?简述自动化框架的设计、维护

1、自动化使用的测试框架:

语言:python

测试框架:unittest(assertEqual,assertTure,assertFalse)

接口调用:requests(API非常简洁)

数据驱动:ddt(装饰器:ddt类,unpack测试方法装饰器解包时候,data测试方法装饰器,可迭代的数据类型)

注:普通用户,管理用户,数据库,配置文件---基础数据

数据管理:openpyxl(excel,CSV,json,yaml,txt)

数据库交互:pymysql ---根据数据库选择相应的第三方模块来完成

数据格式的转换:eval,json

日志处理:logging ---清晰的执行过程,快速定位问题

持续集成:Jenkins(通过插件HTML Publisher/git/Email Extension)进行自动构建,生成HTML,发送邮件

2、自动化框架的设计、维护:

1、数据与代码分离,(数据驱动)==数据驱动框架==

例如:参数不一样,响应不一样

2、结构分层(数据层,用例层,逻辑性)

逻辑层:公用的方法,封装起来,避免用例层的代码冗余

数据层:例如,设计Excel,excel读取,参数化替换等

用例层:存放测试用例

十五、在接口自动化测试中都用到了哪些包:

pymysql:连接数据库

ddt:

requests:

urllib:

xlrd:

xlwt:

xlutils:

十六、根据什么来做断言?

1、协议状态码: 200,404,503    2、业务状态码:status:0   3、业务数据

十七、具体的在这个项目中自动化怎么应用到实际的,您对自动化结果的分析

完成所有的自动化测试框架的设计和实现后,进行接口测试,然后集成到jenkins,配置定时执行,生成html报表,查看测试通过率,查看接口的功能

每次发版时,进行回归测试,新功能开发未提测前

十八、做好测试计划的关键是什么?

明确测试目的,增强测试计划的实用性,保证测试用例的实用性和覆盖率,完全需求文档和规格指标书等,严格界定测试周期,测试轮次,测试覆盖模块等

十九、super 是干嘛用的?在 Python2 和 Python3 使用,有什么区别?为什么要使用 super?请举例说明。

super 用于继承父类的方法、属性。super 是新式类中才有的,所以 Python2 中使用时,要在类名的参数中写 Object。Python3 默认是新式类,不用写,直接可用。使用 super 可以提高代码的复用性、可维护性。修改代码时,只需修改一处。

父类:

class Car():

def __init__(self,make,model,year):

self.make=make

self.model=model

self.year=year

def .....

class ElectricCar(Car):

def __init__(self,make,model,year):       --------初始化父类的属性

super().__init__(make,model,year):

def ....

子类就可以使用父类的属性

二十、L = [1, 2, 3, 11, 2, 5, 3, 2, 5, 3],用一行代码得出 [11, 1, 2, 3, 5]

答:list(set(L))

二十一、L = [1, 2, 3, 4, 5],L[10:]的结果是?

答:空列表[]

二十二、list= [1, 2, 3, 4],如何得出 '1234'?

list=[1,2,3,4]          list2=''foriinlist:              list2=list2+str(i)print(list2)

0 阅读:22