2023备战金三银四,Python自动化软件测试面试宝典合集(十)

757 篇文章 9 订阅
163 篇文章 3 订阅

马上就又到了程序员们躁动不安,蠢蠢欲动的季节~这不,金三银四已然到了家门口,元宵节一过后台就有不少人问我:

现在外边大厂面试都问啥

想去大厂又怕面试挂

面试应该怎么准备

测试开发前景如何

面试,一个程序员成长之路永恒绕不过的话题。每每到这个时期,不管当前有没有跳槽换工作需求的,都多少会跟着观望一下“外边的世界”~

当然外边的世界很精彩,但出来混,可不能没有一点准备,赤手空拳上阵。给大家分享一份免费的 测试工程师面试题,涵盖不少大厂高频必考点,需要的同学可免费领取。

不只是面试,了解市场需求,认识自己的问题,熟悉Python高频难点,巩固 Python相关知识...这份资料都可以帮助到你。

金三银四刚开始就拿到了蚂蚁的offer,这份阿里大牛总结的面试笔记,能掌握这份笔记的70%以上感觉就能拿大厂offer。

为了帮助更多的粉丝朋友们都拿到心仪的offer,小编在此把这份笔记分享出来

接上篇:

10.17 requests 中如何进行动态关联

1,如果返回的是 cookies 值,可以直接返回接口的 r.cookies

2,返回的是 str 类型数据,可以导入 re 模块进行正则表达式提取返回数据格式是 json 格式,

导入 json,把 json 数据格式转化 python 对象

json.dumps

将 Python 对象编码成 JSON 字符串

json.loads

将已编码的 JSON 字符串解码为 Python 对象

10.18 你们 python 接口自动化怎么去处理 cookie, session 的?

对于 cookie,session 的处理一般有三种方式:

第一种就是先获取登录请求的 cookie 值,然后发送其他请求的时候,在 requests 提供的

两个方法 get 或 post 方法中有一个 cookies 参数,我们可以通过这个参数来传递 cookies 值

第二种就是通过订制请求头,然后把获取到的 coookies 放在请求头中,通过请求头来进行传递

第三种就是通过创建一个 session 会话对象,后期所有的请求发送都通过调用这个 session 会话对

象来进行发请求,如果是登录请求,它会自动保存 cookies 值,然后其他需要用到 cookies 值的请

求,也通过 session 对象来发送,它会自动把 cookies 发送出去,对于 cookies, session 的处理,

我们差不多都是通过以上三种方式来实现的

十一、 UI 自动化

11.1 ui 自动化怎么测试

(1)我们做 U 自动化测试使用 Python+ seleniun+ unittest 工具

主要对自动化进行规划,把数据、代码、资源、公共方法进行分离,方便后续维护;

具体是通过元素定位、断言、参数化和封装来实现;

其中元素定位的方法,主要是 css 定位,也会用一些 xpath 定位,还有 id、name、 class 等

断言,主要是用 Assert 来判断实际结果是否与预期结果相符;

参数化,可以用列表、字典、导入 excel 表格库(xlrd)对数据进行参数化;

对于封装,一般我会对元素还有公共的模块进行封装。

比方说:原来我们有一个申请借款的功能模块

首先我们先进行自动化框架分类,分成测试数据、需要定位的元素、公共方法(比如说,一些数据的

操作、excel 操作,我们会封装成一个公共方法)。先采用 css 定位,把申请借款所对应的元素定位

出来,里面有很多内嵌页面,还有下拉框元素的定位操作,对应申请借款的数据,我们都会保存在

excel 表中,从 excel 表格中去获取数据。申请完成以后,我们会设置一个断言,还有进行数据库的

检查。我们会把元素封装到资源库,还有就是模块的封装,申请借款会用到登录模块,我们首先会封69

装好登录功能。借款申请完成后,会从数据库中删除相关的数据实现数据闭环,再关闭界面。

运行自动化脚本,我们是用 unittest 框架去运行,编写测试集,一般我们是编写 unittest 脚本,

去执行所有测试用例。

我觉得自动化中最难的在于元素的定位、内嵌界面、时间控件,这些需要一些 js 操作去除元素属性,

进行操作。

自动化中发现的问题:

在申请借款中,开发人员写了调试代码的弹出框,没有删除,导致我们自动化脚本跑不通

