python自动化

python全栈面试题大纲
一、解释一下python的特性之一多态,以及super()?请举例说明。
二、python的进程、线程有什么区别?协程与线程呢?
三、python自动化分层:接口自动化框架你是如何设计的?
四、pytest框架与unittest框架比较?
五、pytest的特性,优势?使用了哪些功能?
六、python类中的实例方法、类方法、静态方法区别?
七、在python作接口自动化测试中,怎么解决参数关联?
八、jmeter、loadrunner、locusts性能测试工具的区别?
九、UI自动化中如何作到上下两个用例不受上个用例失败的影响?
十、pytest框架中如何实现app自动化测试只启动一次app?
十一、UI自动化封装page基类,如何作到截图并保存测试结果?
十二、APP自动化测试多设备并发启动测试?
十三、微服务的优点是什么?它的通讯技术是什么?
十四、怎么理解装饰器?有没有用过python的装饰器?
十五、通常都是问列表和元组有什么不一样?
十六、UI自动化如何作到两个用例之间相互独立不依赖,即便上一个用例失败也不会影响到下一个用例的执行?

一、解释一下python的特性之一多态,以及super()?请举例说明。

先来讲说继承,假使你须要写一个类来实现某些功能,而其中实现的方法,偏偏是别人的类已经实现了的方法,
这个时候咱们须要直接把它拿过来用,该怎么作呢?面向对象里的继承就是父类的相关属性和方法,
能够被子类继承重复使用,子类没必要再在本身的类里面从新定义,而对于本身类里面须要用到的新的属性和方法,
子类须要本身扩展。

继承最大的好处既子类能够获取父类的全部功能。
经过继承能够最大限度的将通用的功能放入基类中减小代码的维护成本。
super 用于继承父类的方法、属性。
super 是新式类中才有的,因此 Python2 中使用时,要在类名的参数中写 Object。Python3 默认是新式类,不用写,直接可用。
使用 super 能够提升代码的复用性、可维护性。修改代码时,只需修改一处。
多继承,若是有多个父类存在相同的方法或者变量,那么只继承第一个父类的

再来讲说多态,多态包含了重载和重写:多态以 继承 和 重写 父类方法 为前提
同一个方法在不一样的类中最终呈现出不一样的效果,即为多态!这句话怎么理解?
假设A为基类、B继承A、C也继承A,且ABC都有同一个方法名,那么在建立对象调用的时候,每一个方法实现的功能或者叫职能不一样的状态,能够称之为多态,
也能够理解成BC继承了A,而且重写了同一个方法实现不一样的功能,
亦可如此举例:两个类不存在继承关系,可是拥有同一个方法名,那么该方法实现的效果不尽同样,
那么这也是多态<可是并非重写>。重点在于相同的方法实现不同的功能。

重写<必须存在继承>:子类继承了父类<基类>,当父类的方法不知足现有需求时,在子类中定义与父类同名的方法,
进行重写覆盖父类的方法,在建立子类的对象调用该方法时,而是子类的方法;
假设方法名不同,就没法覆盖,从而是两个不一样类的不一样方法。因此区分是否重写父类方法的标准是调用该方法申明的类对象来决定。

重载:这个就好理解了,跟继承无关<能够在继承中实现>,那么同名不一样参即为重载,
再同类中实现,若是是继承的话,即为重写!

所谓的面向对象就是将咱们的程序模块化,对象化,把具体事物的特性属性和经过这些属性来实现一些动做的具体方法放到一个类里面,这就是封装。

二、python的进程、线程有什么区别?协程与线程呢?

1)区别:
① 地址空间和其它资源(如打开文件):进程之间相互独立,同一进程的各线程之间共享。某进程内的线程在其它进程不可见。
② 通讯:进程间通讯 IPC,线程间能够直接读写进程数据段(如全局变量)来进行通讯——须要进程同步和互斥手段的辅助,以保证数据的一致性。
③ 调度和切换:线程上下文切换比进程上下文切换要快得多。
④ 在多线程操做系统中,进程不是一个可执行的实体。
2)使用场景:同时操做一个对象的时候,好比操做的是一个全局变量,我用线程,由于全局变量是全部线程共享的。
进程是资源分配的单位
线程是操做系统调度的单位
进程切换须要的资源很最大,效率很低
线程切换须要的资源通常,效率通常(固然了在不考虑GIL的状况下)
协程切换任务资源很小,效率高
多进程、多线程根据cpu核数不同多是并行的,可是协程是在一个线程中 因此是并发

