记录-1
6.8号 中电文思海辉 外包 HR 电话面试
概况:
一下子就问懵我了,尴尬
刷boss行动停止,先刷理论知识
具体提问:
1,python字符串分割
split() 函数 ,将字符串按照指定的规则或者要求进行分割,并返回list值。
参数:
str---分隔符,默认为所有的空字符串,包括空格、换行(\n)、制表符(\t)等
num---分隔次数,默认为-1,即分隔所有。
第一个参数记为分隔符,也就是在这个分隔符的位置才进行分隔
第二个参数记为分隔次数,默认为分隔所有,1的话就分隔一次,即分隔为两个子字符串
str = "Hello#Nice to meet you#qwe#asd#zxc\nYou\nHe"
str1 = str.split("#",1)
#以"#"键为分隔符,分隔1次,分割成2个子字符串
print(str1) 输出结果为【“Hello” ,“Nice to meet you#qwe#asd#zxc\nYou\nHe”】
2,python字符串字符数量
len()函数,语法:len(str)

7.27 宝尊电商 两位面试官 视频面试
深挖项目
1,自我介绍(结合之前的项目以及负责的内容)
面试官您好,我叫 XX,毕业于……,毕业后一直从事软件测试方面的工作,有三年的软件测试经验,目前在XX 公司任职。现在我在该公司负责的工作是paas+saas的测试工作。。。我看到你们在招聘XX岗位,而且也是saas相关的,我想在这方面我已经有了些经验,会比其他人上手快些,并且我擅长发现和分析问题,可熟练操作数据库,熟悉C语言、Java,HTML5等多种开发语言,可以帮助开发精准的定位问题,节约时间,同时我善于与他人合作,有耐心,学习能力强,就这点上我想我还挺适合贵公司的这个岗位的
2,分别详细介绍之前的项目是做什么的
3,同时负责多个项目,一个分支测试后其他分支都要测吗?
还是需要测试的,不同分支间代码,环境存在差异,迁移后还需要对已测试通过的需求进行主流程的大致测试以及有针对性的细节测试(根据经验,预判可能会影响到的内容,比如在A分支开发了新的台面功能,测试通过了,但在B分支台面存在A分支没有的分割及报价功能,那就要去针对性的对新功能进行这方面的测试)。
4,分支和主干 定制和通用
我们所在的项目是分支,
有一些需求可能比较适合做成通用的,那就在需求设计阶段就考虑不同分支功能兼容问题,标明范围为通用,开发提测后测试先在提出需求的分支进行测试,验收通过过后,告知其他分支进行代码合并,之后在其他分支也需要进行回归测试,确保功能正常运行
如果是在分支发现一些通用的bug会由测试这边去流转给主线那边对应的测试,跟进修改进度,主线关闭后及时推动代码迁移,在分支回归确保bug修复
5,上下游链路打通,全链路测试
通过接口进行第三方对接,api联调,与多种服务进行集成。
通过平台间数据规范,促进数据精准对接。
企业级的全链路测试对测试用例的覆盖度要求比传统测试高,在测试的过程中会涉及到不同系统之间的连接关系和数据流关系。
全链路测试主要包括两大类,第一类是功能性测试,模拟整个业务交易流数据闭环流转过程中的功能性测试。
第二类是非功能性的测试。这类测试的思路是,我们要先做功能性的测试,系统稳定之后,我们再挑典型重要的交易,模拟它的数据流转、数据量、QPS、响应时间以及落地到每一个微服务的数据量。
功能性测试整个过程中我们通过模拟准生产环境去跟第三方平台进行业务交互,模拟各种业务交易的场景是否能够正常处理。这个过程需要测试人员用真实的手机号去注册,用真实的、不同的银行卡账户去买东西。除了提货这个环节,其他的环节全部都是真实的。
全链路的测试过程中会涉及到不同系统的业务交互关系,我们在测试的过程中一定要将业务场景梳理出来,去进行测试。
案例:
全链路业务场景中的网购案例。
网上购物从买家在APP下单,到最终买家收货,一次完整交易的数据流要经过很多系统(APP、ERP系统、仓储系统、物流配送系统、门店自提终端)。这些系统之间通过调用接口串成一条条链路,交易数据在链路上进行流转。
电商全链路业务交易流