充值过程中,

添加新的支付方式,开发修改了代码,导致原有充值失败,这些都是我们原来自动化发现的问题。原

来也用了一些 Robotframework 的自动化测试框架,这个比较简单一些,因为部分关键字、框架已经

封装好了,只需要调用就行,但是不好的地方,就是扩展性会差一些。

编写完成以后,可以用 Jenkins 持续集成去定时跑自动化测试用例,再去查看运行日志。

总的来说 RF( Robot Framework)比较简单方便上手比较快,如果公司对自动化要求不高的话可以选

择 RF 框架来做,如果比较高的话就选用 unittest 框架来做。

(2)原来我们自动化测试主要是用的 python+ selenium+ pytest 框架做的

主要对自动化进行规划,把数据、代码、资源、公共方法进行分离,方便后续维护;

自动化测试其实主要通过几个方面元素定位,参数化,断言,模块的封装,数据闭环等来实现的

其中元素定位主要是 cs 定位也会用一些 xpath,id,name,classname,ink 等等定位,还有 js 定位

和 jQuery 定位都会用到;

参数化主要是用列表、字典、以及导入 excel 表格库(xlrd)对数据进行参数化;

断言:主要是用 assert 断言来判断实际结果是否与预期结果相符;

对于封装,我主要会对界面上的元素,一些公共方法(数据库操作,读取 excel 数据公共方法等),还

有测试数据(变量,字典,列表 exce 表等)和一些元素操作,测试用例等等进行封装;

最后闭环的话,就是都要把新增的数据删除,打开的界面都要关闭,就比如原来我们做的自动化测试,

有一个申请借款的功能模块,

首先,我们先进行自动化框架模块的分类划分,分成需要定位的元素 page_element,公共模块

common(比如说数据库操作,读取 excel 数据的操作,都会封装成一个公共模块的)、测试数据 data、

测试用例、元素操作 element_action、执行用例以及报告文件等等这些模块。

先导入 selenium 包,采用 css 定位,把申请借款所对应的元素定位出来,里面有一些内嵌界面,需

