这样的软件测试面试题,谁面试遇到谁淘汰!!!

88
11.6 自动化测试用例的来源
手工编写测试用例
把原来手工的测试用例,当成自动化测试用例
11.7 自动化测试的优点与缺点
优点:
1、对程序的回归测试更方便
2、可以运行更多更繁琐的测试
3、提高测试效率和准确性,节约时间成本
4、可以执行一些手工测试困难或不可能进行的测试(例如,对于大量用户的测试,可以通过自动化测
试模拟同时有许多用户,从而达到测试的目的)
5、自动化测试不存在执行过程中的疏忽和错误,从而增加软件信任度
缺点:
1、不能取代手工测试
2、手工测试比自动测试发现的缺陷更多
3、对测试质量的依赖性极大
4、由于自动测试比手动测试更胞弱,所以维护会受到制,从而会制约软件的开发
5、工具本身无想像力
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

89
直接操作浏览器页面里的元素,甚至操作浏器本身(截屏,回口大小,启动,关闭,安装插件,配置
证书之类的),由于使用的是浏览器原生的 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 元素的操作和呈
现多少会有一些差异,这就直接导致了 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() #加载一个网页
元素定位的:

90
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 定位

91
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='';")
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=定位值]")

92
#样式,属性结合
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()
3、再通过根据下拉框的 value\visible_text\index 去选择值
Select(a).select_by_value('')--根据下拉框的 vaue 值去选取值
Select(a).select_by_visible_text('')--根据下拉框的内容去选值
Select(a).select_by_index('')--根据下拉框的下标去选。从 0 开始
11.19 如何去定位内嵌界面
1、定位元素的时候看到 fame 的需要进入内嵌
2、如果有内嵌有 id 或 name 值时直接进入内嵌 driver.switch_to.frame(id 值或 name 值)
3、如果内嵌没有 id 或 name 值,先定义一个内嵌再进入:
a=driver.find_element_by_class_name(‘’)
driver.switch_to.frame(a)
4、如果有多层内嵌,要一层一层进入
5、记得退出内嵌: driver.switch_to_default_content()
6、driver.switch_to.parent_frame()---进入父级内嵌,调至上一级内嵌
11.20 如何在不同的网页之间切换
1.首先要获取多个界面的句柄