首先开始下单,我们购买商品的时候,可能会有打折活动,比如说买2件打9折,买5件打8折等等,还会有满减,或者会员优惠等,金额计算要正确。还会有限购、限量的情况,然后在购买的过程中库存是否充足。这是我们商城前端会提示的一些信息。
下单完成之后,会到另一个系统,也就是订单系统。在订单系统中我们要看库存、订单信息等等,生成订单后,订单状态会变成待支付或者已支付。
待支付、已支付环节又会涉及到订单是否会正常下单还是要取消?或者买三件退两件等场景。
库存系统有哪些场景呢,比如前面说的买三件退两件,就会导致库存增加,交易金额要退款。
退款的过程中会出现什么问题呢,比如说有满100送10块的活动,那在买三件退两件时,是不是要按比例扣一部分的钱,优惠的钱要怎么分摊掉。
在支付系统,第一方面是商家的电商平台里面有了新增的余额,其次,用户通过银行卡或者其他支付方式进行支付,在支付过程中可能会遇到卡内余额不足,有些不能用信用卡去透支等问题。我们都需要对这些内容进行模拟。
这一块属于第三方接口,但是我们在平台上也要看看这种情况出现后系统的反馈,避免出现明明第三方平台支付失败了,但是我们这边却显示支付成功。
下单完成之后,有时候有些多个商品的订单可能会被取消其中几个商品,取消之后是不是还能够正常发货?再有一点是,a同学和b同学同时买了同一个东西,但是地点不一样,这样的情况会不会产生串单的问题?