要先进入内嵌界面 --driver.switch_to.frame(),还有下拉框元素的定位操作(定位下拉框的话首先

要导入 select 包,通过 index,value,visible__text 进行

选取值: Select(变量). Select_by_value(‘’)把定位到的所有界面元素封装到 page_element 模

块里面,方便后期维护。

对于申请借款的数据,申请借款的一些标题,利率等等,我们都会保存在 excel 表中,对于 excel

表格操作,导入 xlrd 包把读取数据公共方法,保存到公共模块 common 中,方便以后从 exell 表中

获取数据,申请借款成功以后,我们会添加一个断言,获取界面 title 值,去判断界面的提示,当然

也可以获取提示申请成功 text 内容去判断,也会做数据库断言,检查数据库数据,导入数据库操作

包 pymysql,把数据操作,封装到公共方法,

去调用(数据库操作步骤:1 打开数据库连接,2 建立游标,3 执行游标(sql),4 返回获取的数据)

申请借款模块需要调用到登录模块,我们先把登录模块封装好,放到元素操作 element_action 模块

中,方便维护,借款申请完成后,我们会从数据库中删除相关数据实现闭环,减低后续维护,再关闭

所有打开的界面。

我们运行自动化脚本的时候是用的 pytest 框架进行

导入 patent,导入 yamail 包

定义一个主函数 if _name_="_main_",pytest.main()所有的用例脚本,定义生成对应的 HTML 报告

到 report 目录下,最后通过 yagma 定义发送邮件

定义发送邮箱的登录信息-定义邮件主题,内容,附件位置--发送邮件到测试人员邮箱中

当后续出现错误用例,也会调用 pytest--if 来运行失败的测试用例

我觉得自动化中最难的在于

元素的定位、内嵌界面、时间插件,这些需要一些 js 操作,去除元素属性,进行操作

自动化中发现的问题:

在申请借款中,开发人员写了调试代码的弹出框,没有删除,导致我们自动化脚本跑不通;

充值过程中,添加新的支付方式,开发修改了代码,导致原有充值失败

11.2 什么是自动化测试?

把一些简单,重复的工作,用自动化去实现,减少成本原来手工完成事情,通过自动化脚本去替代

11.3 什么样的项目合适做自动化(至少三个)

功能需求,需求稳定,界面稳定,不会频繁变动,才可以做

版本迭代次数比较多,做出来才有意义

项目周期比较长(大项目)意义

11.4 自动化测试流程是什么?

1、前期项目组会评估项目是否合适做自动化测试,例外就是看下哪些模块需要做自动化,适合做71

2、人员安排,分工

3、确定测试框架

4、各自领取自己负责模块(根据功能来进行划分,功能测试的模块)

整理功能模块的用例,把能做自动化的用例提炼出,规整成自动化用例文档,

准备数据,整理数据,管理

资源,环境的准备

5、搭建测试环境

6、脚本开发

11.5 自动化实现的比例,1-2 年。

2 年以内,把原来手工做的事情 15-30%用自动化脚本去替代

2 年以上,实现 40-70%

11.6 自动化测试用例的来源

手工编写测试用例

把原来手工的测试用例,当成自动化测试用例

11.7 自动化测试的优点与缺点

优点:

1、对程序的回归测试更方便

2、可以运行更多更繁琐的测试

3、提高测试效率和准确性,节约时间成本

4、可以执行一些手工测试困难或不可能进行的测试(例如,对于大量用户的测试,可以通过自动化测

试模拟同时有许多用户,从而达到测试的目的)

5、自动化测试不存在执行过程中的疏忽和错误,从而增加软件信任度

缺点:

1、不能取代手工测试

2、手工测试比自动测试发现的缺陷更多

3、对测试质量的依赖性极大

4、由于自动测试比手动测试更胞弱,所以维护会受到制,从而会制约软件的开发

5、工具本身无想像力72

11.8 你们自动化覆盖率有多少?

2 年以内,把原来手工做的事情 30%用自动化脚本去替代

2 年以上,实现 40-70%

当时覆盖的确实也不是很多,差不多 30-40%的样式吧

11.9 自动化测试环境的搭建是怎样的?

1、首先要安装 Python

2、然后安装编写代码工具 pycharm

3、导入 selenium 库(pip install seleniun 在 pycharm 安装 selenium3 下载源码包

4、下载浏览器驱动(谷歌.火狐等),把驱动程序发到 Python 根目录下

11.10 seleniun 的原理是什么?

我们用的 selenium3x 以上的版本,对于 selenium2x 以上的版本原理是这样的:

Selenium2.0 则是把 selenium1.0 中 selenium RC 替换为了 WebDriver

WebDriver 利用浏览器原生的 API,封装成一套更加面向对象的 SeleniumWeb Driver API

直接操作浏览器页面里的元素,甚至操作浏器本身(截屏,回口大小,启动,关闭,安装插件,配置

证书之类的),由于使用的是浏览器原生的 API 速度大大提高,而且调用的稳定性交给了浏览器厂商

本身,显然是更加科学,然而带来的一些副作用就是,不同的浏器厂商,对 Web 元素的操作和呈现多

少会有一些差异,这就直接导致了 SeleniumWebDriver 要分浏览器厂商不同,而提供不同的实现,

例如 Firefox 就有专门的 FirefoxDriver,

Chrome 就有专门的 ChromeDriver 等等

11.11 Selenium2 与 Selenium1 的区别是什么?

Selenium1.0 使用的是 Javascript 注入技术与浏览器打交道,需要 Selenium 启动一个 Server,将

操作 Web 元素的 AP 调用转化为一段段 Javascript,在 Selenium 内核启动浏览器之后注入这段

Javascript,开发过 Web 应用的人都知道, Javascript 可以获取并调用页面的任何元素,自如的进

行操作,由此才实现了 Selenium 的目的:自动化 Web 操作,这种 Javascript 注入技术的缺点是速

度不理想,而且稳定性大大依赖于 Selenium 内核,对 API 翻译成的 Javascript 质量高低

Selenium2.0 则是把 selenium1.0 中 selenium RC 替换为了 Web Driver

WebDriver 利用浏览器原生的 API,封装成一套更加面向对象的 SeleniumWebDriverAPI

直接操作浏览器页面里的元素,甚至操作浏览器本身(截屏,窗口大小,启动,关闭,安装播件,配

置证书之类的),由于使用的是浏览器原生的 AP,速度大大提高,而且调用的稳定性交给了浏览器厂

商本身,显然是更加科学,然而带来的一些副作用就是,不同的浏览器厂商,对 Web 元素的操作和呈73

现多少会有一些差异,这就直接导致了 SeleniumWebDriver 要分浏览器厂商不同,而提供不同的实

现例 Firefox 就有专门的 Firefox Driver,

Chrome 就有专门的 ChromeDriver 等等

11.12 seleniun 库中用过哪些函数?

driver = Web Driver ChromeO

driver.quit()

#退出浏览器

driver.closed()

#关闭窗口

driver.implicitly_wait()

#设置隐性等待延迟

driver.current_url

#获取当前的 URL

driver.page_source

#获取当前页面的源代码

driver.title

#获取当前页面的标题

driver.maximize_window()

#窗口最大化

driver.get()

#加载一个网页

元素定位的:

driver.find_element_by_id()

driver.find_element(By.xxx,’’)

frame 跳转的:

driver.switch_to.frame()

driver.switch_to.parents_frame()

driver.switch_to.default_content()

窗口跳转:

driver.switch_to.window()

对话框的处理:

Driver_switch_to.alert

.accepto

.dismiss

.text

.send_keys()

执行 js 脚本的:

driver.execute_script(js)

Element 类:

element.click()

element.submit()

element.send_keys()

element.clear()

element.text

element.get_attribute()

element.is_displayed()

element.find_element_by_xpath()

11.13 定位元素的 8 个方法是什么?

1、通过 id 定位

find_element_by_id()

2、通过 name 定位

find_element_by_name()

3、通过 class name 定位

find_element_by_class_name()

4、通过 css 定位

find_element_by_css_selector()

5、通过 link 定位

find_element_by_link_text(‘文本’)没有空格一般 a 链接

6、通过 partial_link 定位

find_element_by_partial_link_text(部分文本)--般有空格 a 链接

7、通过 xpath 定位

find_element_by_xpath()

8、通过 tag_name 定位

find_element_by_tag_name()

11.14 js 定位的 5 个方法

js 用到 css 定位

1. driver.execute_script("document.getElenmentByld().value='';")

2. driver.execute_script("document.getElenmentByName().value='';")

3. driver.execute_script("document.getElenmentsByClassName()[0].value='';")75

4. driver.execute_script("document.getElenmentsByTagName()[0].value='';")

11.15 jQuery 定位的方法

1. driver.execute_script("$(#id 定位值)vaC")")-输入值 a()处也可以用 cick()表示点击

2. driver.execute_script("$(name=name 定位值 va(")输入值

3. driver.execute_script("$(cas 定位值)va()")输入值

4. driver.execute_script("$((class=]").val().)

5. driver. execute script ("SCIvalue= ]").val()")

11.16 css 定位的方法?

#通过样式 #id 样式, .cass 样式为多

1. find_element_by_css_selector("#id")

2. find_element_by_css_selector(".classname 定位值")

#通过元素属性

3. find_element_by_css_selector("[name=name 定位值]")

Find_element_by_css_selector("[class=定位值]")

#样式,属性结合

find

_element_by_css_selector(div#fanwe_msg_box>table>tbody>tr>td:nth-child(2)>div(@class='d

ialog-content'))

5.父子元素定位

Find_element_by_css_selector(div#fanwe msg box> table>tbody>tr> td:nth-child(2)

>div:nth-child(2))

11.17 xpath 定位的方法? xpath 怎么写?

Xpath 写法://*div[@id=’u1’]/a[7]

#相对路径

Xpath 写法:/html/boy/div[1l/div/div/divl3/a[7

#绝对路径

#先找父元素,结合属性

Find_element_by_xpath(//div(@id=u1"/a[@name=tj_login])

11.18 如何去定位下拉框

1、首先要导入一个包: from selenium.webdriver.support.select import Select

2、先给下拉框元素定位定义一个变量:a= diver.find_element_by_css_selector()76

3、再通过根据下拉框的 value\visible_text\index 去选择值

Select(a).select_by_value('')--根据下拉框的 vaue 值去选取值

Select(a).select_by_visible_text('')--根据下拉框的内容去选值

Select(a).select_by_index('')--根据下拉框的下标去选。从 0 开始

下方小卡片领取全套资料

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值