python自动化测试的面试+笔试经历
python基础
1.range与xrange的区别
range和xrange都是在循环中使用,输出结果一样。 range返回的是一个list对象,而xrange返回的是一个生成器对象(xrange object)。 xrange则不会直接生成一个list,而是每次调用返回其中的一个值,内存空间使用极少,因而性能非常好。 注意:Python 3.x已经去掉xrange,全部用range代替。
2.python中的字典,至少用两种方法取值与赋值
dict = {'name':'zhangsan','age':'18'} # 字典中赋值的两种方法 dict['sex'] = '男' dict = {'education':'本科'} # dict['key'] = 'value' 这种给字典赋值的方式不会改变字典的ID;dict = {'key':'value'} 这种给字典赋值的方式会改变字典的ID; # 从字典中取值的两种方法 print(dict['name'],dict.get('name')) # 直接使用dict['key']时,如果对应的key不存在时,会导致报错keyerror,提示没有该key的值; # 而是用dict.get('key') 则不会产生错误,解析器返回值如果存在就返回相应的value, 如果不存在就返回None.
3.python的多线程是在什么情况下使用,一般一个进程下是否支持多线程?
几乎所有的操作系统都支持同时运行多个任务,一个任务通常就是一个程序,每个运行中的程序就是一个进程。当一个程序运行时,内部可能包含多个顺序执行流,每个顺序执行流就是一个线程。
所有运行中的任务通常都会对应一个进程(Process)。当一个程序进入内存运行时,即变成一个进程。进程是处于运行过程中的程序,并且具有一定的独立功能。进程是系统进行资源分配调度的一个独立单位。
一个进程可以拥有多个线程,一个线程必须有一个父进程。线程可以拥有自己的堆栈、自己的程序计数器和自己的局部变量,但不拥有系统资源,它与父进程的其他线程共享该进程所拥有的全部资源。
线程在程序中是独立的,并发的执行流,而且线程的划分尺度小于进程,使得多线程程序的并发性高。进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高程序的运行效率。
4.a > b ? a :b 转化为Python的写法
a if a > b else b
三元运算符需要三个操作数。
语法为:条件表达式?表达式1:表达式2。
说明:问号前面的位置是判断的条件,判断结果为bool型,为true时调用表达式1,为false时调用表达式2。
5.python的字符串进行去重排序
s1 = set(s) l1 = list(s1) l1.sort() print(''.join(l1))
6.is 与 == 区别
is判断的是a对象是否就是b对象,是通过id来判断的。
==判断的是a对象的值是否和b对象的值相等,是通过value来判断的。
7.1+2+3+4+.....+100
s = 0 for i in range(1,101): s += i print(s)
8.pass语句的作用
pass语句什么也不做,一般作为占位符或者创建占位程序,pass语句不会执行任何操作。
9.[1,2,3] + [4,5,6]
[1, 2, 3, 4, 5, 6]
10、sort和sorted的区别
sort是应用在list上的方法,sorted可以对所有可迭代的对象(包括字符串)进行排序操作。
对于一个无序列表a,调用a.sort(),对a排序后返回a,sort()函数修改待排序的列表内容。
而对于一个无序列表a,调用sorted(a),对a排序后返回一个新的列表,对a无影响。
11、Python中copy和deepcopy中的区别
deepcopy:深度复制,意思是完全复制然后变成一个新的对象,复制的对象和被复制的对象没有任何关系,彼此之间无论怎么改变都相互不影响。 copy:浅度复制,意思是并不会产生一个独立的对象单独存在,他只是将原有的数据块打上一个新标签,所以当原对象被改变的时候,新的对象也就会发生变化。 但是浅度复制后,当原对象的父对象发生改变时,新对象不变;当原对象的子对象发生改变时,新对象也发生改变。 import copy e = [1,2,3,4,['q','w']] f = copy.copy(e) g = copy.deepcopy(e) e.append('k') e[4].append(22) print(e) print(f)
12、python中的装饰器?装饰器的作用?
装饰器是修饰其他函数的功能的函数,他们有助于让我们的代码更简短。 装饰器本质上是一个 Python函数或类,它可以让其他函数或类在不需要做任何代码修改的前提下增加额外功能,装饰器的返回值也是一个函数/类对象。
它经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验
等场景,装饰器是解决这类问题的绝佳设计。有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码到装饰器中并继续重用。 概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。
13、python是否支持多态?
多态指的是一类事物有多种形态,(一个抽象类有多个子类,因而多态的概念依赖于继承);多态性是指具有不同功能的函数可以使用相同的函数名,这样就可
以用一个函数名调用不同内容的函数。在面向对象方法中一般是这样表述多态性:向不同的对象发送同一条消息,不同的对象在接收时会产生不同的行为(即方
法)。也就是说,每个对象可以用自己的方式去响应共同的消息。所谓消息,就是调用函数,不同的行为就是指不同的实现,即执行不同的函数。
14、python的匿名函数?
对lambda函数,它其实是一个类似于def的函数,只不过lambda是一个不需要定义函数名的匿名函数。当我们在有些时候,需要做一些简单的数学计算时,如果定
义一个def函数显得过于繁琐,但是不定义一个类似“函数”的对象,又显得不太方便,所以这里lambda函数就派上用场了。
15、python是否支持多重继承?
在Python中是支持多重继承的,也就是我们可以为一个类同时指定多个父类。可以在类名的()后边添加多个类,来实现多重继承。
多重继承,会使子类同时拥有多个父类,并且会获取到所有父类中的方法。
在没有特殊的情况,应该尽量避免使用多重继承,因为多重继承会让我们的代码过于复杂。如果多个父类中有同名的方法,则会先在第一个父类中寻找,然后找第二个,
最后找第三个。前边父类的方法会覆盖后边父类的方法
16、python的接口自动化测试框架说明
接口自动化项目框架说明: common目录:用来存放的是自己封装的类(操作Excel类、日志类、配置文件、发送邮件、操作数据库的类) con目录:用来存放配置文件(测试环境、发布环境、生产环境) librarys目录:用来存放已封装好的模块(HTMLtestrunner、ddt),如果需要的话,可以对这些类进行二次开发 logs目录:用来存放日志文件 reposts目录:用来存放生成的的测试报告 data目录:用来存放测试用例数据 testcases目录:用来存放所有的测试用例模块 测试用例的执行,创建一个testsuite.py测试集合文件 1、创建一个测试集合 suite = unittest.TestSuite() 2、创建一个loader,通过目录将测试用例加载至测试集合中 loader = unittest.TestLoader() suite.addTest(loader.discover(TESTCASES_DIR)) 3、打开一个文件,生成测试报告,执行测试集合 runner.run(suite) with open(os.path.join(REPORTS_DIR,reportname),'wb') as f: runner = HTMLTestRunner(stream = f, verbosity = 2, title = reporttitle, description = reportdescription, tester = reporttester) runner.run(suite)
持续集成:
持续集成指的是,频繁地(一天多次)将代码集成到主干。
(1)快速发现错误。
(2)防止分支大幅偏离主干。
jenkins的作用?以及你对jenkins的了解?
1.持续的软件版本发布/测试项目。 2.监控外部调用执行的工作。
编译打包、部署,持续集成,持续交付,可以与自动化测试集成
在devops过程中,自动化测试在什么时候开始做最好?
DevOps实践模型中很重要的三点:测试一切、测试驱动开发、测试自动化; 1)测试一切 文档、配置、环境、发布包,一切代码都要测试。 2)测试驱动开发 测试提前,敏捷协作,测试用例同步开发。 3)测试自动化 多种测试技术能力、组件化开发、统一管理,不间断测试执行。 为了实现测试驱动开发、测试自动化,我们认为需要以下四个要素: 1)敏捷协作的过程 2)测试设计方法 3)全栈测试团队 4)自动化测试服务
devops工具用到了哪些?
五种最流行、功能最强大的 DevOps 工具:
Terraform
Ansible
Packer
Docker
Kubernetes
配置管理的流程是为了什么?
配置管理流程编辑配置管理制定配置管理计划配置管理员制定《配置管理计划》,主要内容包括配置管理软硬件资源、配置项计划、基线计划、交付计划、备份计划等
dockerfile的作用?
DockerFile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本
docker与虚拟化的区别?
1.占用服务器资源少 2.启动速度快
docker退出时,我的文件是否会丢失?
除非你使用了数据卷(Volume)或数据容器,否则容器内运行期间产生的数据在容器关闭后,又回到你启动容器时的原始镜像状态.