一次完整交易的数据流要经过很多系统,这些系统之间通过接口调用串成一条条链路,交易数据在链路上进行流转。而对整个链路进行的测试称之为全链路测试,全链路测试可分为全链路功能测试和全链路性能测试。
首先在app端,我们要做功能测试与性能测试。然后是后台管理系统、支付、仓储与服务环节,最后是物流配送和菜鸟驿站,这样一个完整的交易流中的每一个环节都需要进行相应的测试。
一个完整交易的数据流要流转到很多系统,图里画出的只是一个基础的系统,其实真实的系统还会更复杂一些。我们测试人员在测试的时候会分开每个环节进行测试,或者先测接口,接口测通了之后再进行全链路测试。在整个测试的过程中,我们要用全链路的方式去考虑它的业务流。
1)问题排查成本高
大多数测试同学对于本域服务比较熟悉,如果全链路用例出现外域报错,如果自己解决不了,势必要请求负责域的同学解决,大家总有自己的事情要做,不可能随时随地随叫随到吧。
这个跨部门的沟通和协作效率严重低下,而且人员变动、系统变动都会直接影响问题排查结果。
2)环境不稳定
不同于单体应用的部署,微服务应用部署存在多机房、多配置的特点。一套全链路联调环境可能涉及几十个服务的部署,那么其中一个服务部署出现问题(服务器宕机、网络问题、配置错误等),可能会导致整条业务链路响应失败。理论上,环境稳定性和部署服务的数量成反比,这也是微服务架构下需要“环境治理”的原因。
当然,单体应用下也存在环境问题不稳定影响自动化用例的情况,而微服务架构下这种情况更甚!
3)服务依赖错综复杂
正如上文反复提到的,微服务架构下,不存在完全属于“孤岛”的服务,服务之间是存在依赖关系的。Java项目中一般以pom中引入其他服务的jar包方式构成依赖关系,如果需要升级依赖的jar包版本(主动升级/被动升级),就要注意下原来的契约关系是否有变化。
而在进行测试的过程,我们往往先mock掉依赖的服务,等保障域内质量OK之后,再进行和其他域联调测试。因此,项目进行前需要创建大量mock服务。
链路联调阶段,需要保证各域服务都ready,但是往往事与愿违,服务都有依赖的第三方接口,在自动化测试这些服务的时候都需要去了解业务方系统的接口、DB等。
自动化
关于自动化接口测试用例的面试提问。
1,有没有做过自动化测试,结合项目讲一下你们的自动化是怎么做的
在xx项目中实施了接口自动化测试,因为我们的平台ui变动还是挺频繁的,所以接口自动化复用率更高一些,我们这个项目搭建自动化测试框架所使用的是:python+pytest+requests+yml+allure+Jenkins,然后分层这一块儿使用的是POM模式,数据驱动使用的是yml跟parametrize的驱动模式,我在这个自动化测试实施的项目中主要负责的是橱柜模块的主流程用例的自动化代码的编写
2,面试官:你写了多少条接口用例
我: 大约几百条吧
3,用例比较多的时候怎么管理
testcase目录中,分成多个文件,一个文件可以多个方法
4,用例的执行策略是什么?
1.按顺序执行
2.按测试类执行
在自动化测试中,一般测试用例往往多达几百个,如果完全按顺序来执行,其一是不符合自动化测试用例的原则
3.按测试模块执行
在Python中,一个Python文件就是一个模块,一个模块中可以有 N个测试类,在一个测试类中可以有 N个测试用例。按模块执行的代码如下:(我们的python文件名为:seleniumtest.py)
面试官:你是怎么存放这些用例的?用例依赖执行顺序怎么搞?并发执行怎么搞?
我:用yaml来存放用例的。然后就没了。。。
面试官:是本地写的用例还是用公司自有的测试开发平台来存放?
我:公司的测试平台不太好用,我想用自己写脚本来实现。这样也可以练习自己的编程。
是从用例存放形式来回答?还是从用例测试场景来划分回答?不太明白面试官的背后的含义是什么。
分析:
后两个问题都没回答到点上。。。答非所问了。
这几个问题,和接口测试用例关系倒不是很大。其实中间牵涉到的主要知识点就是在对于自动化测试框架的理解这一层面:
测试用例的分类
测试套件的使用
测试用例如何串行,如何并行,如何设定用例的执行顺序
你是怎么存放这些用例的?
面试官的本质问题: 测试用例的项目结构,以及管理方式。比如你的项目结构是不是按照业务模块去分为了不同的package。包括用例如果需要多人开发以及版本化管理有没有使用类似于git或svn这样的代码管理工具。
还有一个潜在问题: 用例数量很庞大的情况下,不可能每一次执行测试用例都是全量执行,如何做用例管理可以覆盖多种用例的使用场景;
如何按照用例优先级执行用例?
如果想要执行不同的业务模块自动化用例应该如何执行?
如果想要执行不同类型的测试用例应该如何执行?
回归测试场景
冒烟测试场景
灰度测试场景
针对不同的被测版本,用例应该如何执行,比如回归需要使用v1.1 版本的用例, 冒烟需要执行v1.2版本的用例
以上的所有场景, 只要深刻理解并熟悉测试框架的使用以及标准结构,一定是可以回答出来的。
以下的答案更多的是思路,而非一板一眼的标准答案,因为任何一个答案,如果说你没有很多对应的项目经验和处理经验,一问就玩完。从用例版本管理这种大的维度到每个使用场景进行归纳与总结:
使用 git 或svn 对测试用例进行管理,因为有版本化管理,回滚也比较方便,多人协作也比较方便。
用例的项目结构通常是和产品的业务模块统一,比如我们的产品有用户管理功能,那用例编写的时候就会写在 user package内。基础模块,橱柜模块,衣柜模块
另外会使用测试框架(pytest 是装饰器mark、junit5 就太多了,displayname 、tag)自带的标识功能。给测试用例添加不同类型的标识,保证可以执行不同类型的测试用例。
只要用例的标识打的明确,以及用例的业务目录结构合理,就可以实现对用例的规范化管理,同样可以选择不同类型的用例进行执行
用例依赖执行顺序怎么搞?并发执行怎么搞?
这块直接回答是如何使用测试框架的并行和串行(指定顺序)功能的就OK了。
默认情况下,pytest按顺序运行测试。在实际情况下,一个测试套件会有很多测试文件,每个文件都有一堆测试。这将导致大量的执行时间。为了克服这个问题,pytest为我们提供了一个并行运行测试的选项。
为此,我们需要首先安装pytest-xdist插件。
通过运行以下命令来安装 pytest-xdist —
pip install pytest-xdist
现在,我们可以通过使用语法 pytest -n <num>
来运行测试。
pytest -n 3
-n <num>
通过使用多个工作者来运行测试,这里是3。
当只有几个测试要运行时,我们不会有太大的时间差异。然而,当测试套件很大时,这就很重要了。
用例的顺序跟你用yaml保存是没关系的。是关于测试装置(Fixture)概念的。
常见的setup teardown,结合session suite class testcase级别
然后是利用继承,业务模型的继承比如page object,还有测试用例的继承,比如BaseTestCase等
是本地写的用例还是用公司自有的测试开发平台来存放?
就直接回答使用 git 存放的用例就可以了。这和写脚本也没太大关系,即使用测试平台很多时候也要写脚本的。一下就暴露出来其实你对测试平台也是一知半解了…
补充问题:
主流程通过自动化回归,那回归的用例数大概多少,覆盖了多少个接口,回归的用例是如何触发的?
定期执行的具体策略是什么,针对于什么环境。第三个的问题提到了多环境,但是没有看到解决方案和多环境又什么关系,感觉更像是灰度测试。
4,测试数据怎么管理,
测试数据不能写死在代码里面,要做到数据分离,不用修改测试逻辑,只需要维护测试数据。代码从文件读取数据,如csv、excel表格、txt、xml等格式文件,
①系统参数放ini,如登录账号密码,执行具体case时,我们必须要有前置条件,比如说我的case要在登录后才能执行,那么这个登录的帐号我必须确保它是存在的,如果不存在我就自动添加进去,这样脚本的回访率就很高了,所以这个ini文件 就是干这个的
②对于一个接口有多组测试的参数,可以参数化,放在yaml、txt、json、 excel.
③如果是需要一次性消耗的数据,要求唯一性,比如注册,每次注册不一样的;保存方案,方案名称唯一,可以用随机数生成。random函数生成随机数或者是时间戳 import time print(time.time())
④对于可以反复使用的数据,放数据库,每次初始化用完后清理。

