目录:导读
前言
岗位:
【技术能力】能独立完成产品线中自动化测试工作,根据测试任务,搭建软件测试环境,编写测试脚本,输出报告;
【项目管理】熟练开发测试工具、测试脚本,及迭代优化测试框架,使用合理方式进行自动化管理项目;
【业务推动】对测试项目的结果负责,使用合理方式推动业务端测试的效率、开发质量;
【规范制定】 熟悉CI系统,完善准入/准出标准,持续提升测试效率;
【效率提升】根据业务特点,引入新的测试方法和工具,探索新技术。改进测试工具或测试方法,提高效率,培训测试人员并支持技术难题解决
1)3年以上测试工作经验,1年以上自动化测试经验或开发经验;
2)至少熟悉一种脚本语言,如Shell、Python、java等;
3)至少熟悉一种测试框架,unittest、pytest、testng等;可独立完成复杂逻辑的接口自动化测试;
4)熟悉appium、selenium可独立完成android和ios的UI自动化测试;
5)熟悉jenkins、svn、git的搭建和使用;
6)熟悉常用性能测试工具的使用,并可进行分析调优:ab、jmeter、loadrunner、locust等,有分布式压测经验优先;
7)熟悉使用django开发框架,可完成web页面和功能的开发(此条可放宽);
8)具备丰富的系统测试经验,并且能够进行系统级的原因定位与分析;
9)具备较强的计划、组织、协调、沟通及分析能力,优秀的职业素养和团队协作精神、敬业精神,能承受工作压力;
10)学习能力强,对技术有着特别的渴求,在关注的领域有着深入的研究,并不断创新;具备较强的技术培训能力和领导能力
自动化测试面试题1:基础篇
目的:验证求职者是否在自动化测试岗位有实际应用于生产的工作经验
1、使用什么测试框架做的上一个项目的自动化测试?说下怎么做的?对自动化的理解?
答:(junit、unittest、testng、 pytest ,优先python语言,用过pytest或unittest框架的;只会selenium能力较弱)
2、使用什么测试框架做的上一个项目的自动化测试?说下怎么做的?对自动化的理解?
答:最好能答出独立负责且封装页面元素、断言封装、请求封装、取参方式具体实现
3、GET与POST的区别?
1)GET请求资源数据,POST向服务器传递需要处理的数据
2)GET传递数据大小不超过2kb,POST没有限制
3)GET请求的参数会在Url上暴露显示,POST请求参数在Requestbody里,所以相对GET来说,POST安全性较高
4)GET 请求的静态资源会被浏览器缓存,POST不会被缓存
5)GET传递的数据类型是文本,POST是文本或者二进制
6)GET请求被回退时是无害的,POST请求被回退是会被重新再执行一次
GET和POST的使用场景:
1)在传递一些机密信息时必须要使用POST
2)只是查询获取数据时可以用GET
3)POST请求速率会比GET慢,因为GET请求产生一个TCP数据包;POST请求产生两个TCP数据包
4、//*[contains(@text,“登录”)]
是什么意思?
答:查包含登录关键字的所有元素
5、自动化遇到用例fail掉如何排查故障?
答:看出错log,如果能按层次说清楚排查失败:手工查应用是否真的有bug, 确认不是bug,是不是新版本引入了新的变更,调试脚本看看自己的脚本是不是因为没有等待元素出现后就操作了,是不是元素上面有其他元素出现这样操作是不是操作了其他的元素上了
6、说说接口测试的流程和接口自动化流程,介绍一下request有哪些内容?
答:1)流程:获取接口文档,依据文档设计接口参数,获取响应,解析响应,校验结果,判断测试是否通过。 2)request 内容:1,封装了get、post等;2,以关键字参数的方式,封装了各类请求参数,params、data、headers、token、cookie等;3,封装了响应内容,status_code、json()、cookies、url等;
session会话对象,可以跨请求;
7、接口测试用例的编写要点有哪些?
1)必填字段:请求参数必填项、可选项
2)合法性:输入输出合法、非法参数
3)边界:请求参数边界值等
4)容错能力:大容量数据、频繁请求、重复请求(如:订单)、异常网络等的处理
5)响应数据校验:断言、数据提取传递到下一级接口…
6)逻辑校验:如两个请求的接口有严格的先后顺序,需要测试调转顺序的情况
7)性能:对接口模拟并发测试,逐步加压,分析瓶颈点
8)安全性:构造恶意的字符请求,如:SQL注入、XSS、敏感信息、业务逻辑(如:跳过某些关键步骤;未经验证操纵敏感数据)
8、postman的使用方式?高级用法?mock的应用场景和基础用法?
答:a,基础使用:入参出参校验返回;
b,Environment–配置不同的环境参数,Globals即设置全局变量,Pre-request Script–配置使用环境变量或进行前置脚本处理;
c,团队可以更好地并行工作,前后端人员只需要定义好接口文档就可以开始并行工作,互不影响,只在最后的联调阶段往来密切,开启TDD(Test-Driven Development)模式,即测试驱动开发;
9、你之前自动化测试的数据放哪?怎么使用?公共变量的管理方式?管理测试用例的手段?如何提高用例覆盖率?接口测试关联性接口实现方式?
答:测试数据存放总结:
1)对于账号密码,这种管全局的参数,可以用命令行参数,单独抽出来,写的配置文件里(如ini)
2)对于一些一次性消耗的数据,比如注册,每次注册不一样的数,可以用随机函数生成
3)对于一个接口有多组测试的参数,可以参数化,数据放yaml,text,json,excel都可以
4)对于可以反复使用的数据,比如订单的各种状态需要造数据的情况,可以放到数据库,每次数据初始化,用完后再清理
5)对于邮箱配置的一些参数,可以用ini配置文件
6)对于全部是独立的接口项目,可以用数据驱动方式,用excel/csv管理测试的接口数据
7)对于少量的静态数据,比如一个接口的测试数据,也就2-3组,可以写到py脚本的开头,十年八年都不会变更的。
10、不可逆的操作,如何处理,比如删除一个订单这种接口如何测试?
此题考的是造数据的能力,接口的请求数据,很多都是需要依赖前面一个状态的
比如工作流这种,流向不同的人状态不一样,操作权限不一样,测试的时候,每种状态都要测到,就需要自己会造数据了。
平常手工测试造数据,直接在数据库改字段状态。那么自动化也是一样,造数据可以用python连数据库了,做增删改查的操作
测试用例前置操作,setUp做数据准备
后置操作,tearDown做数据清理
11、说出5个以上 Linux 命令(注重考察性能测试监控常用命令?)
答:cd、ls、grep、mkdir、pwd、ping等等,重要是性能测试常用监控命令:netstat 、top 、Nmon 、dstat、ulimit、vmstat 、tcpdump、free 、lsof ,需回答上至少两个。
12、介绍一下你在这个项目中是如何使用 Jenkins 的。
答:基本操作,比如定时构建执行代码等。
13、举例说明,Linux下命令行cURL的种常见用法和示例?
答:常用10种,这里举出三种常用:a,获取页面内容:curl+get请求;curl https://www.baidu.com
b,把链接页面的内容输出到本地文件中:curl https://www.baidu.com > index.html
c,使用 -d 发送 POST 请求:curl -d “userName=tom&passwd=123456” http://www.example.com/login
14、jmeter上一个接口参数返回值做为下一个接口入参的实现方式有几种,举例?
答:正则表达式处理器、JSON Path Extractor
15、接口自动化中,遇到签名、鉴权加密等,如何处理的,用到哪些方法?
答:比如MD5加密–hashlib内置库,看怎么回答怎么具体问:开放性。
16、对pytest的理解程度?使用规范?参数化方法?说说常用装饰器?
答:pytest是一个非常成熟的全功能的的Python测试框架,主要特点有以下几点:
1)简单灵活,容易上手,文档丰富;
2)支持参数化,可以细粒度地控制要测试的测试用例;
3)能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/ appnium等自动化测试,接口自动化测试(pytest +请求);
4)pytest具有很多第三方插件,并且可以自定义扩展,比较好用的如pytest - selenium(集成selenium),pytest-HTML(完美的HTML测试报告生成),pytest-rerunfailures(失败情况下重复执行),pytest -xdist(多CPU分发)等;
5)测试用例的跳跃和xfail处理;
使用规范:
测试文件名必须以“test_”开头
测试类以Test开头,并且不能带有 init 方法
测试方法必须以“test_”开头
除了有setup/teardown,还能更自由的定义fixture装载测试用例
参数化方法:
pytest支持在多个完整测试参数化方法:
pytest.fixture(): 在fixture级别的function处参数化
@pytest.mark.parametrize:允许在function或class级别的参数化,为特定的测试函数或类提供了多个argument/fixture设置。
pytest_generate_tests:可以实现自己的自定义动态参数化方案或扩展。
17、举例说明pytest.mark标记的使用?
答:
1)无条件跳过测试pytest.mark.skip
2)有条件跳过测试pytest.mark.skipif
3)标记测试功能按预期失败pytest.mark.xfail
4)将测试功能标记为使用给定的夹具名称pytest.mark.usefixtures
5)向特定测试项添加警告过滤器,以便更好地控制应在测试,类甚至模块级别捕获哪些警告@pytest.mark.filterwarnings
6)自定义标记:标记指定标签
18、自动化测试报告生成方式?如果是allure详述?
答:@allure.severity(“critical”) # 优先级,包含blocker, critical, normal, minor, trivial 几个不同的等级
@allure.feature(“测试模块_demo1”) # 功能块,feature功能分块时比story大,即同时存在feature和story时,feature为父节点
@allure.story(“测试模块_demo2”) # 功能块,具有相同feature或story的用例将规整到相同模块下,执行时可用于筛选
@allure.issue(“BUG号:123”) # 问题表识,关联标识已有的问题,可为一个url链接地址
@allure.testcase(“用例名:测试字符串相等”) # 用例标识,关联标识用例,可为一个url链接地址
19、什么是冒泡排序,手写一个冒泡排序?
答:冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端。
自动化测试面试题2:细节篇之语言:python基础
目的:验证求职者自动化岗位的开发、脚本语言的基础以及熟悉程度
1、super 是干嘛用的?在 Python2 和 Python3 使用,有什么区别?为什么要使用 super?请举例说明。
答:super 用于继承父类的方法、属性。super 是新式类中才有的,所以 Python2 中使用时,要在类名的参数中写 Object。Python3 默认是新式类,不用写,直接可用。使用 super 可以提高代码的复用性、可维护性。修改代码时,只需修改一处。
2、L = [1, 2, 3, 11, 2, 5, 3, 2, 5, 3],用一行代码得出 [11, 1, 2, 3, 5]
答:list(set(L))
3、列表和字典有什么区别?
答:一般都是问列表和元组有什么不同。 1)获取元素的方式不同。列表通过索引值获取,字典通过键获取。 2)数据结构和算法不同。字典是 hash 算法,搜索的速度特别快。 3)占用的内存不同。
4、json和字典dict的区别?
答:json是一种轻量级的数据交换格式
dict是python中的数据类型(python里面的基础数据类型有:int、str、 float、list、bool、tuple、dict、set这几种类型,里面没json这种数据类型,json本质上字符串,按照key:value键值对格式的字符串;在json中空值是用Null表示,在dict中空值是用None表示)
主要区别:json的key只能是字符串,python的dict可以是任何可hash对象(hashtable type);
json的key可以是有序、重复的;dict的key不可以重复。
json的value只能是字符串、浮点数、布尔值或者null,或者它们构成的数组或者对象。
json任意key存在默认值undefined,dict默认没有默认值;
json访问方式可以是[],也可以是.,遍历方式分in、of;dict的value仅可以下标访问。
json的字符串强制双引号,dict字符串可以单引号、双引号;
dict可以嵌套tuple,json里只有数组。
json:true、false、null
python:True、False、None
json中文必须是unicode编码,如"\u6211".
json的类型是字符串,字典的类型是字典。
5、python深拷贝和浅拷贝的概念和区别?
答:浅拷贝:拷贝最外层容器
深拷贝:拷贝的最外层容器,还拷贝容器中的元素
对于不可变元素,使用浅拷贝
6、python单行注释和多行注释分别用什么?
答:单行注释用# 多行注释用"“” “”"
7、Python垃圾回收机制?
答:
1)回收计数引用为0的对象,释放其占用空间
2)循环垃圾回收器。释放循环引用对象
8、如何安装第三方模块?以及用过哪些第三方模块?
答:使用官方推荐的setuptools的包管理工具,easy – install和pip、requests模块
9、进程、线程有什么区别?什么情况下用进程?什么情况下用线程?
答:
1)区别:
① 地址空间和其它资源(如打开文件):进程之间相互独立,同一进程的各线程之间共享。某进程内的线程在其它进程不可见。② 通信:进程间通信 IPC,线程间可以直接读写进程数据段(如全局变量)来进行通信——需要进程同步和互斥手段的辅助,以保证数据的一致性。③ 调度和切换:线程上下文切换比进程上下文切换要快得多。④ 在多线程操作系统中,进程不是一个可执行的实体。
2)使用场景:同时操作一个对象的时候,比如操作的是一个全局变量,我用线程,因为全局变量是所有线程共享的。
10、谈谈你对面向对象的理解?
体现在三个方面: 封装、继承、多态
继承有两种方式:
1)将同一类的方法封装到类中
2)将数据封装到对象中
继承:子类拥有父类的所有方法和属性,
好处:抽取重复代码,减少代码冗余。
坏处:耦合性太强。
多态:对于不同的类可以有同名的方法,同名的方法应用到不同的类可以有不同行为。
…
最新最全花1W买的Python+Selenium全栈Web自动化测试
下面是我整理的2025年最全的软件测试工程师学习知识架构体系图 |
一、Python编程入门到精通
二、接口自动化项目实战
三、Web自动化项目实战
四、App自动化项目实战
五、一线大厂简历
六、测试开发DevOps体系
七、常用自动化测试工具
八、JMeter性能测试
九、总结(尾部小惊喜)
人生最动人的篇章,往往写在最艰难的转折之后。当你觉得力不从心时,请记住:每一个"不可能"的突破,都始于"再试一次"的勇气。你的坚持,正在为世界书写新的可能!
别让他人的质疑成为你的枷锁!你体内蕴藏着改变命运的力量,每个微小的进步都在为辉煌铺路。当别人停下脚步时,你的坚持就是最有力的回应。向前走,属于你的舞台正等待绽放!