三、python自动化分层:接口自动化框架你是如何设计的?

UI自动化框架主要的核心框架就是分层+PO模式:
基础封装层BasePage
PO页面对象层
TestCase测试用例层
日志处理模块、ini配置文件读取模块
unittest+ddt/pytest数据驱动模块,jenkins持续集成模式组成。
HTMLTestRunner、allure测试报告模块

接口自动化框架大都与UI自动化框架分层一致:
封装requests请求类,实现http经常使用的请求方法及入参数据格式处理:post、get、表单或json数据
TestCase测试用例层
日志处理模块、数据库读取模块、配置文件读取模块、Excel文件读取模块
unittest+ddt/pytest数据驱动模块,jenkins持续集成模式组成
HTMLTestRunner、BeautifulReport等测试报告模块

PO是Page Object 模式的简称,即页面对象设计模式,它是一种设计思想,意思是,把一个页面,当作一个对象,页面的元素和元素之间操做方法就是页面对象的属性和行为,
PO模式通常使用三层架构,分别为:基础封装层BasePage,PO页面对象层,TestCase测试用例层。

四、pytest框架与unittest框架比较?

先从几个方面入手对比:
用例设计方面:
unittest
测试类必须继承unittest.TestCase
测试函数必须以“test_”开头
使用defaultTestLoader.descover()加载测试用例时,测试模块( py文件)名称要以test开头
pytest
测试模块文件的文件名必须以"test_ “开头或者以” _test"结尾  
测试类命名必须以"Test"开头  
测试函数名必须以"test"开头  
测试类里面不能使用" init "方法html

断言,unittest框架的assert相关方法,pytest是assert关键字+表达式python

用例先后置处理:unittest有setup、teardown每一个用例先后执行一次,类方法:setupclass、teardownclass每一个测试类先后执行一次
pytest经过fixture设置不一样做用域:session整个测试执行先后一次、module只对模块生效及py测试文件、class只对类级别生效、function默认级别对测试用例方法生效;mysql

参数化的对比:unittest结合ddt模块,在测试类上面使用@ddt装饰,测试用例的方法上使用@data()来实现数据驱动
pytest经过装饰器@pytest.mark.parametrize来实现数据驱动web

生成报告的方式:unittest经过htmltestrunner、BeautifulReport
pytest经过pytest-html生成html格式报告,也能够与allure集成优美的allure测试报告面试

五、pytest的特性,优势?使用了哪些功能?

pytest是一个很是成熟的全功能的Python测试框架,主要有如下几个特色:
简单灵活,容易上手,支持参数化

可以支持简单的单元测试和复杂的功能测试,还能够用来作selenium/appnium等自动化测试、
接口自动化测试(pytest+requests)pytest具备不少第三方插件,而且能够自定义扩展,

比较好用的如:

  • pytest-selenium(集成selenium)、
  • pytest-html(完美html测试报告生成)、
  • pytest-rerunfailures(失败case重复执行)、
  • pytest-xdist(多CPU分发)等

测试用例的skip和xfail处理
能够很好的和jenkins集成
report框架----allure 也支持了pytest

六、python类中的实例方法、类方法、静态方法区别?

普通实例方法:

  • 第一个参数必需要默认传实例对象self,它表示一个具体的实例自己;实例方法只能被实例对象调用;

staticmethod静态方法

  • 那么就能够无视这个self,而将这个方法当成一个普通的函数使用,能够被类或类的实例对象调用;参数没有要求。

classmethod类方法

  • 它的第一个参数不是self,是cls,它表示这个类自己;能够被类或类的实例对象调用;第一个参数必需要默认传类,通常习惯用cls。

七、在python作接口自动化测试中,怎么解决参数关联?