8.2 北京博纳讯动--江苏博云
1,自我介绍
2,对测试流程做了哪些优化
答:①增加自测用例,提高开发提测质量(but面试人可能是开发,emmm)
so下次可以多补充几点,
eg,②用例评审记录,详细整理补充的内容,完善用例设计方法
③线上反馈问题分类,高频问题模块加以重视
3,Linux命令
4,对k8s的了解
5,k8s相关命令
6,一个pod宕机了要怎么处理
7,混沌测试,交叉测试
混沌测试是什么
类似于“故障演练”,通过构造各类异常,验证系统在碰到这些异常时是否有做好对应的监控告警、预案处理,针对性地进行加固,防范,从而避免故障发生时所带来的严重后果。通过对各类异常提前做好监控告警和预案处理,增强系统的健壮性,增强分布式系统的信心。
交叉测试是什么
字面意思就是把测试同学负责的测试模块进行 相互交换测试。比如原来A同学负责a模块,B同学负责b模块;那么在一轮测试之后,A同学负责b模块测试,B同学负责a模块测试。
为什么要做交叉测试?
思维发散,每个测试同学可能会有自己的思维局限和受限情况等等
解决一部分因为测试人员工作粗心导致的漏测。
8,Jenkins发布,是否有做加入自动化代码检查?
Sonar实现代码自动检查,但没有在项目中实现过
搭建 Jenkins 项目环境的步骤如下:
①下载 Jenkins:在 Jenkins 官网上下载需要的 Jenkins 版本,解压后得到一个 war 文件。
②安装 Java JDK :Jenkins是用 Java 编写的,所以需要在电脑上安装 Java JDK。推荐使用官方 Java JDK,并将它添加到环境变量中。
③启动 Jenkins:使用命令行进入 Jenkins 的目录下,运行 java -jar jenkins.war 命令启动 Jenkins。
④安装常用插件:访问 http://localhost:8080 进入 Jenkins,按照提示安装常用插件,如 Git、Maven,allure 等。⑤新建 Jenkins 项目:在 Jenkins 界面上,点击“新建项目”,填写项目信息和配置构建方式。
⑥配置 Git 仓库信息:在 Jenkins 项目配置中,点击“源码管理”,选择 Git,并填写 Git 仓库地址和认证信息。
配置构建触发方式:在 Jenkins 项目配置中,点击“构建触发器”,选择需要的构建触发方式,如定时构建、Git 提交触发等。
配置构建步骤:在 Jenkins 项目配置中,点击“构建步骤”,选择需要的构建步骤,如执行 shell 命令、构建 Maven 项目等。
⑦保存并构建:配置完成后,点击“保存”并触发项目构建。