93
先通过定位元素几个界面: driver.find_element_by_id().click 或者其他,获取一个界面打印一个:
print (diver.window_handles)
然后获取几个界面的句柄,定义成一个变量:window_list= diver.window_handles()---以列表形式
存在
2.通过界面句柄的下标进入不同的界面: driver.switch_to_window(window_list[O])
通过界面句柄的下标进入不同的界面,0 表示第一个,下标-1 代表最新的界面
注意:如果进入一个界面里面是内嵌,记得退出内嵌再进入另一个界面
11.21 如何去定位滚动条?滚动条怎么处理?
一般当我们西面上的元素超过一屏后,想操作屏幕下方的元素,是不能直接操作的,会报元素不可见
异常的。这时候需要借助滚动条来拖动屏幕,使被操作的元素显示在当前的屏幕上,selenium 提供
了一个操作 js 的方法: execute.script(),可以直接执行 js 的脚本,
滚动到底部:
Js='var q=document.getElementByld('id')scrollTop=10000'
Driver.execute_script(js)
滚动到顶部:
js='var q=document.documentElementscrollTop=0'
driver.execute_script(js)
#把滚动条拉到指定位置
虽然用上面的方法可以解决拖动滚动条的位置问题,但是有时候无法确定我需要操作的元素在什么位
置,有可能每次打开的页面不一样,元素所在的位置也不一样,这个时候我们可以先让页面直接跳到
元素出现的位置,然后就可以操作了。
Target_element = driver.find_element_by_xpath(‘//*[@id="4"]/h3/a’)
Driver.execute_script("arguments[O].scrollIntoView();",target_element)
11.22 如何去模拟键盘与鼠标的操作?
模拟键盘:
1、要导入一个包 rom selenium. wedriver common keys import Keys
2、快捷键输入,通过 send_keys()方法可以来模拟键盘输入操作。
Send_keys(Keys.CONTROL,'a’) 全选(Ctrl+A)
Send_keys(Keys.CONTROL,'C') 复制(Ctrl+C)
Send_keys(Keys.CONTROL,’X’) 剪切(Ct+X)
Sen_ keys(Keys.CONTROL,’V’) 粘贴(Ctr+V)

94
Send_keys(Keys.ENTER) 回车键
Send_keys(Keys.BACK_SPACE) 删除键
Send_keys(Keys.SPACE) 空格键
Send_keys(Keys.TAB) 制表键
Send_keys(Keys.ESCAPE) 回退键
模拟鼠标:
语法: ActionChains(diver).鼠标操作动作操作的元素. Perform()
鼠标操作动作有:click()单击、 context_click()右击、 double_click()双击、
Move_to_element()鼠标悬停
1.先导入一个鼠标的包:from selenium.webdriver.common.action_chains import Action Chains
2.然后定位元素: driver.find_element_by_xpath()可以定义为一个变量 aa
3.然后通过语法执行:Action Chains(driver).move_to_element(aa).perform()
11.23、如何去处理上传 Windows 文件?
1.可直接赋值 send_keys 输入图片的地址
其实上传文件的按钮就是一个 input 元素,只是它的 type 类型是 file 类型,
我们在处理这种上传文件的按钮的时候,可以直接通过普通定位方式去定位它,
再利用 send_keys 方法去输入图片的地址就可以了。
Load_file_element=driver.find_element_by_xpath(‘/html/body/div(8l/div(1)/div(2/div/div
[3]/form/div/div/div/inpu’)
2.需要用到一个工具,Autolt 工具
帮助我们识 Windows 控件信息利用 Autolt 生成一个操作 Windows 对话框的 exe 执行文件
然后在 python 代码中去调用这个可执行文件
这里需要用到 os 模块,利用 os.system 去执行 windows 的 exe 文件,
把 exe 文件的路径传入,并传入需要上传的图片的路径即可
Drver.fnd_ement_by_xpath(‘html/body/divoiv1/dw2]/div/div3form/dvd/di)cick()#点击浏览
time.sleep(1)
ossystem(C:\Users\\Administrator\\ Desktop\\AA.exe D:\\QQ.png)
11.24 如何去定位时间控件
1、首先 js 去定位元素,去除元素中的属性:js="$(‘’).removeAttr(要删除的属性)
2、然后执行 js 脚本: driver.execute.script(js)
3、然后输入时间日期

95
driver.find_element_by_xpath(//[@id=start time]").send keys("2018-12-29 10:55:55)#输入日

11.25 弹出框的操作?
弹出框一般有三种:警告消息框,确认对话框,提示消息框
在 selenium 中提供了一个方法 switch_to.alert,跳转到对话框上面去对 alert 对话框进行操作的函
数/法
Accept() #点击确定按钮
Dismiss() #点击取消按钮
Text #获取对话框上的文本信息
Send_keys() #输入内容
11.26 等待时间有哪三种,区别是什么?
1、sleep 强制等待,要导入 from time import sleep,必须等待那么多秒定位才执行
2、driver.implicitly_wait 隐式等待多秒内只要找到元素就开始执行,超多设定时间就超时
3、Web DriverWaite(driver,20.1).until(lambdax.x.find_element_by_name()).send_keys()-首先
需要导入一个包:fom selenium.webdriver.support.wait import WebDriverWait, driver 1s 钟找一
次元素,最多找 20 秒,一直发送请求,直到找到元素位置以后,进行下一步操作。
11.27 有没有修改过页面元素的属性,具体怎么修改?
有的,有时候我们会碰到一些元素不可见,这个时候 selenium 就无法对这些元素进行操作了。例如,
下面的情况:页面主要通过“display.none”来控制整个下拉框不可见。这个时候如果直接操作这个
下拉框,就会提示:我们需要通过 javaScript 修改 display 的值
具体修改方式如下:
js='document.queryselectorAll(‘select’)[1].style.display="block";’
driver.execute_script(js)
11.28 定位不到元素,你碰到过哪些?怎么解决的?
1、像页面加载延迟的问题,这个需要通过等待延迟的方式来处理。
2、不过有时候,页面加载完成,但是元素暂时还不可见,导致定位不成功
这个可以选择使用显示等待来处理,这里需要用到 WebDriverWait 类来实现
3、还有就是像内嵌网页的问题,需要使用 driver.switch_to.frame(name/index)这个函数来跳转到
处理。
4、还有要注意多窗口问题,动态 id 问题等的问题,对于多窗口处理,可以使用

96
driver.switch_to.window()的方式来进行处理,而对于动态 id 的问题,需要注意的是有些 id 跟数
字有关,可能会动态变化,可以使用 xpath 也可以使用 css_select 属性定位或者样
式定位,或者可以通过父元素来找元素,或者通过兄弟节点来找对应的元素。等等
5、还有要特别注意滚动条的问题,这里通过调用 js 代码来实现的,driver.execute_script(js)
6、再这就是有时候会碰到某些元素的是不可见的,比如 display 属性为 none 这就需要通过 java
Script 修改 display 的值。
js ='document. querySelectorAll("select")[1]. style. display="block";
driver.execute_script(js)
11.29 元素定位,有时候定位得到,有时候定位不到,可能是什么原因,你会怎么处理?
1、可能是网络问题,导致页面加载延迟,这个可以做延迟等待,一般选择隐式等待,在脚本前面加
上 driver.implicitly_wait(20)。
2、也有可能是页面结构发生变化导致的,这个时候最好选择通过 xpath 或 css 结合属性进行或者样
式定位可能会好点,或者采用 JQuery 定位的方式来进行定位元素
11.30 对于不可见/隐藏的元素,你如何定位,如何处理?
我们可以通过 javaScript 修改 display 的值,来实现
#修改元素的属性
#我们需要通过 javaScript 修改 display 的值。
js='document.querySelectorAll('select')[1].style.display="block";’
driver.execute_script(js)
11.31 如果元素经常变动你怎么做?
1,少用绝对路径,多用 css 或者 jQuery 定位
2,单个元素属性进行封装

  自动化测试相关教程推荐:

2023最新自动化测试自学教程新手小白26天入门最详细教程,目前已有300多人通过学习这套教程入职大厂!!_哔哩哔哩_bilibili

2023最新合集Python自动化测试开发框架【全栈/实战/教程】合集精华,学完年薪40W+_哔哩哔哩_bilibili

测试开发相关教程推荐

2023全网最牛,字节测试开发大佬现场教学,从零开始教你成为年薪百万的测试开发工程师_哔哩哔哩_bilibili

postman/jmeter/fiddler测试工具类教程推荐

讲的最详细JMeter接口测试/接口自动化测试项目实战合集教程,学jmeter接口测试一套教程就够了!!_哔哩哔哩_bilibili

2023自学fiddler抓包,请一定要看完【如何1天学会fiddler抓包】的全网最详细视频教程!!_哔哩哔哩_bilibili

2023全网封神,B站讲的最详细的Postman接口测试实战教学,小白都能学会_哔哩哔哩_bilibili

  总结:

 光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

如果对你有帮助的话,点个赞收个藏,给作者一个鼓励。也方便你下次能够快速查找。

如有不懂还要咨询下方小卡片,博主也希望和志同道合的测试人员一起学习进步

在适当的年龄,选择适当的岗位,尽量去发挥好自己的优势。

我的自动化测试开发之路,一路走来都离不每个阶段的计划,因为自己喜欢规划和总结,

测试开发视频教程、学习笔记领取传送门!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/214739.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手把手教你玩转ESP8266(原理+驱动)

在嵌入式开发中,无线通信的方式有很多,其中 WIFI 是绕不开的话题。说到 WIFI 通信,就不得不提 ESP8266了。 ESP8266 是一款高性能的 WIFI 串口模块,实现透明传输。只要有一定的串口知识,不需要知道 WIFI 原理就可以上…

作为一个产品经理带你了解Axure的安装和基本使用

1.Axure的简介 Axure是一种强大的原型设计工具,它允许用户创建交互式的、高保真度的原型,以及进行用户体验设计和界面设计。Axure可以帮助设计师和产品经理快速创建和共享原型,以便团队成员之间进行沟通和反馈。Axure提供了丰富的交互组件和功…

Spring--10--Spring Bean的生命周期

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1.Spring Bean1.1 什么是 Bean简而言之,bean 是由 Spring IoC 容器实例化、组装和管理的对象。 1.2 Spring框架管理Bean对象的优势 2.Bean的生命周期实例…

西工大网络空间安全学院计算机系统基础实验二(phase_2下——漫漫深夜过后的黎明!!!)

内存地址内存地址中的数注释指向这块内存的寄存器0xffffd0e8函数phase_2的栈帧0xffffd0e40xffffd0f4函数phase_2的栈帧0xffffd0e00x5655b7b0函数phase_2的栈帧0xffffd0dc0x565566ca函数read_six_numbers的返回地址,函数phase_2的栈帧0xffffd0d80x5655af64旧%ebx的值…

SpringIOC之ConditionEvaluator

博主介绍:✌全网粉丝5W+,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验✌ 博主作品:《Java项目案例》主要基于SpringBoot+MyBatis/MyBatis-plus+…

一文读懂MySQL基础知识文集(8)

🏆作者简介,普修罗双战士,一直追求不断学习和成长,在技术的道路上持续探索和实践。 🏆多年互联网行业从业经验,历任核心研发工程师,项目技术负责人。 🎉欢迎 👍点赞✍评论…

单目相机测距(3米范围内)二维码实现方案(python代码 仅仅依赖opencv)

总体思路:先通过opencv 识别二维码的的四个像素角位置,然后把二维码的物理位置设置为 cv::Point3f(-HALF_LENGTH, -HALF_LENGTH, 0), //tl cv::Point3f(HALF_LENGTH, -HALF_LENGTH, 0), //tr cv::Point3f(HALF_LENGTH, HALF_LENGTH, 0), //br cv::P…

软件运行原理 - 内存模型 - 栈内存

说明 C/C软件运行时,内存根据使用方式的不同分为堆内存和栈内存,栈内存使用有以下特征: 栈内存使用(申请、释放)由系统自动分配和释放,程序员不用做任何操作。栈内存重复使用,进入函数时数据入…

什么是特征图?

在卷积神经网络(CNN)中,特征图是在传递给卷积层的图像上发生卷积操作后卷积层的输出。 特征图是如何形成的? 在上面的插图中,我们可以看到特征图是如何从提供的输入图像中形成的。 要发送到卷积层的图像是一个包含像…

微服务网关组件Gateway实战

1. 需求背景 在微服务架构中,通常一个系统会被拆分为多个微服务,面对这么多微服务客户端应该如何去调用呢?如果根据每个微服务的地址发起调用,存在如下问题: 客户端多次请求不同的微服务,会增加客户端代码…

聚首引领行业风潮!聚首品牌联动资源价值平台发布会正式启航

2023年12月10日,由杭州建筑装饰学会、浙江聚首联优材料科技有限公司主办,天尚设计集团、公和设计集团、铭扬工程设计集团、地标设计集团、上宸工程设计集团、华坤建筑设计院、广厦建筑设计研究院、上海传承博华建筑规划设计院、航冠工程设计院、浙江鸿能…

设计模式——建造者模式(创建型)

引言 生成器模式是一种创建型设计模式, 使你能够分步骤创建复杂对象。 该模式允许你使用相同的创建代码生成不同类型和形式的对象。 问题 假设有这样一个复杂对象, 在对其进行构造时需要对诸多成员变量和嵌套对象进行繁复的初始化工作。 这些初始化代码…

Python3开发环境的搭建

1,电脑操作系统的确认 我的是win10、64位的,你们的操作系统可自寻得。 2,Python安装包的下载 (1)浏览器种输入网址:https://www.python.org 选择对应的系统(我的是win10/64位) &#xf…

设计模式(二)-创建者模式(5)-建造者模式

一、为何需要建造者模式(Builder)? 在软件系统中,会存在一个复杂的对象,复杂在于该对象包含了很多不同的功能模块。该对象里的各个部分都是按照一定的算法组合起来的。 为了要使得复杂对象里的各个部分的独立性,以及…

腾讯物联网平台之规则引擎

1.腾讯物联网平台简介 腾讯云物联网开发平台(IoT Explorer)为客户提供便捷的物联网开发工具与服务,助力客户更高效的完成设备接入,并为客户提供物联网应用开发及场景服务能力,帮助客户高效、低成本构建物联网应用。  …

SpringBoot集成系列--RabbitMQ

文章目录 一、代码1、添加依赖2、配置RabbitMQ连接3、RabbitMQ配置4、创建生产者5、创建消费者6、测试 二、遇到的问题1、Channel shutdown2、收不到信息3、安装RabbitMQ&#xff0c;无法访问控制台访问 一、代码 1、添加依赖 在pom.xml文件中添加RabbitMQ的相关依赖 <de…

Leetcode—228.汇总区间【简单】

2023每日刷题&#xff08;五十六&#xff09; Leetcode—228.汇总区间 解题思路 我们可以用双指针left 和 right找出每个区间的左右端点。 遍历数组&#xff0c;当right 1< n 且 nums[right1]nums[right]1 时&#xff0c;指针right向右移动&#xff0c;否则区间 [left, …

51.Go操作kafka示例(kafka-go库)

文章目录 一、简介二、生产者三、消费者 代码地址&#xff1a;https://gitee.com/lymgoforIT/golang-trick/tree/master/31-kafka-go 一、简介 之前已经介绍过一个操作kafka的go库了&#xff0c;28.windows安装kafka&#xff0c;Go操作kafka示例&#xff08;sarama库&#xf…

基于JavaWeb+SpringBoot+Vue在线拍卖系统的设计和实现

基于JavaWebSpringBootVue在线拍卖系统系统的设计和实现 源码获取入口Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 Lun文目录 摘 要 1 Abstract 1 1 系统概述 4 1.1 概述 4 1.2课题意义 4 1.3 主要内容 4 2 …

C++新经典模板与泛型编程:策略技术中的算法策略

策略技术中的算法策略 在之前博客中funcsum()函数模板中&#xff0c;实现了对数组元素的求和运算。求和在这里可以看作一种算法&#xff0c;扩展一下思路&#xff0c;对数组元素求差、求乘积、求最大值和最小值等&#xff0c;都可以看作算法。而当前的funcsum()函数模板中&…