解决方案有多种,这里简单介绍经常使用的两种,以用户登陆-后面接口请求数据为例;
分析:后面的接口请求数据须要获取用户的登陆态token,鉴权正确后才能正常访问数据;
方案一:将该登陆接口放在接口测试用例excel第一个请求的行,会在测试用例脚本中优先处理,并将token提取并保存,以供后面全部接口须要鉴权时使用,让用户能够正常请求;
方案二:将该登陆接口放在脚本中,使用框架中自带的前置处理函数,请求并提取token保存于变量中,以供后面的接口进行请求;

那么token信息如何保存呢?
一是保存文件,在读取使用<显然这个操做有点废轱辘>,二是设置为全局变量,三是设置为类属性<推荐使用这种方式,方便灵活利于参数替换>

八、jmeter、loadrunner、locusts性能测试工具的区别?

在本人直观使用体验来区分:
jmeter免费开源,社区活跃,是一个很是强大的性能测试工具,若是说以前它的结果报表不足以媲美loadrunner,
那么如今丝绝不逊色,各类插件及监控框架应运而生,彻底弥补了这一不足。
Loadrunner大型商用工具,初学者的摇篮,其功不可没,一开始强大的录制功能,更是为全部初学者提供了便利,
各大组件各司其职,尤为强大的分析数据报表能力无人能出其右。我的钟爱!
至于locusts,首先要有必定的代码基础,虽然能够拿着模版一阵捣鼓,最终却不能更好的发挥利用,
那么这也是浪费,再有其不出色的测试结果报告,也很难被普遍使用,高手例外!

至于其中性能测试所关注的指标,如:TPS、平均响应时间、并发用户数,这类概念在网络博客中已经糜烂,
看过以后的理解也就只能到理解这一步,殊不知其会受到哪些因素的影响而发生改变。
TPS:翻译过来就是每秒经过事务数,随着并发用户的递增,tps也该随之增加,若是出现拐点就须要分析具体原因了。
avg:平均响应时间,在不少时候做用不大,倒不如其余90/95/99这些响应时间更实际,可是它却能够做为分析性能结果的参考。
并发用户数:区别于用户总数、在线用户数,它指用户在同一时间发起的行为的用户的数量。

九、UI自动化中如何作到上下两个用例不受上个用例失败的影响?

这个问题该怎么回答?仁者见仁智者见智!!!算法

十、pytest框架中如何实现app自动化测试只启动一次app?

@pytest.fixture装饰器定义一个函数,能够在pytest框架中被调用,其中默认scope的做用域是function,其它还有:session、module 、class;
若是想整个框架的测试用例执行只启动一次app就采用session级别的,若是是指定那些模块的测试用例执行则使用module、单个测试类就是class、function默认是测试用例方法级别sql

十一、UI自动化封装page基类,如何作到截图并保存测试结果?

首先selenium提供了save_screenshot_as_file等截图保存的方法,咱们二次封装时设置好保存路径、命名规则而且结合allure增长到allure报告中展现,
再是二次封装的查找页面元素的方法,try…except处理异常模块中进行调用,当没有找到该元素时进行截图保存便可。数据库

十二、APP自动化测试多设备并发启动测试?

这可能须要使用到多线程并发处理,或者selenium gird分布式执行测试,须要深刻了解到它的原理。json

十三、微服务的优点是什么?它的通讯技术是什么?

微服务的优点:我没有微服务开发经验,可是工做中不免会接触到这类微服务架构,实际中感触,它很轻量、服务拆分利于快速跟踪反馈问题<隔离性>,同时开发的学习成本也相应下降。
http通信、RPC(Thrift, Dubbo)、消息通信<mq等消息框架>、事件驱动通信<异步调用Kafka>设计模式

十四、怎么理解装饰器?有没有用过python的装饰器?

这个问题有点难度!!!
第一要明白,装饰器自己就是一个函数,不说的花里胡哨,再者须要明白嵌套函数以及参数的使用。

十五、通常都是问列表和元组有什么不一样?

(1)获取元素的方式不一样。列表经过索引值获取,字典经过键获取。
(2)数据结构和算法不一样。字典是hash算法,搜索的速度特别快。
(3)占用的内存不一样。

十六、UI自动化如何作到两个用例之间相互独立不依赖,即便上一个用例失败也不会影响到下一个用例的执行?

留给各位看官来解答一下!!!

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值