8.4 万邦数字能源--星星充电
1,自我介绍
2,介绍一下之前做过的项目
3,针对项目性质提问
1)你们的客户都是什么类型的,
提供给品牌,给品牌旗下的设计师使用
2)所以你们只有一个软件设计,像供应链,仓储之类的没有涉及吗?
我们不只是软件设计,也会对接品牌方的工厂,实现门店终端3D效果图设计到工厂生产的智能制造,将营销—设计—生产链路打通,给予客户一站式的家居家装体验,一键出图,一键下单,使设计效果图精准对接工厂生产,实现前后端一体化
三维家其实在家居产业就打通两端,一个是通过内容,通过我们做的图,来连接门店之间,门店跟消费者,通过那个图,我们连接门店跟工厂,来连接工厂内部
供应链资源如何打通?
通过接口,参数对照规范,去在供应链间传递数据
接口地址,请求参数(报文) ,返回结果
3)会参与实施吗?就是软件给到客户,他们一般是不能直接用吧,需要去场地部署环境之类的吗?
是需要的,但是我们有专门的运维人员去做这些,测试更倾向于与用户在使用中的问题,比如我们会去客户的工厂那边出差,去现场了解使用中的痛点问题,拿到一线的数据然后去有针对性的优化
4)你们是只有这一款软件吗?
我们其实是一个云设计平台,主要是做SaaS嘛,以客户为中心,那我们经过很多版本的迭代其实已经是一个比较成熟的产品了,会有很多模块,然后根据客户的需要去迁移对应的模块,再根据客户的需求去做一些定制化的修改,开发
5)通常一些定制化的需求,对其中的部分模块做一些定制化的需求,那在测试中会把所有模块都进行测试吗?还是只会针对有定制化需求的模块进行测试呢?
首先会先针对需求进行细致的测试,然后对于跟需求有关联的其他模块也会有针对性的进行回归,确保不被影响,之后在上线前呢也会通过通过自动化测试去确保其他模块基础功能不受影响
而且我们其实是切了分支去做开发的,不同分支,环境之间是互相隔离,独立的,有一些通用的功能才会去meger到其他分支
6)怎么做回归测试的
1,dev环境需求测试通过后发布到release环境进行回归测试
2,手动针对需求强关联的模块,功能进行针对性的回归
3,跑接口自动化脚本,确保基础功能不受影响
4,你们的接口自动化是怎么做的
用python+pytest单元测试框架
1)你们会写自动化测试用例吗?是写在哪的
自动化测试用例都是放在testcase package里的,然后会根据项目结构按照业务模块分为了不同的package,方便管理查看。
然后代码会放在git上面
如果需要多人开发以及版本化管理会使用类似于git或svn这样的代码管理工具。
2)你们是怎么读自动化case的?(其实是想问代码是怎么写的,就是你的case写了之后,你要读case,把你的参数组装成请求体,然后再进行请求,根据接口的responds去进行assert断言,来进行接口自动化)
3)入参是怎么来获取的?
4)参数是写在case里还是放在单独的文件中
yaml文件,ini配置文件,excel
5)有没有类似创建的接口,去造一些数据?(创建接口执行完成之后,你再次调用,会报错,因为有一些参数已经创建了,生成了一个唯一值,你怎么去保证每次生成的数据的唯一性)
有,比如我们很常用的一个接口,保存方案,需要有一个不重复的方案名称,可以使用random函数生成随机数,A=random.randint(),NAME="方案"+A
也可以使用time时间戳的方式
6)执行完会删一下,怎么删
①用脚本删,使用数据删除脚本,通过手动标记要删除的数据并执行脚本来清除数据。
②后置操作,teardown,或者是fixture()
fixture 中scope参数 scope="function" 函数层级,默认是 function
它的作用域有四个,分别是:function、class、module、和session :
5,讲一下你们的测试流程吧
6,怎么协助开发排查问题
比如说是用户那边反馈一个问题,会先测试这边进行一个过滤,排除下操作问题,版本问题等,然后可以通过F12,或者抓包工具fiddler去查看接口的一个状态码,入参,出参之类的,去区分前后端,然后再给到对应的开发,这样定位问题会快很多,再者还可以查库,去判断数据落地
7,sap驱动程序是什么?
指的是设备驱动程序,是一种可以使计算机和设备进行相互通信的特殊程序。
驱动程序主要作用是计算机系统与硬件设备之间完成数据传送的功能,只有借助驱动程序,两者才能通信并完成特定的功能。
驱动程序是介于操作系统与硬件之间的媒介,实现双向的传达,
将硬件设备本身具有的功能传达给操作系统,同时也将操作系统的标准指令传达给硬件设备。
8,编程题
数组中出现次数最多的元素及其出现次数
将数组转为set集合,去重
定义一个空字典,for循环遍历集合
将集合中的元素作为字典key,元素出现次数list.count()作为value
dict['元素']=list.count(元素)
然后max(dict.values())找到出现次数最多的
遍历字典,找到对应元素
for key,value in dict.item():
if value= max(dict.values()):
print(key,value)