愿万事胜意
文章目录
- 1. 在你们项目中接口测试用例你是怎么设计的
- 2. 接口测试用例你是怎么设计的
- 3. 分页查询接口测试要注意什么
- 3. 接口测试流程
- 4. 接口测试的过程中发现过哪些bug
- 5. 一个接口请求不通该如何排查
- 6. 接口测试中是怎么校验接口返回结果是否正确
- 7. 为什么做接口测试(快且成本低,服务器端,前后端进程不一致)
- 8. cookie,session,token有什么相同点和不同点
- 9. get和post的区别
- 10. http和https的区别
- 11. HTTP状态码,以及它们代表什么意思
- 12. 如何分析一个bug是前端还是后端的
- 13. 为什么要做WEB自动化测试(模拟手工测试,冒烟回归)
- 14. web自动化测试用例如何设计
- 15. 数据库校验
- 16. web自动化中有哪三类等待?他们有什么特点
- 17. 验证码的几种处理方式
- 18. 在selenium中如何处理多窗口
- 19. 在执行脚本过程,如何实现当前元素高亮显示
- 20. 在Selenium中如何实现用例执行失败才截图
- 21. 如何实现文件上传
- 22. 测试脚本能在不同浏览器上运行
- 23. 遇到alert弹出窗如何处理
- 24. 获取元素的enabled,disabled,checked
- 25. 如何处理下拉菜单
- 26. 日历这种web 表单你是如何处理的
- 27. 对于属性动态变化的元素如何处理
- 28. 还有什么想问我们的吗
- 29. 如何进行职业规划
1. 在你们项目中接口测试用例你是怎么设计的
1)考虑输入参数和输出参数的合法性,参数必填,默认值,参数长度和格式校验,边界等,图片长传考虑图片大小和格式。
鉴权反例:鉴权码为空,鉴权码错误,鉴权码过期
2)性能测试(接口tps、响应时间等)
3)兼容性,新老版本数据的兼容,不同的硬件环境
4)安全性,敏感信息加密,恶意攻击的防范,权限控制等
5)幂等性(接口幂等性就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。举个最简单的例子,那就是支付,用户购买商品后支付,支付扣款成功,但
是返回结果的时候网络异常,此时钱已经扣了,用户再次点击按钮,此时会进行第二次扣款,返回结果成功,用户查询余额返发现多扣钱了,流水记录也变成了两条,这就没有保证接口的幂等性)
6)其他场景反例:分页,黑名单用户,接口调用次数限制,接口调用时间的限制。查询考虑数据排序,分页考虑分页显示等。
2. 接口测试用例你是怎么设计的
正例:正确输入必填的参数,接口正常返回。
反例:
鉴权反例:鉴权码为空,鉴权码错误,鉴权码过期…
参数反例:必填,类型异常,长度异常,错误码不符合需求(根据业务定)
其他场景反例:分页,黑名单用户,接口调用次数限制,接口调用时间的限制。
兼容性用例:多版本的兼容,多端的兼容
3. 分页查询接口测试要注意什么
验证分页参数:确保接口能够正确接收和解析分页参数,例如页码和每页数量是正确的,并返回正确的分页结果。
验证返回结果:检查接口返回的分页结果的数据按照预期的顺序进行排序。
验证边界情况:测试分页参数的边界情况,例如第一页、最后一页、每页数量为0或负数等,确保接口能够正确处理这些情况。
验证性能:对于大数据量的分页查询接口,需要测试接口的性能,确保在大数据量情况下仍能保持较好的响应时间。
验证安全性:对于需要身份验证的分页查询接口,需要测试接口的安全性,确保只有授权用户能够访问和获取正确的分页结果。
验证异常情况:测试接口在异常情况下的处理能力,例如数据库连接失败、网络异常等,确保接口能够正确地处理这些异常情况。
3. 接口测试流程
1、获取接口文档,熟悉单接口以及接口业务,包括接口地址,请求方式,鉴权方式,入参,出参,错误码等。
2、编写接口测试用例并评审。
3、使用接口测试工具Postman/Jmeter执行接口测试通常执行过程中需要考虑以下几个方面:
- 是否满足前提条件:有些接口需要满足前提,才可成功获取数据。常见的,需要登录Token。
- 参数之间是否存在关联:有些参数彼此之间存在相互制约的关系
- 参数是否加密,比如说我登陆的接口,用户名和密码是不是加密,加密规则是否容易破解。
- 参数是否是需要设置成动态参数。
4、实现持续集成并输出接口测试报告发送电子邮件,企微(钉钉群)等,有bug报bug。
5、每天晚上12点都会运行一次,从而监控是否有因开发代码变更或者新功能添加而导致的遗漏接口bug。
4. 接口测试的过程中发现过哪些bug
接口测试中发现的bug,大多都是接口没按约定返回结果,参数为空,==参数长度或类型校验、没有鉴权、参数边界值、==代码逻辑、数据错误、或没有返回合理的错误提示等方面的问题。
前后端联调接口Bug案例:
比如
1)分页查询,数据列展示时间数据有问题,未将新发布的数据排在前面。
2)前端访问的mock数据时没有考虑鉴权。访问真实的后端接口时没有权限。
常规接口Bug案例:
1)为摄像头命名,只有一个空格也能保存成功,原因是后端代码没有对命名值做空格判断
2)查询硬件设备,查询出来的数据少了第一条,原因是SQL中limit条件传入起始序号是1而不是0,查询硬件设备,出现%时,查询出多余数据,%有模糊查询的意义,后端没有做处理
比如1:比如说修改商品信息接口,只有卖家权限才能修改,我传一个普通用户也可以修改成功,我传一个其他卖家用户也能修改成功。
5. 一个接口请求不通该如何排查
1.检查请求四要素:请求方式,请求路径,请求头,请求参数是否写错。
2.客户端和服务端网络不通。
3.服务端项目没有部署起来,接口无法访问。
4.请求被服务器的防火墙拦截了。
5.服务端程序内部发生了错误。
6.没有访问权限(比如缺乏token、cookie之类)。
7.客户端设置了网络代理(比如打开了Fiddler/Charles等抓包工具)。
6. 接口测试中是怎么校验接口返回结果是否正确
1)验证接口响应状态码是否是200。
2)当接口响应正文比较短,比较固定时验证响应的完整内容是否等于预期。
3)当响应内容较长较多时,验证响应报文是否包含关键信息。
4)当响应正文为XML格式或JSON格式时,可以通过XPATH或JSONPATH,正则表达式,获取其中的某个节点,验证响应报文关键字段是否存在。
5)查询数据库或调用其余接口查询。当要验证的信息在当前测试接口的响应内容中不存在时,可以调用其他接口来验证。例如,一个增加用户信息的接口,要验证信息确实增加成功了,可以再调用查询用户信息接口来确认用户信息添加成功。当然,在获取数据库查询权限的情况下,也可以直接查询数据库来验证。
7. 为什么做接口测试(快且成本低,服务器端,前后端进程不一致)
A、 在目前前后端分离开发的模式下,项目在开发过程中,客户端和服务端开发的进度不一致,比如服务端先开发完了,这个时候可以先对服务端进行接口测试,确保服务端逻辑和返回数据是正确的,然后再测试客户端。
B、在测试某些业务时,不能仅仅通过前端来测试,比如用户注册,前端限制了用户名不能为空,但是可以通过工具绕过前端直接调用服务端接口,如果服务端没有做相关的逻辑判断,就会造成数据错误。包括接口数据传输过程中是否对关键信息加密等。所以必须针对服务端接口做测试。
C、接口测试属于集成测试、测试介入越早、就越能在项目早期发现问题,其修复问题的成本越低,在开发提测后,可以先通过工具把服务端的接口测试跑一遍,确保接口测试用例都是通过的,能快速判断服务端接口是否符合预期。然后再通过UI界面进行测试。否则接口有bug,前端页面必定有bug。并且接口测试非常快速、接口测试用例执行的时间是毫秒级的。
d. 常见的集成测试有服务之间的API调用可能是关键的集成点,数据库的连接和查询操作就可能成为关键集成点。确保数据的一致性、完整性和正确性。系统与外部的第三方服务(例如支付网关、地理位置服务等)进行集成,这些集成点就成为关键点。用户界面与后端服务的交互可能是关键的集成点。
e. 接口测试有助于保证系统在不同模块之间的通信稳定。稳定的接口有助于防止系统崩溃、死锁和其他严重问题。
f. 接口测试可以发现和解决影响系统性能的问题,例如响应时间延迟、资源利用率等。通过优化接口,可以提高整个系统的性能。
8. cookie,session,token有什么相同点和不同点
相同点:
身份认证: 所有这三者都用于进行身份认证,以验证用户的身份。
状态管理: 它们都用于在客户端和服务器之间维护用户的状态信息。
不同点:
存储位置:
Cookie: 存储在客户端,以文本文件形式保存在用户的浏览器中。
Session: 通常是存储在服务器上的,也可以使用类似Cookie的方式将会话标识存储在客户端,但实际的会话数据仍存储在服务器上。
Token: 存储在客户端,通常作为 HTTP 请求头的一部分发送到服务器。
内容:
Cookie: 主要包含键值对,可以包含有关用户身份验证和其他信息的数据。
Session: 在服务器上存储有关用户的会话数据,与具体实现有关,可以包含更多信息。
Token: 通常是包含用户身份验证信息和其他元数据的字符串。
安全性:
Cookie: 需要注意安全性,因为它存储在用户的浏览器中,可以被用户查看和修改。
Session: 由于会话数据存储在服务器上,相对来说更安全,但需要注意会话劫持和会话固定等安全问题。
Token: 使用 HTTPS 加密时,相对较为安全,但需要注意令牌泄漏的问题。
生命周期:
Cookie: 可以设置过期时间,可以是会话级别或持久性的。
Session: 存在于用户会话期间,一般会在用户关闭浏览器时过期,也可以设置过期时间。
Token: 可以设置过期时间,可以是短暂的,也可以是长时间有效的。
9. get和post的区别
1)GET一般用于查询数据;而POST一般用于添加、删除或修改数据。
2)传参方式不同:get通过地址栏传输,post通过表单报文传输,所以post请求比get请求的安全性相对较好。get请求可以直接通过浏览器访问,支持刷新和后退。post请求不能直接使用浏览器访问,刷新后数据要重新发送。
3)传参长度不同:get参数有长度限制(受限于url长度),而post无限制
4)GET请求有幂等性,POST请求没有幂等性。
10. http和https的区别
1.http是超文本传输协议,信息是明文传输,Https协议是由HTTP协议+SSL协议构建的加密传输协议,比http协议安全;
2.http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443;
3.HTTP 无需证书,而 HTTPS 需要认证证书
4.HTTP适用于一些不涉及敏感信息的普通网页浏览等场景;而HTTPS适用于需要保护用户隐私和安全的网站,如在线银行、电子商务等。
11. HTTP状态码,以及它们代表什么意思
2xx(成功)
200:成功。请求已成功处理。
201:已创建。请求已经被成功处理,并且有一个新的资源被创建。
204:无内容。请求已成功处理,但响应报文中不含实体。
3xx(重定向)
301:永久重定向。请求的资源已永久移动到新位置。
302:临时重定向。请求的资源临时移动到新位置。
304:未修改。客户端可以使用缓存的版本。
4xx(客户端错误)
400:错误的请求。服务器无法理解该请求,url错误。
401:未授权。请求需要身份验证。
403:禁止访问。服务器拒绝请求。
404:未找到。请求的资源不存在。
5xx(服务器错误)
500 Internal Server Error:
表示服务器在执行请求时遇到了意外的情况,导致服务器无法完成请求。这是一个通用的错误状态码,可能是由于服务器端代码错误、配置问题或其他服务器内部问题引起的。
501 Not Implemented:
表示服务器不支持或未实现客户端请求的功能。这意味着服务器无法理解或处理请求中的某些功能。
503 Service Unavailable:
表示服务器目前无法处理请求,通常是由于服务器过载、维护或临时故障引起的。这个状态码告诉客户端暂时不可用,但可能在未来变为可用。
504 Gateway Timeout:
表示服务器作为网关或代理在等待上游服务器的响应时超时。这通常意味着上游服务器无法及时响应请求。
505 HTTP Version Not Supported:
表示服务器不支持客户端请求的HTTP协议版本。客户端请求的HTTP版本与服务器支持的版本不匹配。
12. 如何分析一个bug是前端还是后端的
观察错误现象:仔细观察bug的表现和错误提示信息。如果错误是在用户界面上出现,比如显示异常、交互问题等,那么很可能是前端引起的。如果错误是在数据处理、请求响应等过程中出现,那么可能是后端引起的。
查看日志:检查前端和后端的日志记录。前端日志通常包含浏览器控制台的输出,后端日志则涵盖服务器的日志文件。查看日志可以帮助确定错误所在的层面。
排除方法:进行排除方法的测试,暂时关闭某一层的相关功能,看是否可以解决问题。如果问题仍然存在,那么可能是另一层引起的。
数据对比:比较前后端传输的数据,确保数据在传输过程中没有被损坏或改变。这可以通过查看网络请求和响应的数据内容来实现。
调试和追踪:使用开发者工具和调试器对前端代码和后端代码进行逐步调试和追踪。这可以帮助找出具体的问题代码和逻辑。
测试回归:在修复问题之后,进行前后端的回归测试,验证修复是否完全解决了问题。
13. 为什么要做WEB自动化测试(模拟手工测试,冒烟回归)
Web自动化测试就是模拟手工测试人员来做功能测试。用机器的自动执行代替人的操作。主要用于产品的核心功能冒烟测试、回归测试。从系统最核心的功能开始做,再根据情况慢慢展开。
引用自动化测试之后,能代替大量繁琐的回归测试工作,把业务测试人员解放出来,既而让业务测试人员把精力集中在复杂的业务功能模块上,自动化测试一般是对稳定下来的功能进行自动化,保证不会因为产品的更新导致之前稳定下来的功能出现BUG。
14. web自动化测试用例如何设计
WEB自动化测试用例是从手工测试用例中提取出来的,主要是冒烟用例和回归测试的用例。自动化测试
用例的选取更加需要注重用例的严谨性,选择用例的时候遵循以下原则:
1.优先选取覆盖产品核心业务流程的用例;
2.选取的用例是需要重复执行或繁琐的验证功能,比如字段验证、提示信息验证;
3.优先选择正向的测试用例,反向用例一般情况复杂、数量多;
4.不要选择流程太复杂的用例(主流程除外)
15. 数据库校验
在自动化测试中进行数据库校验可以通过以下步骤完成:
连接数据库:首先,需要在自动化测试框架中建立与数据库的连接。这可以通过使用适当的数据库驱动程序和连接字符串来实现。确保在测试环境中使用特定的数据库实例,而不是生产环境中的数据库。
执行数据库操作:在测试用例中,执行需要进行数据库校验的相关测试步骤。这可以包括插入、更新或删除数据,或者执行特定的数据库查询语句。
获取校验结果:执行完数据库操作后,获取数据库的查询结果或相关数据。这可能是一个结果集、单个数据项或特定的统计数据,具体取决于测试用例的要求。
断言和校验:使用自动化测试框架提供的断言功能,比较实际的数据库结果与预期的结果是否一致。这可以是对查询结果进行比对,或者对数据库中特定字段的值进行验证。
记录校验结果:将校验结果以适当的方式记录下来,例如在测试报告中输出相应的信息。这有助于分析和跟踪测试的结果。
16. web自动化中有哪三类等待?他们有什么特点
1.强制等待,如time.sleep(3):线程强制休眠3秒钟,3秒过后,再执行后续的代码。建议少用。
2.imlicitlyWait(隐式等待)这种是全局设置的等待,如设置超时时间为10秒,使用了implicitlyWait后,如果第一次没有找到元素,会在10秒之内不断循环去找元素,如果超过10秒还没有找到,则抛出异常,特点是必须等待整个页面加载完成。
3.WebDriverWait(显式等待)也称为智能等待,通常是我们自定义的一个函数代码,这段代码用来针对指定元素定位指定等待时间,在指定时间范围内进行元素查找,找到元素则直接返回,如果在超时还没有找到元素,则抛出异常,显示等待是 selenium 当中比较灵活的一种等待方式,他的实现原理其实是通过 while 循环不停的尝试需要进行的操作。
17. 验证码的几种处理方式
1.在产品没有上线前,需要找开发将验证码先注释掉,或者让开发给web验证码留一个万用验证码,只要输入给定的验证码,就可以强制登录
2. 先让开发注释掉验证码,可以通过Cookie跳过登录验证码,在登录成功后,通过浏览器开发者工具或其他类似工具,查找并复制登录成功后生成的 Cookie,将获取到的有效 Cookie 的值添加到自动化测试脚本中,并在每次测试开始前设置相应的 Cookie。
3. 滑块验证码可以直接使用人工智能+代码的方式处理。
4. 使用第三方的验证码识别技术(比如百度智能,超级鹰等)
18. 在selenium中如何处理多窗口
这个多窗口之间跳转处理,我们在项目中也经常遇到。就是,当你点击一个链接,这个链接会在一个新的tab打开,然后你接下来要在新tab打开的页面定位元素并处理。
步骤如下
1.我们在点击链接前使用driver.current_window_handle获得当前窗口句柄。
2.再点击链接。点击后通过driver.window_handles获得所有窗口的句柄,
3.然后再循环找到新窗口的句柄,然后再通过driver.switch_to.window()方法跳转到新的窗口。
4. window太多则可以按照title、url等其他信息进行判断切换
19. 在执行脚本过程,如何实现当前元素高亮显示
执行 JavaScript 代码以在元素周围添加高亮效果:
定义高亮样式
highlight_style = "border: 4px solid red;"
使用 JavaScript 代码将元素样式修改为高亮样式
driver.execute_script("arguments[0].setAttribute('style', arguments[1]);", element, highlight_style)
20. 在Selenium中如何实现用例执行失败才截图
在Selenium中提供了一个get_screenshot_as_file()的方法来截图的,一般结合try/except捕获异常时使
用,进行错误截图。
然后把截图作为附件写入到Allure报告中
21. 如何实现文件上传
定位元素后,直接使用send_keys()方法设置就行,参数为需要上传的文件的路径
22. 测试脚本能在不同浏览器上运行
写的用例可以在在IE,火狐和谷歌这三种浏览器上运行。实现的思路是封装一个方法,分别传入一个浏览器的字符串,如果传入IE就使用IE,如果传入FireFox就使用FireFox,如果传入Chrome就使用Chrome浏览器,并且使用什么浏览器可以在总的ini配置文件中进行配置。需要注意的是每个浏览器使用的驱动不一样。
23. 遇到alert弹出窗如何处理
使用driver.switch_to.alert方法先跳转到alert弹出窗口
然后再通过accept点击确定按钮,通过dismiss点击取消按钮,通过==text()==获得窗口文本
24. 获取元素的enabled,disabled,checked
要获取元素的启用(enabled)、禁用(disabled)和选中(checked)状态,您可以使用 Selenium 的相关方法和属性。
获取元素的启用状态(enabled):
element = driver.find_element(By.XPATH, "//your_xpath_here")
is_enabled = element.is_enabled()
is_enabled() 方法将返回一个布尔值,表示元素是否处于
启用状态。如果元素启用,则返回 True;如果元素禁用,
则返回 False。
获取元素的禁用状态(disabled):
element = driver.find_element(By.XPATH, "//your_xpath_here")
is_disabled = element.get_attribute("disabled") is not None
通过使用 get_attribute("disabled") 方法,
您可以获取元素的 disabled 属性。如果元素没
有 disabled 属性,返回值为 None,表示元素
启用。如果元素具有 disabled 属性,返回值为
非 None,表示元素禁用。
获取元素的选中状态(checked):
element = driver.find_element(By.XPATH, "//your_xpath_here")
is_checked = element.is_selected()
25. 如何处理下拉菜单
(1)正常的Select下拉框
在Selenium中有一个叫Select的类,这个类支持对下拉菜单进行操作。使用方法如下:
1.定位元素
element = driver.find_element(By.XPATH, "//your_xpath_here")
2.把定位的元素转化成Select对象。
sel = Select(element)
3.通过下标或者值或者文本选中下拉框。
通过文本选择选项
select.select_by_visible_text("选项文本")
通过值选择选项
select.select_by_value("选项值")
通过索引选择选项(从0开始)
select.select_by_index(2)
(2)通过div改造的下拉框
直接通过Xpath定位即可
26. 日历这种web 表单你是如何处理的
使用现有的日历插件或库:有许多开源的 JavaScript 插件可用于处理日历功能,例如 FullCalendar、DatePicker 等。你可以选择一个适合你项目需求的插件,并按照其文档进行集成和配置。
手动开发:如果你希望自己开发处理日历的功能,可以使用 HTML、CSS 和 JavaScript 进行手动开发。你可以创建一个包含日期选择器、月份导航和事件显示的界面,并编写相应的 JavaScript 代码来处理用户的操作和数据。
使用框架:如果你使用的是前端框架,如 React、Angular 或 Vue.js,那么可以寻找与该框架配套的日历组件或库。这些框架通常有丰富的生态系统,提供了许多第三方组件和工具,包括日历功能。
27. 对于属性动态变化的元素如何处理
使用固定的属性值进行定位:如果元素的某个属性在动态变化,但仍然具有一些固定不变的属性值,你可以使用这些固定的属性值来定位元素。例如,==元素的 id、class、name ==或其他属性值是固定的,你可以使用这些属性值来选择元素。
使用相邻元素进行定位:如果属性动态变化的元素与其他固定元素之间有一定的关联性,你可以使用相邻元素来定位目标元素。通过选择相邻元素,然后使用 Selenium 或其他自动化测试工具提供的相对定位方法(如相对 XPath 或 CSS 选择器)来找到目标元素。
使用属性值的一部分进行匹配:如果属性值是动态生成的,但其中的一部分是固定的,你可以使用属性值的一部分进行匹配。例如,元素的属性值包含一个固定的前缀或后缀,你可以使用 XPath、CSS 选择器或正则表达式等进行模糊匹配,从而选择到目标元素。
使用其他唯一的标识符:如果以上方法都无法有效定位目标元素,你可以考虑使用其他唯一的标识符进行定位,例如元素的文本内容、关键字、隐藏属性等。使用这些标识符结合适当的选择器,可以准确定位到目标元素。
28. 还有什么想问我们的吗
请描述一下团队的规模和组成。这有助于你了解团队的结构和与其他成员的合作方式。
对于你觉得测试团队为公司提供的最重要的价值是什么?这可以帮助你了解公司对测试的重视程度和团队文化。
你们使用哪些测试工具和技术?这有助于你了解公司的技术栈和测试流程。
在团队中,你们是如何进行缺陷管理和跟踪的?这将帮助你了解公司在质量保证和问题解决方面的方法和实践。
你们是否采用自动化测试?如果是的话,自动化测试的范围和使用的工具有哪些?这有助于你了解公司是否有自动化测试的实践和对其的投入程度。
对于测试工程师在团队中的职责和角色,你有什么期望?这将帮助你了解你在团队中将扮演的角色和预期。
你们如何促进团队成员的专业发展和学习?这有助于你了解公司是否重视员工的成长和提供学习机会。
在团队中最大的挑战是什么?这将帮助你了解团队目前所面临的挑战和你在入职后可能需要面对的情况。
29. 如何进行职业规划
了解行业和技术趋势:时刻关注测试领域的最新发展和技术趋势,包括自动化测试、敏捷开发、云计算等。这有助于你了解行业的需求,并为你选择合适的技能和知识做准备。
设定职业目标:思考你想要在测试领域中达到的目标,例如成为高级测试工程师、测试团队的领导者或质量保证专家。根据目标制定计划,确定所需的技能和经验,以便逐步实现你的职业发展。
积累技能和知识:持续学习和提升技能是职业发展的关键。掌握测试工具和框架,深入了解软件开发生命周期和测试方法学,提高编程和自动化测试技能,以及不断提升你的问题解决能力。
寻找学习机会:参加行业相关的培训、研讨会和会议,加入测试社区,与其他测试专业人士交流经验和见解。此外,也可以考虑参与认证项目,如ISTQB(国际软件测试资格委员会)认证,以加强你的信誉和竞争力。
争取项目经验:积极寻找不同类型的测试项目,包括功能测试、性能测试、安全测试等。通过参与不同项目,你可以扩展自己的技能和经验,并对不同领域的测试有更深入的了解。
发展领导能力:如果你希望在测试领域中成为团队的领导者或管理者,那么发展领导能力非常重要。寻找机会担任小团队的负责人,培养沟通、协作和人员管理能力。
持续评估和调整:定期评估自己的职业发展计划,确定是否朝着预期目标前进。随着时间的推移,你的兴趣和目标可能会发生变化,调整职业规划将帮助你保持对测试职业发展的动力和准确性。